/* ============================================================
   admin-v2.css — S Chetoora admin foundation (Phase 1)
   Created: 2026-04-08
   Scope:   body.admin-app.admin-v2   (opt-in; existing layouts
            continue to work until each page migrates)
   Hard rules honored:
     C2  font-size 10pt min, 12pt max in body content
     C3  no save buttons (auto-save only)
     C5  edit-lock states (locked / unlocked / saving / saved)
     C6  drag-handle hover state for reorderable columns
     C8  click-to-reach dotted underline on entity links
     C15 semantic color tokens for status states (one palette,
         one file to change later)
   ============================================================ */


/* ------------------------------------------------------------
   1) Semantic color tokens — ONE place to retune the palette.
      Scoped to .admin-v2 so legacy pages stay untouched.
      Re-declared under .dark so status pills adapt to theme.
   ------------------------------------------------------------ */
body.admin-app.admin-v2 {
  /* Typography scale — RESET 2026-04-09 per Vick:
       fine print  → 11px (was 10, "visible but small")
       body / details → 14-16px (was 11-12, "12pt" in his words)
       sidebar menu  → 16px (he said "14pt")
       page header   → 22px (he said "18pt")
     Earlier 10-12px clamp made the admin unreadable. */
  --v2-fs-xs:  11px;   /* fine print — captions, footnotes, helper text */
  --v2-fs-sm:  12px;   /* table headers, sub-labels */
  --v2-fs-md:  13px;   /* primary body text, table cells */
  --v2-fs-lg:  14px;   /* details, section sub-titles */
  --v2-fs-menu: 14px;  /* sidebar menu items */
  --v2-fs-h:   18px;   /* page header (h2 above page content) */
  --v2-fs-lh-tight: 1.4;
  --v2-fs-lh-body:  1.55;

  /* Density helpers */
  --v2-pad-xs:  4px;
  --v2-pad-sm:  8px;
  --v2-pad-md:  12px;
  --v2-pad-lg:  16px;
  --v2-gap-xs:  4px;
  --v2-gap-sm:  8px;
  --v2-gap-md:  12px;
  --v2-gap-lg:  16px;

  /* Status tokens — rent / occupancy / availability / integrations */
  --v2-paid-fg:        #059669;  --v2-paid-bg:      #d1fae5;  --v2-paid-border:    #6ee7b7;
  --v2-overdue-fg:     #b91c1c;  --v2-overdue-bg:   #fee2e2;  --v2-overdue-border: #fca5a5;
  --v2-grace-fg:       #b45309;  --v2-grace-bg:     #fef3c7;  --v2-grace-border:   #fcd34d;
  --v2-vacant-fg:      #475569;  --v2-vacant-bg:    #f1f5f9;  --v2-vacant-border:  #cbd5e1;
  --v2-rented-fg:      #1d4ed8;  --v2-rented-bg:    #dbeafe;  --v2-rented-border:  #93c5fd;
  --v2-available-fg:   #047857;  --v2-available-bg: #ecfdf5;  --v2-available-border:#6ee7b7;
  --v2-offline-fg:     #64748b;  --v2-offline-bg:   #e2e8f0;  --v2-offline-border: #94a3b8;

  --v2-pending-fg:     #7c3aed;  --v2-pending-bg:   #ede9fe;  --v2-pending-border: #c4b5fd;
  --v2-disabled-fg:    #52525b;  --v2-disabled-bg:  #f4f4f5;  --v2-disabled-border:#d4d4d8;
  --v2-active-fg:      #047857;  --v2-active-bg:    #ecfdf5;  --v2-active-border:  #6ee7b7;

  /* Save / lock UI tokens */
  --v2-lock-bg:        #f8fafc;
  --v2-lock-fg:        #64748b;
  --v2-lock-border:    #e2e8f0;
  --v2-unlock-bg:      #ffffff;
  --v2-unlock-fg:      #0f172a;
  --v2-unlock-border:  #0891b2;       /* cyan-600 */
  --v2-unlock-ring:    rgba(8,145,178,.18);
  --v2-saving-fg:      #b45309;
  --v2-saved-fg:       #059669;
  --v2-error-fg:       #b91c1c;

  /* Click-to-reach link */
  --v2-link-fg:          #0f172a;
  --v2-link-dotted:      #94a3b8;
  --v2-link-solid-hover: #0891b2;
}

body.admin-app.admin-v2.dark {
  --v2-paid-fg:        #6ee7b7;  --v2-paid-bg:      rgba(5,150,105,.14);  --v2-paid-border:    rgba(110,231,183,.35);
  --v2-overdue-fg:     #fca5a5;  --v2-overdue-bg:   rgba(220,38,38,.15);  --v2-overdue-border: rgba(252,165,165,.35);
  --v2-grace-fg:       #fcd34d;  --v2-grace-bg:     rgba(217,119,6,.15);  --v2-grace-border:   rgba(252,211,77,.35);
  --v2-vacant-fg:      #94a3b8;  --v2-vacant-bg:    rgba(148,163,184,.12);--v2-vacant-border:  rgba(148,163,184,.30);
  --v2-rented-fg:      #93c5fd;  --v2-rented-bg:    rgba(29,78,216,.15);  --v2-rented-border:  rgba(147,197,253,.35);
  --v2-available-fg:   #6ee7b7;  --v2-available-bg: rgba(4,120,87,.15);   --v2-available-border:rgba(110,231,183,.35);
  --v2-offline-fg:     #94a3b8;  --v2-offline-bg:   rgba(100,116,139,.18);--v2-offline-border: rgba(148,163,184,.30);
  --v2-pending-fg:     #c4b5fd;  --v2-pending-bg:   rgba(124,58,237,.15); --v2-pending-border: rgba(196,181,253,.35);
  --v2-disabled-fg:    #a1a1aa;  --v2-disabled-bg:  rgba(82,82,91,.18);   --v2-disabled-border:rgba(161,161,170,.35);
  --v2-active-fg:      #6ee7b7;  --v2-active-bg:    rgba(4,120,87,.15);   --v2-active-border:  rgba(110,231,183,.35);

  --v2-lock-bg:        #0f172a;
  --v2-lock-fg:        #94a3b8;
  --v2-lock-border:    #1f2a44;
  --v2-unlock-bg:      #131e35;
  --v2-unlock-fg:      #e2e8f0;
  --v2-unlock-border:  #22d3ee;
  --v2-unlock-ring:    rgba(34,211,238,.20);
  --v2-saving-fg:      #fcd34d;
  --v2-saved-fg:       #6ee7b7;
  --v2-error-fg:       #fca5a5;

  --v2-link-fg:          #e2e8f0;
  --v2-link-dotted:      #64748b;
  --v2-link-solid-hover: #22d3ee;
}


/* ------------------------------------------------------------
   2) Typography scale — Tailwind override, 10-12px clamp (C2)
      Scoped under .admin-v2 so legacy pages keep their current
      Tailwind sizes. Headings differentiate by WEIGHT + LETTER
      SPACING + CASE + COLOR, never by size.
   ------------------------------------------------------------ */
body.admin-app.admin-v2 {
  font-size: var(--v2-fs-sm);
  line-height: var(--v2-fs-lh-body);
}

/* Tailwind text utility overrides — scoped.
   Scale REOPENED 2026-04-09 per Vick — earlier 10-12px clamp made the
   admin unreadable. Headings now grow naturally so the page-header h2
   actually reads as a header (22px) instead of body text. */
body.admin-app.admin-v2 .text-\[10px\],
body.admin-app.admin-v2 .text-\[11px\],
body.admin-app.admin-v2 .text-\[12px\] { /* explicit pixel classes pass through */ }

body.admin-app.admin-v2 .text-xs    { font-size: var(--v2-fs-xs) !important; line-height: var(--v2-fs-lh-tight) !important; }
body.admin-app.admin-v2 .text-sm    { font-size: var(--v2-fs-md) !important; line-height: var(--v2-fs-lh-body)  !important; }
body.admin-app.admin-v2 .text-base  { font-size: var(--v2-fs-md) !important; line-height: var(--v2-fs-lh-body)  !important; }
body.admin-app.admin-v2 .text-lg    { font-size: var(--v2-fs-lg) !important; line-height: var(--v2-fs-lh-tight) !important; }
body.admin-app.admin-v2 .text-xl    { font-size: 18px            !important; line-height: var(--v2-fs-lh-tight) !important; font-weight: 600; }
body.admin-app.admin-v2 .text-2xl   { font-size: var(--v2-fs-h)  !important; line-height: var(--v2-fs-lh-tight) !important; font-weight: 700; }
body.admin-app.admin-v2 .text-3xl   { font-size: 26px            !important; line-height: var(--v2-fs-lh-tight) !important; font-weight: 700; }

/* Raw heading elements — ONLY inside explicit v2 containers.
   Phase 2+ agents wrap redesigned sections in .v2-section /
   .v2-card / .v2-chart-card so their headings pick up the
   differentiate-by-weight-and-case style. Legacy headings
   stay untouched. */
body.admin-app.admin-v2 .v2-section h1,
body.admin-app.admin-v2 .v2-section h2,
body.admin-app.admin-v2 .v2-section h3,
body.admin-app.admin-v2 .v2-section h4,
body.admin-app.admin-v2 .v2-section h5,
body.admin-app.admin-v2 .v2-card h1,
body.admin-app.admin-v2 .v2-card h2,
body.admin-app.admin-v2 .v2-card h3,
body.admin-app.admin-v2 .v2-card h4,
body.admin-app.admin-v2 .v2-card h5,
body.admin-app.admin-v2 .v2-chart-card h1,
body.admin-app.admin-v2 .v2-chart-card h2,
body.admin-app.admin-v2 .v2-chart-card h3,
body.admin-app.admin-v2 .v2-chart-card h4,
body.admin-app.admin-v2 .v2-chart-card h5 {
  font-size: var(--v2-fs-md);
  line-height: var(--v2-fs-lh-tight);
}
body.admin-app.admin-v2 .v2-section h1,
body.admin-app.admin-v2 .v2-card    h1,
body.admin-app.admin-v2 .v2-chart-card h1 { font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--admin-text, #0f172a); }
body.admin-app.admin-v2 .v2-section h2,
body.admin-app.admin-v2 .v2-card    h2,
body.admin-app.admin-v2 .v2-chart-card h2 { font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--admin-text, #0f172a); }
body.admin-app.admin-v2 .v2-section h3,
body.admin-app.admin-v2 .v2-card    h3,
body.admin-app.admin-v2 .v2-chart-card h3 { font-weight: 700; letter-spacing: .02em; color: var(--admin-text, #0f172a); }
body.admin-app.admin-v2 .v2-section h4,
body.admin-app.admin-v2 .v2-card    h4,
body.admin-app.admin-v2 .v2-chart-card h4 { font-weight: 600; letter-spacing: .01em; color: var(--admin-text, #0f172a); }
body.admin-app.admin-v2 .v2-section h5,
body.admin-app.admin-v2 .v2-card    h5,
body.admin-app.admin-v2 .v2-chart-card h5 { font-weight: 600; color: var(--admin-text-soft, #475569); }

/* IMPORTANT: the header area (logo, welcome chip, theme toggle,
   profile pic, sign-out) must NOT shrink (constraint C1).
   Scope exclusion via .v2-exempt-header — any element inside an
   element carrying this class keeps native Tailwind sizing. */
body.admin-app.admin-v2 .v2-exempt-header,
body.admin-app.admin-v2 .v2-exempt-header * {
  font-size: revert !important;
  line-height: revert !important;
  text-transform: revert !important;
  letter-spacing: revert !important;
}

/* Intentionally DO NOT force a base font-size on raw main elements
   (p, td, input, label…) in Phase 1. The size clamp on Tailwind
   utility classes plus the heading overrides already give us the
   owner-mandated 10-12px range for labelled content. Phase 2+
   agents migrating individual pages can opt into
   .v2-table / .v2-section / .v2-card etc. for the dense look. */


/* ------------------------------------------------------------
   3) Density helpers — owner specified p-3/p-4 not p-6/p-8.
      Utility classes scoped under v2 so pages can opt-in.
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-pad-xs { padding: var(--v2-pad-xs); }
body.admin-app.admin-v2 .v2-pad-sm { padding: var(--v2-pad-sm); }
body.admin-app.admin-v2 .v2-pad-md { padding: var(--v2-pad-md); }
body.admin-app.admin-v2 .v2-pad-lg { padding: var(--v2-pad-lg); }

body.admin-app.admin-v2 .v2-gap-xs { gap: var(--v2-gap-xs); }
body.admin-app.admin-v2 .v2-gap-sm { gap: var(--v2-gap-sm); }
body.admin-app.admin-v2 .v2-gap-md { gap: var(--v2-gap-md); }
body.admin-app.admin-v2 .v2-gap-lg { gap: var(--v2-gap-lg); }

body.admin-app.admin-v2 .v2-card {
  background: var(--admin-card, #fff);
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 10px;
  padding: var(--v2-pad-md);
}
body.admin-app.admin-v2 .v2-card-lg { padding: var(--v2-pad-lg); }

/* Table rows — sized for Vick's reset typography (14px body, 13px headers).
   Padding bumped from 6px → 10px so the larger text doesn't feel cramped. */
/* Table wrapper — allows horizontal scroll when content overflows */
body.admin-app.admin-v2 .v2-table-wrap {
  overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 100%;
}
body.admin-app.admin-v2 .v2-table {
  width: 100%; border-collapse: collapse;
}
body.admin-app.admin-v2 .v2-table th,
body.admin-app.admin-v2 .v2-table td {
  padding: 12px 14px;
  font-size: var(--v2-fs-md);
  line-height: var(--v2-fs-lh-tight);
  /* Allow text to wrap so table fits the screen */
  white-space: normal; word-break: break-word;
}
/* Currency and number columns should not wrap */
body.admin-app.admin-v2 .v2-table td[style*="font-weight:600"],
body.admin-app.admin-v2 .v2-table td[style*="font-weight:700"],
body.admin-app.admin-v2 .v2-table td[style*="monospace"] {
  white-space: nowrap;
}
/* Responsive adjustments */
@media (max-width: 1200px) {
  body.admin-app.admin-v2 .v2-table th,
  body.admin-app.admin-v2 .v2-table td { padding: 10px 10px; font-size: 13px !important; }
}
@media (max-width: 900px) {
  body.admin-app.admin-v2 .v2-table th,
  body.admin-app.admin-v2 .v2-table td { padding: 8px 8px; font-size: 12px !important; }
}
@media (max-width: 640px) {
  body.admin-app.admin-v2 .v2-table th,
  body.admin-app.admin-v2 .v2-table td { padding: 6px 6px; font-size: 11px !important; }
  body.admin-app.admin-v2 .page-stats.cols-4,
  body.admin-app.admin-v2 .page-stats.cols-5 { grid-template-columns: repeat(2, 1fr); }
  body.admin-app.admin-v2 .page-tabs { flex-wrap: wrap; }
  body.admin-app.admin-v2 .page-tab { font-size: 13px !important; padding: 8px 12px; }
}
/* Make sure the main content area doesn't overflow the viewport */
body.admin-app.admin-v2 main { overflow-x: hidden; max-width: 100%; }
body.admin-app.admin-v2 .v2-table thead th {
  text-transform: uppercase;
  letter-spacing: .05em;
  font-weight: 700;
  font-size: var(--v2-fs-sm);
  color: var(--admin-text-soft, #475569);
  background: var(--admin-card-soft, #f8fafc);
  border-bottom: 1px solid var(--admin-border, #e2e8f0);
  position: relative;
  padding: 11px 12px;
}
body.admin-app.admin-v2 .v2-table tbody tr {
  border-bottom: 1px solid var(--admin-border-soft, #f1f5f9);
}
body.admin-app.admin-v2 .v2-table tbody tr:hover {
  background: var(--admin-card-soft, #f8fafc);
}


/* ------------------------------------------------------------
   4) Status pills — semantic classes using the tokens above.
      Use: <span class="v2-pill v2-pill-paid">Paid</span>
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-pill {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 11px;
  border-radius: 9999px;
  font-size: var(--v2-fs-sm);
  font-weight: 600;
  letter-spacing: .03em;
  text-transform: uppercase;
  border: 1px solid transparent;
  line-height: 1.4;
  white-space: nowrap;
}
body.admin-app.admin-v2 .v2-pill-paid       { color: var(--v2-paid-fg);      background: var(--v2-paid-bg);      border-color: var(--v2-paid-border); }
body.admin-app.admin-v2 .v2-pill-overdue    { color: var(--v2-overdue-fg);   background: var(--v2-overdue-bg);   border-color: var(--v2-overdue-border); }
body.admin-app.admin-v2 .v2-pill-grace      { color: var(--v2-grace-fg);     background: var(--v2-grace-bg);     border-color: var(--v2-grace-border); }
body.admin-app.admin-v2 .v2-pill-vacant     { color: var(--v2-vacant-fg);    background: var(--v2-vacant-bg);    border-color: var(--v2-vacant-border); }
body.admin-app.admin-v2 .v2-pill-rented     { color: var(--v2-rented-fg);    background: var(--v2-rented-bg);    border-color: var(--v2-rented-border); }
body.admin-app.admin-v2 .v2-pill-available  { color: var(--v2-available-fg); background: var(--v2-available-bg); border-color: var(--v2-available-border); }
body.admin-app.admin-v2 .v2-pill-offline    { color: var(--v2-offline-fg);   background: var(--v2-offline-bg);   border-color: var(--v2-offline-border); }
body.admin-app.admin-v2 .v2-pill-pending    { color: var(--v2-pending-fg);   background: var(--v2-pending-bg);   border-color: var(--v2-pending-border); }
body.admin-app.admin-v2 .v2-pill-disabled   { color: var(--v2-disabled-fg);  background: var(--v2-disabled-bg);  border-color: var(--v2-disabled-border); }
body.admin-app.admin-v2 .v2-pill-active     { color: var(--v2-active-fg);    background: var(--v2-active-bg);    border-color: var(--v2-active-border); }
/* Phase 2A-Clients: lifecycle pills for the Clients list/detail. */
body.admin-app.admin-v2 .v2-pill-potential  { color: var(--v2-grace-fg);     background: var(--v2-grace-bg);     border-color: var(--v2-grace-border); }
body.admin-app.admin-v2 .v2-pill-past       { color: var(--v2-disabled-fg);  background: var(--v2-disabled-bg);  border-color: var(--v2-disabled-border); }


/* ------------------------------------------------------------
   5) Edit-lock visual states
      Pattern: fields start .field-locked (display-only, grayed).
      Click "Edit Section" → add .field-unlocked to each field.
      On blur save cycle: .field-saving pulses, then .field-saved
      shows a brief green check.
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .field-locked {
  background: var(--v2-lock-bg) !important;
  color: var(--v2-lock-fg) !important;
  border-color: var(--v2-lock-border) !important;
  cursor: not-allowed;
  pointer-events: none;       /* stop accidental typing (C14) */
  user-select: text;
  opacity: .85;
}
body.admin-app.admin-v2 .field-locked::placeholder { color: var(--v2-lock-fg); opacity: .55; }

body.admin-app.admin-v2 .field-unlocked {
  background: var(--v2-unlock-bg) !important;
  color: var(--v2-unlock-fg) !important;
  border-color: var(--v2-unlock-border) !important;
  box-shadow: 0 0 0 3px var(--v2-unlock-ring);
  cursor: text;
  pointer-events: auto;
  transition: box-shadow .12s ease, border-color .12s ease;
}
body.admin-app.admin-v2 .field-unlocked:focus {
  outline: none;
  border-color: var(--v2-unlock-border) !important;
  box-shadow: 0 0 0 4px var(--v2-unlock-ring);
}

body.admin-app.admin-v2 .field-saving {
  animation: v2-field-pulse 1.1s ease-in-out infinite;
}
@keyframes v2-field-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(217,119,6,.00); }
  50%      { box-shadow: 0 0 0 4px rgba(217,119,6,.18); }
}

body.admin-app.admin-v2 .field-saved {
  position: relative;
}
body.admin-app.admin-v2 .field-saved::after {
  content: "✓ Saved";
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--v2-saved-fg);
  font-size: var(--v2-fs-xs);
  font-weight: 700;
  letter-spacing: .04em;
  opacity: 0;
  animation: v2-field-saved-fade 1.6s ease-out forwards;
  pointer-events: none;
}
@keyframes v2-field-saved-fade {
  0%   { opacity: 0;   transform: translateY(-50%) translateX(6px); }
  15%  { opacity: 1;   transform: translateY(-50%) translateX(0);   }
  80%  { opacity: 1;   transform: translateY(-50%) translateX(0);   }
  100% { opacity: 0;   transform: translateY(-50%) translateX(-4px); }
}

/* Inline save indicator dots — used by autoSaveInput */
body.admin-app.admin-v2 .v2-save-indicator {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--v2-fs-xs);
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  padding: 1px 6px;
  border-radius: 4px;
}
body.admin-app.admin-v2 .v2-save-indicator.idle    { opacity: 0; }
body.admin-app.admin-v2 .v2-save-indicator.saving  { opacity: 1; color: var(--v2-saving-fg); background: rgba(217,119,6,.10); }
body.admin-app.admin-v2 .v2-save-indicator.saved   { opacity: 1; color: var(--v2-saved-fg);  background: rgba(5,150,105,.10); animation: v2-saved-fade 1.6s forwards; }
body.admin-app.admin-v2 .v2-save-indicator.error   { opacity: 1; color: var(--v2-error-fg);  background: rgba(185,28,28,.10); }
@keyframes v2-saved-fade {
  0%, 60% { opacity: 1; }
  100%    { opacity: 0; }
}


/* ------------------------------------------------------------
   6) Section edit toggle — used by editableForm
      One pencil button at the top-right of a grouped section
      unlocks every field in the section at once.
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-section {
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 10px;
  padding: var(--v2-pad-md);
  background: var(--admin-card, #fff);
  position: relative;
}
body.admin-app.admin-v2 .v2-section-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--v2-pad-sm);
  padding-bottom: var(--v2-pad-xs);
  border-bottom: 1px solid var(--admin-border-soft, #f1f5f9);
}
body.admin-app.admin-v2 .v2-section-title {
  font-size: var(--v2-fs-lg);
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--admin-text, #0f172a);
}
body.admin-app.admin-v2 .v2-section-sub {
  font-size: var(--v2-fs-sm);
  color: var(--admin-text-soft, #475569);
  margin-top: 2px;
}
body.admin-app.admin-v2 .v2-edit-toggle {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 6px 12px;
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 6px;
  font-size: var(--v2-fs-md);
  font-weight: 600;
  letter-spacing: .03em;
  text-transform: uppercase;
  color: var(--admin-text-soft, #475569);
  background: transparent;
  cursor: pointer;
  transition: all .12s ease;
}
body.admin-app.admin-v2 .v2-edit-toggle:hover {
  color: var(--v2-unlock-border);
  border-color: var(--v2-unlock-border);
  background: var(--v2-unlock-ring);
}
body.admin-app.admin-v2 .v2-edit-toggle.active {
  color: var(--v2-unlock-border);
  border-color: var(--v2-unlock-border);
  background: var(--v2-unlock-ring);
}


/* ------------------------------------------------------------
   7) Data table drag handles + column visibility menu (C6/C7)
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-col-drag-handle {
  cursor: grab;
  padding: 0 4px;
  color: var(--admin-text-muted, #94a3b8);
  opacity: 0;
  transition: opacity .12s ease, color .12s ease;
  user-select: none;
}
body.admin-app.admin-v2 .v2-table thead th:hover .v2-col-drag-handle {
  opacity: 1;
}
body.admin-app.admin-v2 .v2-col-drag-handle:hover {
  color: var(--v2-unlock-border);
}
body.admin-app.admin-v2 .v2-col-drag-handle.dragging {
  cursor: grabbing;
  color: var(--v2-unlock-border);
  opacity: 1;
}
body.admin-app.admin-v2 .v2-table thead th.drop-target {
  box-shadow: inset 3px 0 0 0 var(--v2-unlock-border);
}
body.admin-app.admin-v2 .v2-table thead th.drop-target-right {
  box-shadow: inset -3px 0 0 0 var(--v2-unlock-border);
}

body.admin-app.admin-v2 .v2-col-gear {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 4px;
  background: transparent;
  border: 1px solid transparent;
  color: var(--admin-text-muted, #94a3b8);
  cursor: pointer;
  font-size: var(--v2-fs-sm);
  transition: all .12s ease;
}
body.admin-app.admin-v2 .v2-col-gear:hover {
  color: var(--v2-unlock-border);
  border-color: var(--admin-border, #e2e8f0);
  background: var(--v2-unlock-ring);
}

body.admin-app.admin-v2 .v2-col-menu {
  position: absolute;
  top: 100%;
  right: 0;
  z-index: 40;
  min-width: 180px;
  margin-top: 4px;
  background: var(--admin-card, #fff);
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(15,23,42,.12);
  padding: 6px;
  max-height: 320px;
  overflow-y: auto;
}
body.admin-app.admin-v2 .v2-col-menu label {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 8px;
  border-radius: 4px;
  font-size: var(--v2-fs-xs);
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  color: var(--admin-text, #0f172a);
  cursor: pointer;
}
body.admin-app.admin-v2 .v2-col-menu label:hover {
  background: var(--admin-card-soft, #f8fafc);
}
body.admin-app.admin-v2 .v2-col-menu input[type="checkbox"] {
  accent-color: var(--v2-unlock-border);
}

body.admin-app.admin-v2 .v2-table th.v2-sortable {
  cursor: pointer;
  user-select: none;
}
body.admin-app.admin-v2 .v2-sort-indicator {
  display: inline-block;
  margin-left: 4px;
  opacity: .55;
  font-size: 13px; /* was 9px — bumped to typography floor 2026-04-09 */
}
body.admin-app.admin-v2 .v2-table th.v2-sorted .v2-sort-indicator {
  opacity: 1;
  color: var(--v2-unlock-border);
}

body.admin-app.admin-v2 .v2-table tbody tr.v2-clickable {
  cursor: pointer;
}


/* ------------------------------------------------------------
   8) Click-to-reach link style (C8)
      Every <a class="v2-link"> gets a subtle dotted underline;
      hover makes it solid. Signals "this is clickable".
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-link,
body.admin-app.admin-v2 a.v2-link,
body.admin-app.admin-v2 button.v2-link {
  color: var(--v2-link-fg);
  text-decoration: none;
  border-bottom: 1px dotted var(--v2-link-dotted);
  padding-bottom: 1px;
  cursor: pointer;
  background: transparent;
  transition: color .12s ease, border-color .12s ease, border-bottom-style .12s ease;
}
body.admin-app.admin-v2 .v2-link:hover,
body.admin-app.admin-v2 a.v2-link:hover,
body.admin-app.admin-v2 button.v2-link:hover {
  color: var(--v2-link-solid-hover);
  border-bottom-style: solid;
  border-bottom-color: var(--v2-link-solid-hover);
}


/* ------------------------------------------------------------
   9) KPI tile (kpi-tile component)
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-kpi {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--v2-pad-md);
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 10px;
  background: var(--admin-card, #fff);
  cursor: default;
  transition: transform .12s ease, box-shadow .12s ease, border-color .12s ease;
}
body.admin-app.admin-v2 .v2-kpi.clickable { cursor: pointer; }
body.admin-app.admin-v2 .v2-kpi.clickable:hover {
  transform: translateY(-1px);
  border-color: var(--v2-unlock-border);
  box-shadow: 0 6px 18px rgba(8,145,178,.10);
}
body.admin-app.admin-v2 .v2-kpi-label {
  font-size: var(--v2-fs-sm);
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--admin-text-soft, #475569);
}
body.admin-app.admin-v2 .v2-kpi-value {
  font-size: 22px;
  font-weight: 800;
  letter-spacing: .01em;
  color: var(--admin-text, #0f172a);
  margin-top: 4px;
}
body.admin-app.admin-v2 .v2-kpi-delta {
  font-size: var(--v2-fs-sm);
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
body.admin-app.admin-v2 .v2-kpi-delta.pos { color: var(--v2-paid-fg); }
body.admin-app.admin-v2 .v2-kpi-delta.neg { color: var(--v2-overdue-fg); }
body.admin-app.admin-v2 .v2-kpi-delta.neutral { color: var(--admin-text-soft, #475569); }
body.admin-app.admin-v2 .v2-kpi.color-success { border-top: 2px solid var(--v2-paid-fg); }
body.admin-app.admin-v2 .v2-kpi.color-warn    { border-top: 2px solid var(--v2-grace-fg); }
body.admin-app.admin-v2 .v2-kpi.color-danger  { border-top: 2px solid var(--v2-overdue-fg); }
body.admin-app.admin-v2 .v2-kpi.color-neutral { border-top: 2px solid var(--admin-text-muted, #94a3b8); }
body.admin-app.admin-v2 .v2-kpi-sparkline {
  margin-top: 4px;
  height: 28px;
}


/* ------------------------------------------------------------
   10) Chart card wrapper
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-chart-card {
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 10px;
  background: var(--admin-card, #fff);
  padding: var(--v2-pad-md);
}
body.admin-app.admin-v2 .v2-chart-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--v2-pad-sm);
}
body.admin-app.admin-v2 .v2-chart-title {
  font-size: var(--v2-fs-md);
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--admin-text-soft, #475569);
}


/* ------------------------------------------------------------
   11) Header exemption helper — any existing header items
       get tagged with .v2-exempt-header by editing the HTML.
       Until those tags are added, the top bar remains native
       because main/aside header regions don't match the main>*
       selectors above. This class is here so Phase 2+ agents
       can opt individual regions out if they still get scaled.
   ------------------------------------------------------------ */


/* ------------------------------------------------------------
   12) Sidebar footprint tightening (optional, opt-in)
       Phase 4 migrates the sidebar; here we only provide a helper
       class `.v2-sidebar-compact` that reduces padding. Nothing
       is applied by default.
   ------------------------------------------------------------ */
body.admin-app.admin-v2 .v2-sidebar-compact nav button {
  padding: 8px 12px !important;
}


/* ------------------------------------------------------------
   13) Phase 2A — Properties page specifics
   ------------------------------------------------------------ */

/* v2-section headings — the two-line header style used by
   editable-form groups: label above, edit toggle right */
body.admin-app.admin-v2 .v2-section-sub {
  font-size: var(--v2-fs-xs);
  color: var(--admin-text-soft, #475569);
  margin-top: 2px;
}

/* Field grid inside an edit-lock section — dense 3-column on
   desktop, 2-col on tablet, 1-col on mobile. Labels sit above
   their inputs. */
body.admin-app.admin-v2 .v2-field-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--v2-gap-sm) var(--v2-gap-md);
}
@media (max-width: 900px) {
  body.admin-app.admin-v2 .v2-field-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 540px) {
  body.admin-app.admin-v2 .v2-field-grid { grid-template-columns: 1fr; }
}
body.admin-app.admin-v2 .v2-field {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
body.admin-app.admin-v2 .v2-field label {
  font-size: var(--v2-fs-sm);
  font-weight: 700;
  letter-spacing: .03em;
  text-transform: uppercase;
  color: var(--admin-text-soft, #475569);
  margin-bottom: 4px;
}
body.admin-app.admin-v2 .v2-field input,
body.admin-app.admin-v2 .v2-field select,
body.admin-app.admin-v2 .v2-field textarea {
  font-size: var(--v2-fs-md);
  padding: 9px 12px;
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 6px;
  background: var(--admin-card, #fff);
  color: var(--admin-text, #0f172a);
  width: 100%;
}
body.admin-app.admin-v2 .v2-field.wide {
  grid-column: 1 / -1;
}

/* Dense KPI row used above Property Detail tabs */
body.admin-app.admin-v2 .v2-kpi-strip {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--v2-gap-md);
}
@media (max-width: 900px) {
  body.admin-app.admin-v2 .v2-kpi-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 540px) {
  body.admin-app.admin-v2 .v2-kpi-strip { grid-template-columns: 1fr; }
}

/* Tax bill row highlight for #b-<id> hash deep links */
body.admin-app.admin-v2 .v2-bill-row.v2-highlight {
  background: var(--v2-unlock-ring) !important;
  box-shadow: inset 3px 0 0 0 var(--v2-unlock-border);
}
body.admin-app.admin-v2 .v2-apt-row.v2-highlight {
  background: var(--v2-unlock-ring) !important;
  box-shadow: inset 3px 0 0 0 var(--v2-unlock-border);
}

/* Mobile card fallback for the Properties list.
   The table still renders, but on very small screens we
   hide it and show a stack of cards instead. */
body.admin-app.admin-v2 .v2-prop-cards { display: none; }
@media (max-width: 640px) {
  body.admin-app.admin-v2 .v2-prop-table-wrap { display: none; }
  body.admin-app.admin-v2 .v2-prop-cards { display: flex; flex-direction: column; gap: var(--v2-gap-sm); }
}
body.admin-app.admin-v2 .v2-prop-card {
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 10px;
  padding: var(--v2-pad-md);
  background: var(--admin-card, #fff);
  display: grid;
  grid-template-columns: 72px 1fr;
  gap: var(--v2-gap-sm);
  cursor: pointer;
}
body.admin-app.admin-v2 .v2-prop-card:hover {
  border-color: var(--v2-unlock-border);
}
body.admin-app.admin-v2 .v2-prop-card img {
  width: 72px; height: 72px;
  border-radius: 8px;
  object-fit: cover;
}

/* Filter bar for the Properties list */
body.admin-app.admin-v2 .v2-filter-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--v2-gap-sm);
  padding: var(--v2-pad-sm);
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 10px;
  background: var(--admin-card, #fff);
  margin-bottom: var(--v2-gap-md);
}
body.admin-app.admin-v2 .v2-filter-bar input,
body.admin-app.admin-v2 .v2-filter-bar select {
  font-size: var(--v2-fs-md);
  padding: 8px 12px;
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 6px;
  background: var(--admin-card, #fff);
  color: var(--admin-text, #0f172a);
}
body.admin-app.admin-v2 .v2-filter-bar .spacer { flex: 1; }
body.admin-app.admin-v2 .v2-btn-primary {
  font-size: var(--v2-fs-md);
  font-weight: 700;
  letter-spacing: .03em;
  text-transform: uppercase;
  padding: 9px 16px;
  border-radius: 6px;
  background: var(--v2-unlock-border);
  color: #fff;
  border: 1px solid var(--v2-unlock-border);
  cursor: pointer;
}
body.admin-app.admin-v2 .v2-btn-primary:hover {
  filter: brightness(1.08);
}
body.admin-app.admin-v2 .v2-btn-ghost {
  font-size: var(--v2-fs-md);
  font-weight: 600;
  letter-spacing: .03em;
  padding: 8px 14px;
  border-radius: 6px;
  background: transparent;
  color: var(--admin-text-soft, #475569);
  border: 1px solid var(--admin-border, #e2e8f0);
  cursor: pointer;
}
body.admin-app.admin-v2 .v2-btn-ghost:hover {
  color: var(--v2-unlock-border);
  border-color: var(--v2-unlock-border);
}

/* Dense property-list cell image */
body.admin-app.admin-v2 .v2-table td .v2-addr-cell {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
}
body.admin-app.admin-v2 .v2-table td .v2-addr-cell img {
  width: 180px;
  height: 100px;
  border-radius: 10px;
  object-fit: cover;
  flex-shrink: 0;
  box-shadow: 0 3px 10px rgba(0,0,0,.15);
}
body.admin-app.admin-v2 .v2-table td.v2-right { text-align: right; }
body.admin-app.admin-v2 .v2-table td.v2-center { text-align: center; }

/* Billing sub-tabs — same font weight + size as the left sidebar (16px)
   so the typography reads as one cohesive nav system. Per Vick 2026-04-09. */
body.admin-app.admin-v2 .v2-billing-tabs {
  gap: 8px;
  padding: 10px 12px;
}
body.admin-app.admin-v2 .v2-billing-tab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  border: 1px solid var(--admin-border, #e2e8f0);
  border-radius: 8px;
  background: var(--admin-card, #fff);
  color: var(--admin-text-soft, #475569);
  font-size: 16px !important;
  font-weight: 600;
  letter-spacing: .02em;
  text-transform: none;
  white-space: nowrap;
  cursor: pointer;
  transition: all .12s ease;
}
body.admin-app.admin-v2 .v2-billing-tab .v2-billing-tab-icon {
  font-size: 18px !important;
  line-height: 1;
}
body.admin-app.admin-v2 .v2-billing-tab .v2-billing-tab-label {
  font-size: 16px !important;
  font-weight: 600 !important;
  letter-spacing: .02em !important;
}
body.admin-app.admin-v2 .v2-billing-tab:hover {
  background: var(--admin-card-soft, #f8fafc);
  color: var(--admin-text, #0f172a);
  border-color: var(--v2-unlock-border);
}
body.admin-app.admin-v2 .v2-billing-tab-active,
body.admin-app.admin-v2 .v2-billing-tab-active:hover {
  background: rgba(8, 145, 178, 0.12);
  color: #0e7490;
  border-color: #06b6d4;
  box-shadow: inset 0 0 0 1px #06b6d4;
}

/* Small count badge after labels */
body.admin-app.admin-v2 .v2-count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 26px;
  padding: 2px 8px;
  height: 20px;
  border-radius: 9999px;
  background: var(--admin-card-soft, #f1f5f9);
  color: var(--admin-text-soft, #475569);
  font-size: var(--v2-fs-sm);
  font-weight: 700;
  letter-spacing: .02em;
  margin-left: 6px;
}


/* ============================================================
   SECTION 14 — Sidebar: refined, compact, professional
   Revision 2 (2026-04-09). Previous version had per-menu color
   stripes + gradient glow active states that looked like a
   playful dashboard. This version follows the Stripe / Linear /
   Notion / Vercel pattern: monochrome idle, subtle white/5 hover,
   single cyan accent on active with a thin inset left stripe.
   ============================================================ */

/* Sidebar container — slightly narrower for density */
body.admin-app.admin-v2 aside.bg-slate-900 {
  width: 15rem;
}

body.admin-app.admin-v2 #sidebar-nav {
  padding: 0.6rem 0.45rem !important;
  gap: 0.1rem;
}

/* All sidebar buttons (top list + pinned footer) — refined.
   Sized 16px per Vick 2026-04-09 (he said "menu fan size 14pt"). */
body.admin-app.admin-v2 aside .sidebar-menu-item button,
body.admin-app.admin-v2 aside > div:last-child > button {
  font-size: 16px !important;
  font-weight: 600 !important;
  letter-spacing: 0.02em !important;
  padding: 0.75rem 0.95rem !important;
  border: none !important;
  border-radius: 8px !important;
  color: rgba(226, 232, 240, 0.78) !important;
  background: transparent !important;
  box-shadow: none !important;
  position: relative;
  transition: background-color 0.12s ease, color 0.12s ease;
}

/* Drag handle — hidden until row hover, subtle */
body.admin-app.admin-v2 .sidebar-menu-item .drag-handle {
  opacity: 0;
  font-size: 0.7rem !important;
  transition: opacity 0.15s ease;
}
body.admin-app.admin-v2 .sidebar-menu-item:hover .drag-handle {
  opacity: 0.35;
}

/* Icons — bumped to match the larger label */
body.admin-app.admin-v2 .sidebar-menu-item button > span:nth-child(2),
body.admin-app.admin-v2 aside > div:last-child > button > span:first-child {
  font-size: 18px !important;
  line-height: 1;
  display: inline-flex;
  width: 1.45rem;
  justify-content: center;
  filter: none !important;
  transform: none !important;
  opacity: 0.85;
}

/* Labels — 16px, no uppercase shoutiness */
body.admin-app.admin-v2 .sidebar-menu-item button > span:last-child,
body.admin-app.admin-v2 aside > div:last-child > button > span:last-child {
  font-size: 16px !important;
  letter-spacing: 0.02em !important;
  font-weight: 600 !important;
  text-transform: none !important;
}

/* Hover — subtle white tint, no glow, no shadow */
body.admin-app.admin-v2 aside .sidebar-menu-item button:hover,
body.admin-app.admin-v2 aside > div:last-child > button:hover {
  background: rgba(255, 255, 255, 0.05) !important;
  color: rgba(241, 245, 249, 0.95) !important;
  box-shadow: none !important;
}
body.admin-app.admin-v2 aside .sidebar-menu-item button:hover > span:nth-child(2),
body.admin-app.admin-v2 aside > div:last-child > button:hover > span:first-child {
  opacity: 1;
}

/* Active — single refined cyan: background tint + thin inset left stripe.
   Relies on the `.bg-cyan-600` class Alpine toggles on the active item. */
body.admin-app.admin-v2 aside .sidebar-menu-item button.bg-cyan-600,
body.admin-app.admin-v2 aside > div:last-child > button.bg-cyan-600 {
  background: rgba(8, 145, 178, 0.18) !important;
  color: #a5f3fc !important;
  box-shadow: inset 2px 0 0 #06b6d4 !important;
  font-weight: 700 !important;
}
body.admin-app.admin-v2 aside .sidebar-menu-item button.bg-cyan-600 > span:nth-child(2),
body.admin-app.admin-v2 aside > div:last-child > button.bg-cyan-600 > span:first-child {
  opacity: 1;
  color: #67e8f9;
}
body.admin-app.admin-v2 aside .sidebar-menu-item button.bg-cyan-600 > span:last-child,
body.admin-app.admin-v2 aside > div:last-child > button.bg-cyan-600 > span:last-child {
  color: #a5f3fc !important;
}

/* Pinned LOGS + SETTINGS footer — just a subtle top border, same styling */
body.admin-app.admin-v2 aside > div:last-child {
  border-top: 1px solid rgba(255, 255, 255, 0.06) !important;
  background: transparent !important;
  padding: 0.35rem 0.45rem 0.5rem !important;
}

/* Sidebar logo plate — tighter padding, less shouty */
body.admin-app.admin-v2 aside > div:first-child {
  padding: 1.1rem 0.75rem !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.06) !important;
}
body.admin-app.admin-v2 aside > div:first-child img {
  max-height: 56px !important;
}


/* ============================================================
   SECTION 15 — Status pill color coding (vivid, semantic)
   ============================================================ */

body.admin-app.admin-v2 .status-pill,
body.admin-app.admin-v2 .v2-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.3rem 0.75rem !important;
  border-radius: 9999px !important;
  font-size: 0.68rem !important;
  font-weight: 800 !important;
  letter-spacing: 0.09em !important;
  text-transform: uppercase !important;
  border: 1px solid transparent;
  white-space: nowrap;
}

/* Property / unit status */
body.admin-app.admin-v2 .status-available,
body.admin-app.admin-v2 .v2-pill-available { background: rgba(16,185,129,0.18) !important; color: #34d399 !important; border-color: rgba(16,185,129,0.4); }
body.admin-app.admin-v2 .status-rented,
body.admin-app.admin-v2 .v2-pill-rented    { background: rgba(6,182,212,0.18)  !important; color: #67e8f9 !important; border-color: rgba(6,182,212,0.4); }
body.admin-app.admin-v2 .status-offline,
body.admin-app.admin-v2 .v2-pill-offline   { background: rgba(100,116,139,0.18) !important; color: #94a3b8 !important; border-color: rgba(100,116,139,0.4); }
body.admin-app.admin-v2 .status-vacant,
body.admin-app.admin-v2 .v2-pill-vacant    { background: rgba(245,158,11,0.18) !important; color: #fbbf24 !important; border-color: rgba(245,158,11,0.4); }

/* Customer lifecycle status */
body.admin-app.admin-v2 .v2-pill-active,
body.admin-app.admin-v2 .status-active     { background: rgba(16,185,129,0.18) !important; color: #34d399 !important; border-color: rgba(16,185,129,0.4); }
body.admin-app.admin-v2 .v2-pill-potential,
body.admin-app.admin-v2 .status-potential  { background: rgba(59,130,246,0.18) !important; color: #93c5fd !important; border-color: rgba(59,130,246,0.4); }
body.admin-app.admin-v2 .v2-pill-past,
body.admin-app.admin-v2 .status-past       { background: rgba(100,116,139,0.18) !important; color: #94a3b8 !important; border-color: rgba(100,116,139,0.4); }
body.admin-app.admin-v2 .v2-pill-disabled,
body.admin-app.admin-v2 .status-disabled   { background: rgba(239,68,68,0.18) !important; color: #fca5a5 !important; border-color: rgba(239,68,68,0.4); }

/* Invoice / payment status */
body.admin-app.admin-v2 .v2-pill-paid,
body.admin-app.admin-v2 .status-paid       { background: rgba(16,185,129,0.18) !important; color: #34d399 !important; border-color: rgba(16,185,129,0.4); }
body.admin-app.admin-v2 .v2-pill-overdue,
body.admin-app.admin-v2 .status-overdue    { background: rgba(239,68,68,0.18) !important; color: #fca5a5 !important; border-color: rgba(239,68,68,0.4); }
body.admin-app.admin-v2 .v2-pill-grace,
body.admin-app.admin-v2 .status-grace      { background: rgba(245,158,11,0.18) !important; color: #fbbf24 !important; border-color: rgba(245,158,11,0.4); }
body.admin-app.admin-v2 .v2-pill-pending,
body.admin-app.admin-v2 .status-pending    { background: rgba(168,85,247,0.18) !important; color: #d8b4fe !important; border-color: rgba(168,85,247,0.4); }
body.admin-app.admin-v2 .v2-pill-draft,
body.admin-app.admin-v2 .status-draft      { background: rgba(100,116,139,0.18) !important; color: #94a3b8 !important; border-color: rgba(100,116,139,0.4); }


/* ============================================================
   SECTION 16 — Brand badges (per-company color coding)
   ============================================================ */
body.admin-app.admin-v2 .company-badge {
  font-size: 0.7rem !important;
  font-weight: 800 !important;
  letter-spacing: 0.1em !important;
  padding: 0.35rem 0.85rem !important;
  border-radius: 9999px !important;
  border: 1px solid transparent;
  text-transform: uppercase;
}
/* Per-brand color tints by company name (case-insensitive via attribute) */
body.admin-app.admin-v2 .company-badge[data-brand="schetoora"],
body.admin-app.admin-v2 .company-badge[title*="CHETOORA" i] {
  background: rgba(6,182,212,0.20) !important;
  color: #67e8f9 !important;
  border-color: rgba(6,182,212,0.5);
}
body.admin-app.admin-v2 .company-badge[data-brand="rnvn"],
body.admin-app.admin-v2 .company-badge[title*="RNVN" i] {
  background: rgba(16,185,129,0.20) !important;
  color: #6ee7b7 !important;
  border-color: rgba(16,185,129,0.5);
}
body.admin-app.admin-v2 .company-badge[data-brand="northeast"],
body.admin-app.admin-v2 .company-badge[title*="NORTH EAST" i],
body.admin-app.admin-v2 .company-badge[title*="NORTHEAST" i] {
  background: rgba(239,68,68,0.20) !important;
  color: #fca5a5 !important;
  border-color: rgba(239,68,68,0.5);
}

/* Brand short codes shown in the Properties table BRAND column.
   Driven by `v2-brand-{slug}` class binding in admin/index.html (where the slug
   is the lowercase company short code from propertiesToTableRows). */
body.admin-app.admin-v2 .v2-brand-scllc,
body.admin-app.admin-v2 .v2-brand-sc {
  background: rgba(6,182,212,0.22) !important;
  color: #67e8f9 !important;
  border: 1px solid rgba(6,182,212,0.55) !important;
  font-weight: 800 !important;
  letter-spacing: 0.10em !important;
}
body.admin-app.admin-v2 .v2-brand-rnvn {
  background: rgba(16,185,129,0.22) !important;
  color: #6ee7b7 !important;
  border: 1px solid rgba(16,185,129,0.55) !important;
  font-weight: 800 !important;
  letter-spacing: 0.10em !important;
}
body.admin-app.admin-v2 .v2-brand-rrusa,
body.admin-app.admin-v2 .v2-brand-mmusa {
  background: rgba(239,68,68,0.22) !important;
  color: #fca5a5 !important;
  border: 1px solid rgba(239,68,68,0.55) !important;
  font-weight: 800 !important;
  letter-spacing: 0.10em !important;
}


/* ============================================================
   SECTION 17 — Rent Collection row tinting (dark-mode aware)
   2026-04-09: per Vick — green=paid on time, yellow=2-5th unpaid,
   red=after 5th unpaid. Uses semi-transparent rgba so the same
   tint works on light AND dark backgrounds without being washed out.
   ============================================================ */

body.admin-app.admin-v2 tr.rent-row {
  transition: background-color 0.2s ease;
  border-left: 4px solid transparent;
}

/* Paid — emerald green */
body.admin-app.admin-v2 tr.rent-row-paid,
body.admin-app.admin-v2 tr.rent-row-on_time {
  background-color: rgba(16, 185, 129, 0.10) !important;
  border-left-color: #10b981 !important;
}
body.admin-app.admin-v2 tr.rent-row-paid:hover,
body.admin-app.admin-v2 tr.rent-row-on_time:hover {
  background-color: rgba(16, 185, 129, 0.18) !important;
}

/* Grace period (2nd-5th of month, unpaid) — amber/yellow */
body.admin-app.admin-v2 tr.rent-row-warning {
  background-color: rgba(245, 158, 11, 0.12) !important;
  border-left-color: #f59e0b !important;
}
body.admin-app.admin-v2 tr.rent-row-warning:hover {
  background-color: rgba(245, 158, 11, 0.20) !important;
}

/* Late (>5th of month, unpaid) — red */
body.admin-app.admin-v2 tr.rent-row-late {
  background-color: rgba(239, 68, 68, 0.12) !important;
  border-left-color: #ef4444 !important;
}
body.admin-app.admin-v2 tr.rent-row-late:hover {
  background-color: rgba(239, 68, 68, 0.20) !important;
}

/* Neutral / draft / void — no tint */
body.admin-app.admin-v2 tr.rent-row-neutral {
  background-color: transparent;
  border-left-color: transparent;
}


/* ============================================================
   SECTION 18 — Typography + table baseline (cleaned 2026-04-10)
   Removed: global h1-h4 size overrides, global input 11px override,
   table-layout:fixed, 6px padding — all superseded by Section 20.
   Kept: right-align numeric cells, zebra striping, hover.
   ============================================================ */

/* Right-align all numeric + currency cells */
body.admin-app.admin-v2 .v2-table th.v2-right,
body.admin-app.admin-v2 .v2-table td.v2-right {
  text-align: right !important;
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum';
}
/* Zebra striping for easier row tracking */
body.admin-app.admin-v2 .v2-table tbody tr:nth-child(even) {
  background: rgba(148, 163, 184, 0.04);
}

/* ============================================================
   Per-column widths (explicit) — sums to 100% of the fixed-layout
   table. Status gets enough room so "AVAILABLE" pill never truncates.
   Address gets only what it needs; recovered space goes to Tenant + Status.
   ============================================================ */
/* Default column widths — sums to 100% for the 11-col visible layout:
   Status(4) + Address(15) + Brand(7) + Apts(5) + Tenant(15) + Rent(9)
   + Value(10) + CityTax(8) + SchoolTax(8) + Insurance(8) + Assessed(8) + Gear(3) = 100%
   Value column added 2026-04-09 per Vick (Recommended market value). */
body.admin-app.admin-v2 .v2-table th.v2-col-address,
body.admin-app.admin-v2 .v2-table td.v2-col-address     { width: 15%; max-width: 0; padding-left: 4px !important; padding-right: 4px !important; }
body.admin-app.admin-v2 .v2-table th.v2-col-company,
body.admin-app.admin-v2 .v2-table td.v2-col-company     { width: 7%; }
body.admin-app.admin-v2 .v2-table th.v2-col-units,
body.admin-app.admin-v2 .v2-table td.v2-col-units       { width: 5%; }
body.admin-app.admin-v2 .v2-table th.v2-col-tenant,
body.admin-app.admin-v2 .v2-table td.v2-col-tenant      { width: 15%; max-width: 0; }
body.admin-app.admin-v2 .v2-table th.v2-col-rent_actual,
body.admin-app.admin-v2 .v2-table td.v2-col-rent_actual { width: 9%; }
body.admin-app.admin-v2 .v2-table th.v2-col-rent_potential,
body.admin-app.admin-v2 .v2-table td.v2-col-rent_potential { width: 9%; }
body.admin-app.admin-v2 .v2-table th.v2-col-market_value,
body.admin-app.admin-v2 .v2-table td.v2-col-market_value { width: 10%; }
body.admin-app.admin-v2 .v2-table th.v2-col-city_tax,
body.admin-app.admin-v2 .v2-table td.v2-col-city_tax    { width: 8%; }
body.admin-app.admin-v2 .v2-table th.v2-col-school_tax,
body.admin-app.admin-v2 .v2-table td.v2-col-school_tax  { width: 8%; }
body.admin-app.admin-v2 .v2-table th.v2-col-insurance,
body.admin-app.admin-v2 .v2-table td.v2-col-insurance   { width: 8%; }
body.admin-app.admin-v2 .v2-table th.v2-col-assessment,
body.admin-app.admin-v2 .v2-table td.v2-col-assessment  { width: 8%; }
body.admin-app.admin-v2 .v2-table th.v2-col-occupancy_pct,
body.admin-app.admin-v2 .v2-table td.v2-col-occupancy_pct { width: 6%; }
body.admin-app.admin-v2 .v2-table th.v2-col-net_ytd,
body.admin-app.admin-v2 .v2-table td.v2-col-net_ytd     { width: 10%; }
body.admin-app.admin-v2 .v2-table th.v2-col-status,
body.admin-app.admin-v2 .v2-table td.v2-col-status      { width: 11%; min-width: 105px; overflow: visible !important; }
/* Gear column — absolute 32px. Ensures it doesn't steal width from data columns. */
body.admin-app.admin-v2 .v2-table thead th:last-child,
body.admin-app.admin-v2 .v2-table tbody td:last-child {
  width: 32px;
  padding: 6px 4px !important;
}

/* ============================================================
   Excel-style column resize (2026-04-09)
   A 4px handle on the right edge of each th. Drag to resize.
   ============================================================ */
body.admin-app.admin-v2 .v2-table th {
  position: relative;
}
body.admin-app.admin-v2 .v2-col-resizer {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 5px;
  cursor: col-resize;
  user-select: none;
  background: transparent;
  transition: background 0.15s ease;
  z-index: 2;
}
body.admin-app.admin-v2 .v2-col-resizer:hover {
  background: rgba(6, 182, 212, 0.55);
}
body.admin-app.admin-v2.v2-resizing,
body.admin-app.admin-v2.v2-resizing * {
  cursor: col-resize !important;
  user-select: none !important;
}

/* ============================================================
   Status as a small colored dot — 2026-04-09 per Vick
   Semantics (inverted from the default):
     GREEN  = rented  (tenant in, rent coming in — good)
     RED    = vacant / available (no tenant paying — bad)
     GRAY   = offline (not listed / maintenance)
   With a CSS hover popover showing the status text.
   ============================================================ */
body.admin-app.admin-v2 .v2-status-wrap {
  position: relative;
  display: inline-block;
  line-height: 0;
}
body.admin-app.admin-v2 .v2-status-dot {
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.45);
  cursor: pointer;
  vertical-align: middle;
  transition: transform 0.15s ease;
}
body.admin-app.admin-v2 .v2-status-dot:hover {
  transform: scale(1.3);
}
/* Green — rented (good) */
body.admin-app.admin-v2 .v2-status-dot-rented {
  background: #10b981;
  box-shadow: 0 0 10px rgba(16, 185, 129, 0.75);
}
/* Red — available / vacant (no tenant) */
body.admin-app.admin-v2 .v2-status-dot-available,
body.admin-app.admin-v2 .v2-status-dot-vacant {
  background: #ef4444;
  box-shadow: 0 0 10px rgba(239, 68, 68, 0.75);
}
/* Gray — offline */
body.admin-app.admin-v2 .v2-status-dot-offline {
  background: #64748b;
}

/* ============================================================
   Status hover card — full info panel, not a tiny tooltip.
   Shows status, address, apartment count, lead tenant, rent.
   2026-04-09 per Vick: "it's just a little box that you cannot
   see anything" → redesigned as a proper info card.
   ============================================================ */
body.admin-app.admin-v2 .v2-status-card {
  position: absolute;
  bottom: calc(100% + 10px);
  left: 50%;
  transform: translateX(-50%) translateY(4px) scale(0.96);
  width: 280px;
  background: #0f172a;
  color: #e2e8f0;
  border-radius: 10px;
  border: 1px solid rgba(165, 243, 252, 0.35);
  padding: 12px 14px;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.18s ease, transform 0.18s ease;
  z-index: 10000;
  box-shadow: 0 24px 60px -12px rgba(0, 0, 0, 0.7),
              0 0 0 1px rgba(165, 243, 252, 0.12);
  text-align: left;
  font-family: 'Inter', system-ui, sans-serif;
}
body.admin-app.admin-v2 .v2-status-wrap:hover .v2-status-card {
  opacity: 1;
  transform: translateX(-50%) translateY(0) scale(1);
}
/* Arrow pointing down to the dot */
body.admin-app.admin-v2 .v2-status-card::after {
  content: '';
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  border: 6px solid transparent;
  border-top-color: #0f172a;
  filter: drop-shadow(0 1px 0 rgba(165, 243, 252, 0.35));
}

/* Title — RENTED / VACANT / OFFLINE with color */
body.admin-app.admin-v2 .v2-status-card-title {
  margin: 0 0 4px;
  font-family: 'Cinzel', Georgia, serif;
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 0.18em;
  line-height: 1.2;
}
body.admin-app.admin-v2 .v2-title-rented  { color: #10b981; }
body.admin-app.admin-v2 .v2-title-vacant  { color: #ef4444; }
body.admin-app.admin-v2 .v2-title-offline { color: #94a3b8; }

/* Address underneath */
body.admin-app.admin-v2 .v2-status-card-addr {
  margin: 0 0 10px;
  font-family: 'Cinzel', Georgia, serif;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.05em;
  color: #f1f5f9;
  line-height: 1.3;
}

/* Data rows */
body.admin-app.admin-v2 .v2-status-card-rows {
  border-top: 1px solid rgba(148, 163, 184, 0.15);
  padding-top: 8px;
}
body.admin-app.admin-v2 .v2-status-card-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 11px;
  line-height: 1.6;
  color: #94a3b8;
}
body.admin-app.admin-v2 .v2-status-card-val {
  font-weight: 700;
  color: #f1f5f9;
  font-variant-numeric: tabular-nums;
}
body.admin-app.admin-v2 .v2-status-card-val.v2-rent-good {
  color: #10b981;
}
body.admin-app.admin-v2 .v2-status-card-val.v2-cost-amber {
  color: #f59e0b;
}
/* Second group inside the status card (taxes/insurance) */
body.admin-app.admin-v2 .v2-status-card-rows + .v2-status-card-rows {
  margin-top: 6px;
  border-top: 1px dashed rgba(148, 163, 184, 0.18);
}

/* Multi-tenant stack in the Tenant column — one BLOCK per unit (Upper / Lower).
   Each block lists every occupant: lease holder first in bold + cyan, then any
   co-occupants (husband/wife/roommate) underneath in lighter weight. */
body.admin-app.admin-v2 .v2-tenant-stack {
  display: flex;
  flex-direction: column;
  gap: 4px;
  line-height: 1.2;
}
body.admin-app.admin-v2 .v2-tenant-block {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1px;
  min-width: 0;
}
body.admin-app.admin-v2 .v2-tenant-block + .v2-tenant-block {
  border-top: 1px dashed rgba(148, 163, 184, 0.18);
  padding-top: 3px;
}
body.admin-app.admin-v2 .v2-tenant-unit {
  color: #94a3b8;
  font-weight: 700;
  font-size: 9px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}
body.admin-app.admin-v2 .v2-tenant-name {
  font-size: 10px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}
body.admin-app.admin-v2 .v2-tenant-primary {
  font-weight: 700;
  color: var(--admin-text, #0f172a);
}
body.admin-app.admin-v2 .v2-tenant-cooccupant {
  font-weight: 500;
  color: var(--admin-text-soft, #475569);
  font-size: 9.5px;
  padding-left: 8px;
}

/* Tenant column needs more vertical room for 2-3 lines of tenants */
body.admin-app.admin-v2 .v2-table td.v2-col-tenant {
  padding-top: 5px !important;
  padding-bottom: 5px !important;
  white-space: normal;
}
body.admin-app.admin-v2 .v2-status-card-hint {
  margin: 8px 0 0;
  font-size: 9px;
  color: rgba(148, 163, 184, 0.55);
  text-align: center;
  font-style: italic;
  padding-top: 6px;
  border-top: 1px dashed rgba(148, 163, 184, 0.15);
}

/* Status column now only needs ~40px (vs 105px for the pill) */
body.admin-app.admin-v2 .v2-table th.v2-col-status,
body.admin-app.admin-v2 .v2-table td.v2-col-status {
  width: 4% !important;
  min-width: 40px !important;
  max-width: 56px !important;
  text-align: center;
}

/* Dashboard sub-tab nav — STICKY at top of the page so owner always sees it
   while scrolling long dashboard content. 2026-04-09 per Vick. */
body.admin-app.admin-v2 .dash-subnav {
  position: sticky;
  top: 0;
  z-index: 20;
  background: var(--admin-bg, #0a1424);
  padding: 8px 0;
  margin: -8px 0 16px !important;
  border-bottom: 1px solid rgba(148, 163, 184, 0.08);
}
body.admin-app.admin-v2.dark .dash-subnav {
  background: #0a1424;
}
body.admin-app.admin-v2:not(.dark) .dash-subnav {
  background: #f8fafc;
}
/* Tenant column — allow ellipsis for long names */
body.admin-app.admin-v2 .v2-table td.v2-col-tenant .v2-link,
body.admin-app.admin-v2 .v2-table td.v2-col-tenant .v2-muted {
  display: inline-block;
  max-width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  vertical-align: middle;
}
/* Status column — ensure the pill has room to breathe */
body.admin-app.admin-v2 .v2-table td.v2-col-status .v2-pill {
  max-width: 100%;
  white-space: nowrap;
}
body.admin-app.admin-v2 .v2-addr-cell {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  max-width: 100%;
  position: relative;  /* popover anchor */
}
/* Thumbnail wrapper — the element that triggers the hover popover */
body.admin-app.admin-v2 .v2-thumb-wrap {
  position: relative;
  width: 42px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 3px;
  overflow: visible;
}
body.admin-app.admin-v2 .v2-thumb-wrap > img {
  width: 100%;
  height: 100%;
  border-radius: 3px;
  object-fit: cover;
  border: 1px solid rgba(148, 163, 184, 0.2);
  display: block;
  background: rgba(148, 163, 184, 0.08);
}
/* Hover popover — bigger preview + address caption.
   Only visible when the thumb wrapper is hovered. */
body.admin-app.admin-v2 .v2-thumb-popover {
  position: absolute;
  top: 50%;
  left: calc(100% + 12px);
  transform: translateY(-50%) scale(0.94);
  width: 340px;
  background: var(--admin-card, #0f172a);
  border: 1px solid rgba(165, 243, 252, 0.35);
  border-radius: 8px;
  padding: 6px;
  box-shadow: 0 24px 60px -12px rgba(0, 0, 0, 0.7),
              0 0 0 1px rgba(165, 243, 252, 0.15);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease, transform 0.15s ease;
  z-index: 9999;
}
body.admin-app.admin-v2 .v2-thumb-popover > img {
  width: 100%;
  height: 210px;
  object-fit: cover;
  border-radius: 5px;
  display: block;
}
body.admin-app.admin-v2 .v2-thumb-popover-addr {
  margin: 6px 4px 2px;
  font-family: 'Cinzel', Georgia, serif;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: #a5f3fc;
  text-align: center;
}
body.admin-app.admin-v2 .v2-thumb-wrap:hover .v2-thumb-popover {
  opacity: 1;
  transform: translateY(-50%) scale(1);
}
/* Address text — UPPERCASE, tabular-friendly, truncated with ellipsis */
body.admin-app.admin-v2 .v2-addr-text {
  font-weight: 700 !important;
  font-size: 14px !important;
  letter-spacing: 0.02em !important;
  text-transform: uppercase;
  white-space: normal !important;
  overflow: visible !important;
  word-break: normal !important;
  color: var(--admin-text, #0f172a) !important;
  min-width: 0;
  flex: 1 1 auto;
  color: #f1f5f9;
}
body.admin-app.admin-v2 .v2-addr-text:hover {
  color: #67e8f9;
}

/* Column width allocation — sums to ~100% of the available main-content width.
   Optimized for MacBook Air 13" (~1200px after the 240px sidebar). */
body.admin-app.admin-v2 .v2-table th[class*="v2-sortable"]:has(span:contains("Brand")) { width: 8%; }
/* Can't use :has with text — use nth-child-agnostic approach via column ID.
   Instead, let Address claim 22% and let the remaining 9 columns split 78%
   evenly via the default table-layout:fixed distribution. That's ~8.6% each
   which is ~105px per column at 1200px. Tight but readable. */
/* Drag handle on each row — appears at start of Address cell */
body.admin-app.admin-v2 .prop-row-grip {
  display: inline-block;
  font-size: 10px;
  color: rgba(148, 163, 184, 0.5);
  cursor: grab;
  user-select: none;
  padding: 0 2px;
}
body.admin-app.admin-v2 .prop-row-grip:active { cursor: grabbing; }
body.admin-app.admin-v2 .prop-row.sortable-ghost {
  opacity: 0.35;
  background: rgba(6, 182, 212, 0.12) !important;
}
body.admin-app.admin-v2 .prop-row.sortable-chosen {
  background: rgba(6, 182, 212, 0.08) !important;
}

/* Semantic color coding for money cells (C15 — consistent color grading) */
body.admin-app.admin-v2 .v2-money-pos     { color: #10b981 !important; font-weight: 600; }
body.admin-app.admin-v2 .v2-money-pos a,
body.admin-app.admin-v2 .v2-money-pos .v2-link { color: #10b981 !important; }
body.admin-app.admin-v2 .v2-money-neg     { color: #ef4444 !important; font-weight: 600; }
body.admin-app.admin-v2 .v2-money-neg a,
body.admin-app.admin-v2 .v2-money-neg .v2-link { color: #ef4444 !important; }
body.admin-app.admin-v2 .v2-money-cost    { color: #f59e0b !important; }
body.admin-app.admin-v2 .v2-money-cost .v2-link { color: #f59e0b !important; }
body.admin-app.admin-v2 .v2-money-neutral { color: #94a3b8; }
body.admin-app.admin-v2 .v2-money-neutral .v2-link { color: #94a3b8 !important; }
body.admin-app.admin-v2 .v2-muted { color: rgba(148, 163, 184, 0.5); }

/* ----- Flat table variant — sits directly on the page background (no card border).
   Per Vick 2026-04-09: "should be directly on the website page" — the bordered card
   wrapper made the table look like it was floating in an iframe. ----- */
body.admin-app.admin-v2 .v2-table-flat {
  background: transparent !important;
  border: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
body.admin-app.admin-v2 .v2-table-flat thead th {
  background: transparent !important;
  border-top: none !important;
}
body.admin-app.admin-v2 .v2-table-flat tbody tr {
  background: transparent !important;
}
body.admin-app.admin-v2 .v2-table-flat tbody tr:nth-child(even) {
  background: rgba(148, 163, 184, 0.06) !important;
}
body.admin-app.admin-v2 .v2-table-flat tbody tr:hover {
  background: rgba(6, 182, 212, 0.10) !important;
}
body.admin-app.admin-v2 .v2-table-flat tbody td {
  border-bottom: 1px solid rgba(148, 163, 184, 0.18);
}

/* ----- Column totals row (tfoot) — sums for $ columns, avg for %, count for address ----- */
body.admin-app.admin-v2 .v2-table-totals {
  position: sticky;
  bottom: 0;
  z-index: 2;
}
body.admin-app.admin-v2 .v2-table-totals tr {
  background: #f1f5f9 !important;
}
body.admin-app.admin-v2.dark .v2-table-totals tr {
  background: #1e293b !important;
}
body.admin-app.admin-v2 .v2-table-totals td {
  padding: 12px 12px !important;
  font-weight: 700 !important;
  font-size: var(--v2-fs-md, 14px) !important;
  border-top: 2px solid #cbd5e1 !important;
  border-bottom: none !important;
  color: #0f172a !important;
  background: #f1f5f9 !important;
  box-sizing: border-box;
}
body.admin-app.admin-v2.dark .v2-table-totals td {
  background: #1e293b !important;
  color: #f1f5f9 !important;
  border-top-color: #334155 !important;
}
body.admin-app.admin-v2 .v2-table-totals .v2-totals-label-cell {
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: #475569 !important;
  font-size: var(--v2-fs-sm, 13px) !important;
}
body.admin-app.admin-v2.dark .v2-table-totals .v2-totals-label-cell {
  color: #94a3b8 !important;
}
/* Money columns in the totals row inherit the column color so the eye can scan */
body.admin-app.admin-v2 .v2-table-totals .v2-col-rent_actual    { color: #059669 !important; }
body.admin-app.admin-v2 .v2-table-totals .v2-col-city_tax,
body.admin-app.admin-v2 .v2-table-totals .v2-col-school_tax,
body.admin-app.admin-v2 .v2-table-totals .v2-col-insurance     { color: #d97706 !important; }
body.admin-app.admin-v2 .v2-table-totals .v2-col-assessment    { color: #0f172a !important; }
body.admin-app.admin-v2.dark .v2-table-totals .v2-col-assessment { color: #f1f5f9 !important; }


/* ============================================================
   SECTION 18 — Unified Page Layout System
   Standard layout: .page-header → .page-stats → .page-tabs → content
   All pages use these classes for consistent look.
   ============================================================ */

/* --- Page header (title + subtitle + action buttons) --- */
body.admin-app.admin-v2 .page-header {
  display:flex; align-items:center; justify-content:space-between; margin-bottom:20px; flex-wrap:wrap; gap:12px;
}
body.admin-app.admin-v2 .page-header-title {
  font-size:22px !important; font-weight:700; color:var(--admin-text,#0f172a); margin:0; letter-spacing:-.3px;
}
body.admin-app.admin-v2 .page-header-sub {
  font-size:14px !important; color:var(--admin-text-muted,#64748b); margin:4px 0 0;
}
body.admin-app.admin-v2 .page-header-actions { display:flex; gap:10px; align-items:center; }

/* --- Stat cards row --- */
body.admin-app.admin-v2 .page-stats {
  display:grid; gap:14px; margin-bottom:20px;
}
body.admin-app.admin-v2 .page-stats.cols-4 { grid-template-columns:repeat(4,1fr); }
body.admin-app.admin-v2 .page-stats.cols-5 { grid-template-columns:repeat(5,1fr); }
@media (max-width:900px) { body.admin-app.admin-v2 .page-stats.cols-4, body.admin-app.admin-v2 .page-stats.cols-5 { grid-template-columns:repeat(2,1fr); } }
body.admin-app.admin-v2 .page-stat {
  background:var(--admin-card,#fff); border-radius:12px; padding:18px 20px;
  box-shadow:0 1px 4px rgba(0,0,0,.06); border:1px solid var(--admin-border,#f1f5f9);
  transition:all .15s;
}
body.admin-app.admin-v2 .page-stat:hover { box-shadow:0 4px 12px rgba(0,0,0,.08); }
body.admin-app.admin-v2 .page-stat-label {
  font-size:12px !important; font-weight:700; text-transform:uppercase; letter-spacing:.6px;
  margin:0 0 8px; color:var(--admin-text-muted,#64748b);
}
body.admin-app.admin-v2 .page-stat-value {
  font-size:28px !important; font-weight:800; margin:0; line-height:1; color:var(--admin-text,#0f172a);
}
body.admin-app.admin-v2 .page-stat-sub {
  font-size:11px !important; color:var(--admin-text-muted,#94a3b8); margin:6px 0 0;
}

/* --- Page tabs (standard for all pages) ---
   Matches the billing tab style: 16px, bordered cards, capitalize.
   Use: <div class="page-tabs"> <button class="page-tab [page-tab-active]"> */
body.admin-app.admin-v2 .page-tabs {
  display:flex; gap:8px; padding:10px 12px; margin-bottom:16px; flex-wrap:wrap;
  align-items:center;
}
body.admin-app.admin-v2 .page-tab {
  display:inline-flex; align-items:center; gap:8px;
  padding:10px 18px; border:1px solid var(--admin-border,#e2e8f0); border-radius:8px;
  background:var(--admin-card,#fff); color:var(--admin-text-soft,#475569);
  font-size:16px !important; font-weight:600; letter-spacing:.02em;
  text-transform:uppercase; white-space:nowrap; cursor:pointer; transition:all .12s ease;
}
body.admin-app.admin-v2 .page-tab:hover {
  background:var(--admin-card-soft,#f8fafc); color:var(--admin-text,#0f172a);
  border-color:var(--v2-unlock-border,#22d3ee);
}
body.admin-app.admin-v2 .page-tab-active,
body.admin-app.admin-v2 .page-tab-active:hover {
  background:rgba(8,145,178,.12); color:#0e7490;
  border-color:#06b6d4; box-shadow:inset 0 0 0 1px #06b6d4;
}
body.admin-app.admin-v2 .page-tab-icon { font-size:18px !important; line-height:1; }
body.admin-app.admin-v2 .page-tab-label { font-size:16px !important; font-weight:600 !important; text-transform:uppercase !important; }
body.admin-app.admin-v2 .page-tabs .spacer { flex:1; }

/* --- Detail sub-tabs (Properties detail, Customer detail, Settings) ---
   Slightly smaller than page-level tabs, same capitalization and spacing.
   Replaces the old text-sm border-b-2 buttons. */
body.admin-app.admin-v2 .detail-tabs {
  display:flex; gap:2px; border-bottom:2px solid var(--admin-border,#e2e8f0); margin-bottom:16px;
  overflow-x:auto; padding-bottom:0;
}
body.admin-app.admin-v2 .detail-tab {
  display:inline-flex; align-items:center; gap:6px;
  padding:10px 16px; border:none; border-bottom:2px solid transparent;
  background:transparent; color:var(--admin-text-soft,#475569);
  font-size:14px !important; font-weight:600; text-transform:uppercase;
  white-space:nowrap; cursor:pointer; transition:all .12s; margin-bottom:-2px;
}
body.admin-app.admin-v2 .detail-tab:hover {
  color:var(--admin-text,#0f172a); background:var(--admin-card-soft,#f8fafc);
}
body.admin-app.admin-v2 .detail-tab-active,
body.admin-app.admin-v2 .detail-tab-active:hover {
  color:#0e7490; border-bottom-color:#06b6d4; background:rgba(8,145,178,.06);
}
body.admin-app.admin-v2 .detail-tab-icon { font-size:16px !important; }

/* --- Standard buttons (unified across all pages) --- */
body.admin-app.admin-v2 .page-btn-primary {
  display:inline-flex; align-items:center; gap:6px; padding:10px 20px;
  background:linear-gradient(135deg,#6366f1,#8b5cf6); color:white;
  border:none; border-radius:8px; font-size:14px !important; font-weight:600;
  cursor:pointer; box-shadow:0 2px 8px rgba(99,102,241,.3); transition:all .15s;
}
body.admin-app.admin-v2 .page-btn-primary:hover { box-shadow:0 4px 14px rgba(99,102,241,.4); transform:translateY(-1px); }
body.admin-app.admin-v2 .page-btn-outline {
  display:inline-flex; align-items:center; gap:6px; padding:10px 20px;
  background:var(--admin-card,#fff); color:#6366f1;
  border:1.5px solid #6366f1; border-radius:8px; font-size:14px !important; font-weight:600;
  cursor:pointer; transition:all .15s;
}
body.admin-app.admin-v2 .page-btn-outline:hover { background:rgba(99,102,241,.08); }
body.admin-app.admin-v2 .page-btn-ghost {
  display:inline-flex; align-items:center; gap:6px; padding:8px 14px;
  background:var(--admin-card,#fff); color:var(--admin-text-muted,#64748b);
  border:1px solid var(--admin-border,#e2e8f0); border-radius:8px;
  font-size:13px !important; font-weight:500; cursor:pointer; transition:all .1s;
}
body.admin-app.admin-v2 .page-btn-ghost:hover { background:var(--admin-card-soft,#f8fafc); border-color:var(--admin-border-hover,#cbd5e1); }


/* ============================================================
   SECTION 19 — CRM Hub (dark-mode aware via CSS vars)
   ============================================================ */

/* --- CRM page header --- */
body.admin-app.admin-v2 .crm-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:24px; }
body.admin-app.admin-v2 .crm-header h1 { font-size:22px !important; font-weight:700; color:var(--admin-text,#0f172a); margin:0; letter-spacing:-.3px; }
body.admin-app.admin-v2 .crm-header p { font-size:14px !important; color:var(--admin-text-muted,#64748b); margin:4px 0 0; }
body.admin-app.admin-v2 .crm-header-actions { display:flex; gap:10px; align-items:center; }

/* --- Primary CRM button (gradient) --- */
body.admin-app.admin-v2 .crm-btn-primary {
  display:inline-flex; align-items:center; gap:6px; padding:10px 20px;
  background:linear-gradient(135deg,#6366f1,#8b5cf6); color:white;
  border:none; border-radius:8px; font-size:14px !important; font-weight:600;
  cursor:pointer; box-shadow:0 2px 8px rgba(99,102,241,.3); transition:all .15s;
  text-transform:uppercase; letter-spacing:.04em;
}
body.admin-app.admin-v2 .crm-btn-primary:hover { box-shadow:0 4px 14px rgba(99,102,241,.4); transform:translateY(-1px); }
body.admin-app.admin-v2 .crm-btn-outline {
  display:inline-flex; align-items:center; gap:6px; padding:10px 20px;
  background:var(--admin-card,#fff); color:#6366f1;
  border:1.5px solid #6366f1; border-radius:8px; font-size:14px !important; font-weight:600;
  cursor:pointer; transition:all .15s;
}
body.admin-app.admin-v2 .crm-btn-outline:hover { background:rgba(99,102,241,.08); }

/* --- KPI cards row --- */
body.admin-app.admin-v2 .crm-kpi-row { display:grid; grid-template-columns:repeat(5,1fr); gap:14px; margin-bottom:24px; }
@media (max-width:900px) { body.admin-app.admin-v2 .crm-kpi-row { grid-template-columns:repeat(3,1fr); } }
@media (max-width:600px) { body.admin-app.admin-v2 .crm-kpi-row { grid-template-columns:repeat(2,1fr); } }
body.admin-app.admin-v2 .crm-kpi-card {
  background:var(--admin-card,#fff); border-radius:12px; padding:18px 20px;
  box-shadow:0 1px 4px rgba(0,0,0,.06); border:1px solid var(--admin-border,#f1f5f9);
  transition:all .15s;
}
body.admin-app.admin-v2 .crm-kpi-card:hover { box-shadow:0 4px 12px rgba(0,0,0,.08); }
body.admin-app.admin-v2 .crm-kpi-label {
  font-size:12px !important; font-weight:700; text-transform:uppercase; letter-spacing:.6px;
  margin:0 0 8px;
}
body.admin-app.admin-v2 .crm-kpi-value { font-size:32px !important; font-weight:800; margin:0; line-height:1; }
body.admin-app.admin-v2 .crm-kpi-sub { font-size:11px !important; color:var(--admin-text-muted,#94a3b8); margin:6px 0 0; }

/* --- Tab navigation — matches billing tab layout exactly --- */
body.admin-app.admin-v2 .crm-tabs {
  gap:8px; padding:10px 12px;
}
body.admin-app.admin-v2 .crm-tab {
  display:inline-flex; align-items:center; gap:8px;
  padding:10px 16px; border:1px solid var(--admin-border,#e2e8f0); border-radius:8px;
  background:var(--admin-card,#fff); color:var(--admin-text-soft,#475569);
  font-size:16px !important; font-weight:600; letter-spacing:.02em;
  text-transform:uppercase; white-space:nowrap; cursor:pointer; transition:all .12s ease;
}
body.admin-app.admin-v2 .crm-tab .crm-tab-icon { font-size:18px !important; line-height:1; }
body.admin-app.admin-v2 .crm-tab .crm-tab-label { font-size:16px !important; font-weight:600 !important; letter-spacing:.02em !important; text-transform:uppercase !important; }
body.admin-app.admin-v2 .crm-tab:hover {
  background:var(--admin-card-soft,#f8fafc); color:var(--admin-text,#0f172a);
  border-color:var(--v2-unlock-border);
}
body.admin-app.admin-v2 .crm-tab-active,
body.admin-app.admin-v2 .crm-tab-active:hover {
  background:rgba(99,102,241,.12); color:#6366f1;
  border-color:#6366f1; box-shadow:inset 0 0 0 1px #6366f1;
}
body.admin-app.admin-v2 .crm-tab-badge {
  background:#ef4444; color:white; border-radius:99px;
  padding:0 6px; font-size:9px !important; font-weight:700; line-height:16px;
}

/* --- Pipeline flow visualization --- */
body.admin-app.admin-v2 .crm-flow { display:flex; align-items:center; gap:0; margin-bottom:20px; overflow-x:auto; padding-bottom:4px; }
body.admin-app.admin-v2 .crm-flow-stage {
  border-radius:10px; padding:8px 16px; display:flex; align-items:center; gap:8px; white-space:nowrap;
}
body.admin-app.admin-v2 .crm-flow-stage-label { font-size:13px !important; font-weight:700; text-transform:uppercase; letter-spacing:.04em; }
body.admin-app.admin-v2 .crm-flow-stage-count {
  font-size:12px !important; font-weight:800; background:var(--admin-card,#fff);
  border-radius:99px; padding:1px 8px; line-height:20px; min-width:24px; text-align:center;
}
body.admin-app.admin-v2 .crm-flow-arrow { width:24px; height:2px; background:var(--admin-border,#e2e8f0); flex-shrink:0; }

/* --- Kanban columns --- */
body.admin-app.admin-v2 .crm-kanban { display:grid; grid-template-columns:repeat(6,1fr); gap:12px; align-items:start; }
@media (max-width:1100px) { body.admin-app.admin-v2 .crm-kanban { grid-template-columns:repeat(3,1fr); } }
@media (max-width:700px) { body.admin-app.admin-v2 .crm-kanban { grid-template-columns:repeat(2,1fr); } }
body.admin-app.admin-v2 .crm-column {
  background:var(--admin-card-soft,#f8fafc); border-radius:12px; min-height:200px; overflow:hidden;
}
body.admin-app.admin-v2 .crm-column-header {
  padding:14px 14px 10px; display:flex; align-items:center; gap:8px;
}
body.admin-app.admin-v2 .crm-column-header-icon { font-size:18px; }
body.admin-app.admin-v2 .crm-column-header-label { font-size:14px !important; font-weight:700; color:var(--admin-text,#0f172a); text-transform:uppercase; letter-spacing:.04em; }
body.admin-app.admin-v2 .crm-column-header-count {
  font-size:12px !important; font-weight:700; background:var(--admin-card,#fff);
  border-radius:99px; padding:2px 10px; color:var(--admin-text-muted,#64748b); margin-left:auto;
  box-shadow:0 1px 2px rgba(0,0,0,.04);
}
body.admin-app.admin-v2 .crm-cards {
  padding:8px 10px 14px; display:flex; flex-direction:column; gap:8px;
  max-height:calc(100vh - 440px); overflow-y:auto;
}

/* --- Lead cards --- */
body.admin-app.admin-v2 .crm-card {
  background:var(--admin-card,#fff); border-radius:10px; padding:14px;
  cursor:pointer; box-shadow:0 1px 3px rgba(0,0,0,.05);
  border:1px solid var(--admin-border,#f1f5f9); transition:all .15s;
}
body.admin-app.admin-v2 .crm-card:hover {
  box-shadow:0 6px 16px rgba(0,0,0,.1); border-color:var(--admin-border-hover,#cbd5e1);
  transform:translateY(-1px);
}
body.admin-app.admin-v2 .crm-card-avatar {
  width:36px; height:36px; border-radius:50%; display:flex; align-items:center;
  justify-content:center; font-size:13px !important; font-weight:700; color:white; flex-shrink:0;
  box-shadow:0 2px 4px rgba(0,0,0,.12);
}
body.admin-app.admin-v2 .crm-card-name {
  font-size:13px !important; font-weight:700; color:var(--admin-text,#0f172a); margin:0;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
body.admin-app.admin-v2 .crm-card-id { font-size:11px !important; color:var(--admin-text-muted,#94a3b8); margin:0; font-weight:500; }
body.admin-app.admin-v2 .crm-card-detail {
  font-size:12px !important; color:var(--admin-text-soft,#475569); display:flex; align-items:center; gap:6px;
}
body.admin-app.admin-v2 .crm-card-detail-icon { font-size:12px; }
/* Phone number — prominent green color coding for visibility */
body.admin-app.admin-v2 .crm-card-phone {
  font-size:12px !important; font-weight:600; color:#16a34a; display:flex; align-items:center; gap:6px;
  padding:3px 0; letter-spacing:.02em;
}
body.admin-app.admin-v2.dark .crm-card-phone { color:#4ade80; }
/* Email — subtle blue */
body.admin-app.admin-v2 .crm-card-email {
  font-size:11px !important; color:#3b82f6; display:flex; align-items:center; gap:6px;
  overflow:hidden;
}
body.admin-app.admin-v2 .crm-card-email span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
body.admin-app.admin-v2.dark .crm-card-email { color:#60a5fa; }
body.admin-app.admin-v2 .crm-card-age {
  font-size:10px !important; color:var(--admin-text-muted,#94a3b8); font-weight:500;
  background:var(--admin-card-soft,#f8fafc); padding:2px 8px; border-radius:6px;
}
body.admin-app.admin-v2 .crm-card-actions {
  display:flex; align-items:center; gap:6px; margin-top:10px; padding-top:10px;
  border-top:1px solid var(--admin-border,#f1f5f9);
}
body.admin-app.admin-v2 .crm-card-call {
  padding:5px 10px; border-radius:6px; background:var(--v2-available-bg,#f0fdf4);
  border:1px solid var(--v2-available-border,#bbf7d0); text-decoration:none;
  font-size:13px !important; line-height:1; transition:all .1s;
}
body.admin-app.admin-v2 .crm-card-call:hover { background:#dcfce7; }
body.admin-app.admin-v2 .crm-card-move {
  padding:5px 12px; border-radius:6px; border:1px solid var(--admin-border,#e2e8f0);
  background:var(--admin-card,#fff); font-size:12px !important; cursor:pointer; font-weight:600;
  color:var(--admin-text-soft,#475569); transition:all .1s;
}
body.admin-app.admin-v2 .crm-card-move:hover { background:var(--admin-card-soft,#f8fafc); border-color:var(--admin-border-hover,#cbd5e1); }
body.admin-app.admin-v2 .crm-card-move:disabled { opacity:.2; cursor:default; }
body.admin-app.admin-v2 .crm-card-move:disabled:hover { background:var(--admin-card,#fff); }
body.admin-app.admin-v2 .crm-empty { text-align:center; padding:40px 12px; }
body.admin-app.admin-v2 .crm-empty-icon { font-size:28px; margin:0 0 6px; }
body.admin-app.admin-v2 .crm-empty-text { font-size:12px !important; color:var(--admin-text-muted,#94a3b8); }

/* --- Activity timeline --- */
body.admin-app.admin-v2 .crm-timeline { display:flex; flex-direction:column; gap:0; position:relative; }
body.admin-app.admin-v2 .crm-timeline-line {
  position:absolute; left:19px; top:0; bottom:0; width:2px;
  background:var(--admin-border,#e2e8f0); z-index:0;
}
body.admin-app.admin-v2 .crm-timeline-item { display:flex; gap:14px; padding:12px 0; position:relative; z-index:1; }
body.admin-app.admin-v2 .crm-timeline-icon {
  width:40px; height:40px; border-radius:50%; display:flex; align-items:center;
  justify-content:center; font-size:16px; flex-shrink:0;
  border:2px solid var(--admin-card,#fff); box-shadow:0 1px 3px rgba(0,0,0,.08);
}
body.admin-app.admin-v2 .crm-timeline-bubble {
  flex:1; background:var(--admin-card,#fff); border-radius:10px; padding:12px 16px;
  box-shadow:0 1px 2px rgba(0,0,0,.04); border:1px solid var(--admin-border,#f1f5f9);
}
body.admin-app.admin-v2 .crm-timeline-summary {
  font-size:14px !important; font-weight:600; color:var(--admin-text,#0f172a); margin:0;
}
body.admin-app.admin-v2 .crm-timeline-time {
  font-size:11px !important; color:var(--admin-text-muted,#94a3b8); white-space:nowrap; margin-left:12px;
}
body.admin-app.admin-v2 .crm-timeline-source {
  font-size:11px !important; padding:3px 10px; border-radius:99px; font-weight:500;
}
body.admin-app.admin-v2 .crm-timeline-source-tammy { background:rgba(37,99,235,.12); color:#2563eb; }
body.admin-app.admin-v2 .crm-timeline-source-admin { background:var(--admin-card-soft,#f1f5f9); color:var(--admin-text-muted,#64748b); }
body.admin-app.admin-v2 .crm-timeline-link {
  font-size:12px !important; color:#6366f1; cursor:pointer; text-decoration:none; font-weight:600;
}
body.admin-app.admin-v2 .crm-timeline-link:hover { text-decoration:underline; }

/* --- Reminders --- */
body.admin-app.admin-v2 .crm-reminder-card {
  display:flex; align-items:center; gap:14px; padding:14px 18px;
  background:var(--admin-card,#fff); border-radius:10px;
  box-shadow:0 1px 3px rgba(0,0,0,.05); border:1px solid var(--admin-border,#f1f5f9);
  transition:all .15s;
}
body.admin-app.admin-v2 .crm-reminder-card:hover { box-shadow:0 4px 12px rgba(0,0,0,.08); }
body.admin-app.admin-v2 .crm-reminder-title {
  font-size:14px !important; font-weight:600; color:var(--admin-text,#0f172a); margin:0;
}
body.admin-app.admin-v2 .crm-reminder-meta {
  font-size:12px !important; color:var(--admin-text-muted,#94a3b8); margin:4px 0 0;
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
}
body.admin-app.admin-v2 .crm-reminder-type {
  padding:2px 8px; border-radius:4px; font-size:10px !important; font-weight:600; text-transform:uppercase; letter-spacing:.04em;
}
body.admin-app.admin-v2 .crm-reminder-actions { display:flex; gap:4px; flex-shrink:0; }
body.admin-app.admin-v2 .crm-reminder-btn {
  width:30px; height:30px; border-radius:8px; border:1px solid var(--admin-border,#e2e8f0);
  background:var(--admin-card,#fff); cursor:pointer; display:flex; align-items:center;
  justify-content:center; font-size:13px; transition:all .1s; color:var(--admin-text,#0f172a);
}
body.admin-app.admin-v2 .crm-reminder-btn:hover { background:var(--admin-card-soft,#f8fafc); }

/* --- Inline create form --- */
body.admin-app.admin-v2 .crm-create-form {
  background:var(--admin-card,#fff); border:1.5px solid rgba(99,102,241,.3);
  border-radius:12px; padding:16px; margin-bottom:16px;
  box-shadow:0 4px 12px rgba(99,102,241,.08);
}
body.admin-app.admin-v2 .crm-create-form input,
body.admin-app.admin-v2 .crm-create-form select {
  padding:8px 12px; border:1px solid var(--admin-border,#e2e8f0);
  border-radius:8px; font-size:12px; background:var(--admin-card,#fff);
  color:var(--admin-text,#0f172a); outline:none;
}
body.admin-app.admin-v2 .crm-create-form input:focus { border-color:#6366f1; }

/* --- Placeholder views (calendar/directory) --- */
body.admin-app.admin-v2 .crm-placeholder {
  background:var(--admin-card-soft,#f8fafc); border-radius:12px; padding:20px; text-align:center;
  color:var(--admin-text-muted,#64748b);
}
body.admin-app.admin-v2 .crm-placeholder-icon { font-size:40px; margin:0 0 8px; }
body.admin-app.admin-v2 .crm-placeholder-title { font-size:14px; font-weight:600; color:var(--admin-text,#0f172a); }
body.admin-app.admin-v2 .crm-placeholder-text { font-size:12px; }

/* --- Section headers (used in activity + reminders) --- */
body.admin-app.admin-v2 .crm-section-header {
  display:flex; align-items:center; justify-content:space-between; margin-bottom:14px;
}
body.admin-app.admin-v2 .crm-section-title { font-size:18px !important; font-weight:700; color:var(--admin-text,#0f172a); margin:0; }
body.admin-app.admin-v2 .crm-section-sub { font-size:13px !important; color:var(--admin-text-muted,#94a3b8); margin:3px 0 0; }

/* --- Filter controls --- */
body.admin-app.admin-v2 .crm-filter-select {
  font-size:13px !important; padding:8px 12px; border:1px solid var(--admin-border,#e2e8f0);
  border-radius:8px; background:var(--admin-card,#fff); color:var(--admin-text-soft,#475569);
}
body.admin-app.admin-v2 .crm-filter-btn {
  padding:8px 14px; border:1px solid var(--admin-border,#e2e8f0); border-radius:8px;
  background:var(--admin-card,#fff); font-size:13px !important; cursor:pointer; color:var(--admin-text-muted,#64748b);
  transition:all .1s;
}
body.admin-app.admin-v2 .crm-filter-btn:hover { background:var(--admin-card-soft,#f8fafc); border-color:var(--admin-border-hover,#cbd5e1); }

/* --- Urgency group headers --- */
body.admin-app.admin-v2 .crm-urgency-header {
  display:flex; align-items:center; gap:10px; margin-bottom:10px;
}
body.admin-app.admin-v2 .crm-urgency-dot { width:10px; height:10px; border-radius:50%; }
body.admin-app.admin-v2 .crm-urgency-label {
  font-size:13px !important; font-weight:700; text-transform:uppercase; letter-spacing:.5px; margin:0;
}
body.admin-app.admin-v2 .crm-urgency-count { font-size:12px !important; color:var(--admin-text-muted,#94a3b8); }

/* --- Empty state --- */
body.admin-app.admin-v2 .crm-empty-state { text-align:center; padding:48px; }
body.admin-app.admin-v2 .crm-empty-state-icon { font-size:48px; margin:0 0 12px; }
body.admin-app.admin-v2 .crm-empty-state-title { font-size:16px !important; font-weight:600; color:var(--admin-text,#0f172a); }
body.admin-app.admin-v2 .crm-empty-state-text { font-size:14px !important; color:var(--admin-text-muted,#94a3b8); margin-top:4px; }

/* --- Placeholder views --- */
body.admin-app.admin-v2 .crm-placeholder-title { font-size:18px !important; font-weight:700; color:var(--admin-text,#0f172a); }
body.admin-app.admin-v2 .crm-placeholder-text { font-size:14px !important; }


/* ============================================================
   SECTION 20 — GLOBAL OVERRIDES (last section, wins all conflicts)

   This section forces consistency across ALL pages.
   Every table, every tab, every header, every stat card.
   Uses high-specificity selectors to override anything above.
   ============================================================ */

/* ── GLOBAL: All tables must sit directly on the page, no nesting ── */
body.admin-app.admin-v2 .v2-table {
  width: 100% !important;
  border-collapse: collapse !important;
  table-layout: auto !important;
}
body.admin-app.admin-v2 .v2-table th,
body.admin-app.admin-v2 .v2-table td {
  padding: 6px 8px !important;
  font-size: 13px !important;
  line-height: 1.4 !important;
  white-space: nowrap !important;
  text-align: left !important;
  color: var(--admin-text, #0f172a) !important;
  border-bottom: 1px solid var(--admin-border, #f1f5f9) !important;
}
/* Address column can wrap */
body.admin-app.admin-v2 .v2-table td .v2-addr-cell { white-space: normal !important; }
body.admin-app.admin-v2 .v2-table thead th {
  font-size: 11px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.06em !important;
  color: var(--admin-text-soft, #475569) !important;
  background: var(--admin-card-soft, #f8fafc) !important;
  border-bottom: 2px solid var(--admin-border, #e2e8f0) !important;
  white-space: nowrap !important;
  position: sticky !important;
  top: 0 !important;
  z-index: 2 !important;
}
body.admin-app.admin-v2 .v2-table tfoot td {
  font-size: 15px !important;
  font-weight: 700 !important;
  background: var(--admin-card-soft, #f8fafc) !important;
  border-top: 2px solid var(--admin-border, #e2e8f0) !important;
  color: var(--admin-text, #0f172a) !important;
}
body.admin-app.admin-v2 .v2-table tbody tr {
  transition: background .1s !important;
}
body.admin-app.admin-v2 .v2-table tbody tr:hover {
  background: var(--admin-card-soft, #f8fafc) !important;
}
/* No max-height, no overflow hidden on table containers — tables flow naturally */
body.admin-app.admin-v2 .v2-table-wrap {
  overflow-x: auto !important;
  max-width: 100% !important;
  -webkit-overflow-scrolling: touch !important;
}

/* ── GLOBAL: All v2-card containers must not clip content ── */
body.admin-app.admin-v2 .v2-card {
  overflow: visible !important;
}

/* ── GLOBAL: Page-level stat cards ── */
body.admin-app.admin-v2 .page-stat,
body.admin-app.admin-v2 .crm-kpi-card {
  background: var(--admin-card, #fff) !important;
  border: 1px solid var(--admin-border, #f1f5f9) !important;
  border-radius: 12px !important;
  padding: 18px 20px !important;
  box-shadow: 0 1px 4px rgba(0,0,0,.06) !important;
}
body.admin-app.admin-v2 .page-stat-label,
body.admin-app.admin-v2 .crm-kpi-label {
  font-size: 13px !important;
  font-weight: 700 !important;
  text-transform: uppercase !important;
  letter-spacing: 0.5px !important;
  margin: 0 0 8px !important;
}
body.admin-app.admin-v2 .page-stat-value,
body.admin-app.admin-v2 .crm-kpi-value {
  font-size: 28px !important;
  font-weight: 800 !important;
  margin: 0 !important;
  line-height: 1 !important;
}
body.admin-app.admin-v2 .page-stat-sub,
body.admin-app.admin-v2 .crm-kpi-sub {
  font-size: 12px !important;
  color: var(--admin-text-muted, #94a3b8) !important;
  margin: 6px 0 0 !important;
}

/* ── GLOBAL: All page-level tabs (top of page) ── */
body.admin-app.admin-v2 .page-tab,
body.admin-app.admin-v2 .crm-tab,
body.admin-app.admin-v2 .v2-billing-tab {
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  padding: 10px 18px !important;
  border: 1px solid var(--admin-border, #e2e8f0) !important;
  border-radius: 8px !important;
  background: var(--admin-card, #fff) !important;
  color: var(--admin-text-soft, #475569) !important;
  font-size: 13px !important;
  font-weight: 600 !important;
  letter-spacing: 0.03em !important;
  text-transform: uppercase !important;
  white-space: nowrap !important;
  cursor: pointer !important;
  transition: all .12s ease !important;
}
body.admin-app.admin-v2 .page-tab:hover,
body.admin-app.admin-v2 .crm-tab:hover,
body.admin-app.admin-v2 .v2-billing-tab:hover {
  background: var(--admin-card-soft, #f8fafc) !important;
  color: var(--admin-text, #0f172a) !important;
  border-color: var(--v2-unlock-border, #22d3ee) !important;
}
body.admin-app.admin-v2 .page-tab-active,
body.admin-app.admin-v2 .page-tab-active:hover,
body.admin-app.admin-v2 .crm-tab-active,
body.admin-app.admin-v2 .crm-tab-active:hover,
body.admin-app.admin-v2 .v2-billing-tab-active,
body.admin-app.admin-v2 .v2-billing-tab-active:hover {
  background: rgba(8, 145, 178, 0.12) !important;
  color: #0e7490 !important;
  border-color: #06b6d4 !important;
  box-shadow: inset 0 0 0 1px #06b6d4 !important;
}

/* ── GLOBAL: Detail-level tabs (inside property/customer/settings) ── */
body.admin-app.admin-v2 .detail-tab {
  font-size: 15px !important;
  font-weight: 600 !important;
  text-transform: uppercase !important;
  padding: 12px 18px !important;
  color: var(--admin-text-soft, #475569) !important;
  border-bottom: 2px solid transparent !important;
  background: transparent !important;
  cursor: pointer !important;
  transition: all .12s !important;
  white-space: nowrap !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  border-left: none !important;
  border-right: none !important;
  border-top: none !important;
  margin-bottom: -2px !important;
}
body.admin-app.admin-v2 .detail-tab:hover {
  color: var(--admin-text, #0f172a) !important;
  background: var(--admin-card-soft, #f8fafc) !important;
}
body.admin-app.admin-v2 .detail-tab-active,
body.admin-app.admin-v2 .detail-tab-active:hover {
  color: #0e7490 !important;
  border-bottom-color: #06b6d4 !important;
  background: rgba(8, 145, 178, 0.06) !important;
}

/* ── GLOBAL: Page header ── */
body.admin-app.admin-v2 .page-header-title {
  font-size: 18px !important;
  font-weight: 700 !important;
  color: var(--admin-text, #0f172a) !important;
  margin: 0 !important;
}
body.admin-app.admin-v2 .page-header-sub {
  font-size: 12px !important;
  color: var(--admin-text-muted, #64748b) !important;
  margin: 4px 0 0 !important;
}

/* ── GLOBAL: Buttons ── */
body.admin-app.admin-v2 .page-btn-primary,
body.admin-app.admin-v2 .crm-btn-primary {
  font-size: 14px !important;
  padding: 10px 20px !important;
  border-radius: 8px !important;
  font-weight: 600 !important;
}
body.admin-app.admin-v2 .page-btn-ghost,
body.admin-app.admin-v2 .crm-filter-btn,
body.admin-app.admin-v2 .v2-btn-ghost {
  font-size: 14px !important;
  padding: 8px 14px !important;
  border-radius: 8px !important;
  background: var(--admin-card, #fff) !important;
  color: var(--admin-text-muted, #64748b) !important;
  border: 1px solid var(--admin-border, #e2e8f0) !important;
}

/* ── GLOBAL: Form inputs ── */
body.admin-app.admin-v2 .crm-create-form input,
body.admin-app.admin-v2 .crm-create-form select,
body.admin-app.admin-v2 .page-tabs input,
body.admin-app.admin-v2 .page-tabs select {
  font-size: 14px !important;
  padding: 10px 14px !important;
  border: 1px solid var(--admin-border, #e2e8f0) !important;
  border-radius: 8px !important;
  background: var(--admin-card, #fff) !important;
  color: var(--admin-text, #0f172a) !important;
}

/* ── GLOBAL: Prevent content from overflowing the viewport ── */
body.admin-app.admin-v2 main {
  overflow-x: hidden !important;
  max-width: 100vw !important;
}
body.admin-app.admin-v2 main > div {
  max-width: 100% !important;
}

/* ── GLOBAL: CRM pipeline cards — instant visual feedback ── */
body.admin-app.admin-v2 .crm-card {
  transition: all .15s ease !important;
}
body.admin-app.admin-v2 .crm-card:hover {
  transform: translateY(-2px) !important;
  box-shadow: 0 8px 20px rgba(0,0,0,.1) !important;
}
body.admin-app.admin-v2 .crm-card-name {
  font-size: 14px !important;
  font-weight: 700 !important;
}
body.admin-app.admin-v2 .crm-card-phone {
  font-size: 13px !important;
  font-weight: 600 !important;
  color: #16a34a !important;
}
body.admin-app.admin-v2.dark .crm-card-phone { color: #4ade80 !important; }
body.admin-app.admin-v2 .crm-card-email {
  font-size: 12px !important;
  color: #3b82f6 !important;
}
body.admin-app.admin-v2.dark .crm-card-email { color: #60a5fa !important; }

/* ── GLOBAL: Section headers inside pages ── */
body.admin-app.admin-v2 .crm-section-title {
  font-size: 18px !important;
  font-weight: 700 !important;
  color: var(--admin-text, #0f172a) !important;
}

/* ── GLOBAL: Filter/select dropdowns ── */
body.admin-app.admin-v2 .crm-filter-select,
body.admin-app.admin-v2 select.page-tab {
  font-size: 14px !important;
  padding: 10px 14px !important;
}

/* ── GLOBAL: Color utility classes (dark-mode safe) ── */
body.admin-app.admin-v2 .clr-green  { color: #10b981 !important; }
body.admin-app.admin-v2 .clr-red    { color: #ef4444 !important; }
body.admin-app.admin-v2 .clr-amber  { color: #d97706 !important; }
body.admin-app.admin-v2 .clr-blue   { color: #3b82f6 !important; }
body.admin-app.admin-v2 .clr-purple { color: #7c3aed !important; }
body.admin-app.admin-v2 .clr-cyan   { color: #0891b2 !important; }
body.admin-app.admin-v2.dark .clr-green  { color: #6ee7b7 !important; }
body.admin-app.admin-v2.dark .clr-red    { color: #fca5a5 !important; }
body.admin-app.admin-v2.dark .clr-amber  { color: #fcd34d !important; }
body.admin-app.admin-v2.dark .clr-blue   { color: #93c5fd !important; }
body.admin-app.admin-v2.dark .clr-purple { color: #c4b5fd !important; }
body.admin-app.admin-v2.dark .clr-cyan   { color: #22d3ee !important; }

/* ── GLOBAL: Online indicator pulse animation ── */
@keyframes pulse-dot {
  0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(16,185,129,.4); }
  50% { opacity: .7; box-shadow: 0 0 0 4px rgba(16,185,129,0); }
}

/* ── GLOBAL: Font family — DM Sans for the entire admin panel ── */
body.admin-app.admin-v2,
body.admin-app.admin-v2 *:not(.font-display-tight):not([class*="Cinzel"]) {
  font-family: 'DM Sans', system-ui, -apple-system, sans-serif !important;
}
body.admin-app.admin-v2 input,
body.admin-app.admin-v2 select,
body.admin-app.admin-v2 textarea,
body.admin-app.admin-v2 button {
  font-family: 'DM Sans', system-ui, -apple-system, sans-serif !important;
}

/* ── GLOBAL: Gear column — visible settings button ── */
body.admin-app.admin-v2 .v2-col-gear {
  font-size: 20px !important;
  width: 36px !important;
  height: 36px !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 8px !important;
  background: var(--admin-card-soft, #f1f5f9) !important;
  border: 1px solid var(--admin-border, #e2e8f0) !important;
  cursor: pointer !important;
  transition: all .15s !important;
  color: var(--admin-text-soft, #475569) !important;
  padding: 0 !important;
}
body.admin-app.admin-v2 .v2-col-gear:hover {
  background: var(--admin-card, #fff) !important;
  border-color: #06b6d4 !important;
  color: #0891b2 !important;
  box-shadow: 0 2px 8px rgba(6,182,212,.2) !important;
}

/* ── GLOBAL: Minimum font-size floor — no text smaller than 12px anywhere ── */
body.admin-app.admin-v2 .v2-tenant-name { font-size: 12px !important; }
body.admin-app.admin-v2 .v2-tenant-unit { font-size: 11px !important; }
body.admin-app.admin-v2 .v2-tenant-cooccupant { font-size: 11px !important; }
body.admin-app.admin-v2 .v2-addr-text { font-size: 13px !important; white-space: normal !important; overflow: visible !important; }
body.admin-app.admin-v2 .prop-row-grip { display: none !important; }
body.admin-app.admin-v2 .v2-thumb-popover-addr { font-size: 12px !important; }
body.admin-app.admin-v2 .v2-status-card-title { font-size: 13px !important; }
body.admin-app.admin-v2 .v2-status-card-addr { font-size: 12px !important; }
body.admin-app.admin-v2 .v2-status-card-row { font-size: 12px !important; }
body.admin-app.admin-v2 .status-pill { font-size: 11px !important; }
body.admin-app.admin-v2 .company-badge { font-size: 11px !important; }
body.admin-app.admin-v2 .crm-card-age { font-size: 11px !important; }
body.admin-app.admin-v2 .crm-card-id { font-size: 11px !important; }
/* Unify KPI components */
body.admin-app.admin-v2 .crm-kpi-label,
body.admin-app.admin-v2 .page-stat-label { font-size: 11px !important; }
body.admin-app.admin-v2 .crm-kpi-value,
body.admin-app.admin-v2 .page-stat-value { font-size: 24px !important; }
body.admin-app.admin-v2 .crm-kpi-sub,
body.admin-app.admin-v2 .page-stat-sub { font-size: 11px !important; }
/* Unify all buttons */
body.admin-app.admin-v2 .page-btn-primary,
body.admin-app.admin-v2 .page-btn-outline,
body.admin-app.admin-v2 .page-btn-ghost,
body.admin-app.admin-v2 .crm-btn-primary,
body.admin-app.admin-v2 .crm-btn-outline,
body.admin-app.admin-v2 .v2-btn-primary,
body.admin-app.admin-v2 .v2-btn-ghost { font-size: 13px !important; }

/* ── GLOBAL: Responsive — mobile/tablet ── */
@media (max-width: 640px) {
  body.admin-app.admin-v2 .page-stats { grid-template-columns: repeat(2, 1fr) !important; }
  body.admin-app.admin-v2 .page-tabs { flex-wrap: wrap !important; }
  body.admin-app.admin-v2 .page-tab,
  body.admin-app.admin-v2 .crm-tab { font-size: 13px !important; padding: 8px 12px !important; }
  body.admin-app.admin-v2 .v2-table th,
  body.admin-app.admin-v2 .v2-table td { padding: 8px 10px !important; font-size: 13px !important; }
  body.admin-app.admin-v2 .crm-kanban { grid-template-columns: repeat(2, 1fr) !important; }
}
