/**
 * Bramall Homes - Shared Portal Styles
 * Replaces Tailwind CDN across all portals
 * Version: 5.0 - Light Theme
 */

/* ============================================
   CSS VARIABLES
   ============================================ */
:root {
  /* ==========================================
     BRAND CONFIGURATION
     ==========================================
     To customise for a new tenant, update these brand colours:
     - color-primary: Main brand colour (used for accents, headers)
     - color-secondary: Interactive elements (buttons, links)
     - color-secondary-light: Lighter variant for gradients
     - color-accent: Subtle accent elements
     ========================================== */

  /* Brand colours - UPDATE THESE FOR NEW TENANTS */
  /* Official brand pack: #3f4549, #2f3354, #52729a, #a6a6a6, #ffffff */
  --color-charcoal: #3f4549; /* Dark Charcoal - darkest brand colour */
  --color-charcoal-rgb: 63, 69, 73; /* RGB values for rgba() usage */
  --color-primary: #2f3354; /* Navy - main brand colour */
  --color-primary-rgb: 47, 51, 84; /* RGB values for rgba() usage */
  --color-secondary: #52729a; /* Blue - interactive elements */
  --color-secondary-rgb: 82, 114, 154; /* RGB values for rgba() usage */
  --color-secondary-light: #6a8ab8; /* Light blue - gradient end colour */

  /* ==========================================
     THEME CONFIGURATION (rarely need to change)
     ========================================== */
  --color-grey: #a6a6a6; /* Grey - secondary text (brand pack) */
  --color-white: #ffffff;
  --color-black: #000000; /* Black - primary text */
  --color-success: #22c55e;
  --color-warning: #f59e0b;
  --color-danger: #ef4444;
  --color-border: #e5e7eb; /* Light grey border */
  --color-border-light: #f3f4f6; /* Lighter border (gray-100) */
  --color-bg-light: #f9fafb; /* Very light grey for subtle backgrounds */

  /* Font families */
  --font-heading: 'DM Sans', sans-serif;
  --font-body: 'DM Sans', sans-serif;

  /* Touch target sizing (Apple HIG guideline) */
  --touch-target-min: 44px;

  /* Legacy aliases (for backwards compatibility) */
  --bramall-charcoal: var(--color-charcoal);
  --bramall-navy: var(--color-primary);
  --bramall-blue: var(--color-secondary);
  --bramall-blue-light: var(--color-secondary-light);
  --bramall-grey: var(--color-grey);

  --gray-100: #f3f4f6;
  --gray-200: #e5e7eb;
  --gray-300: #d1d5db;
  --gray-400: #9ca3af;
  --gray-500: #6b7280;
  --gray-600: #4b5563;
  --gray-700: #374151;
  --gray-800: #1f2937;
  --gray-900: #111827;

  --green-400: #4ade80;
  --green-500: #10b981;
  --green-600: #059669;
  --green-900: #064e3b;

  --red-400: #f87171;
  --red-500: #ef4444;
  --red-600: #dc2626;
  --red-900: #7f1d1d;

  --blue-200: #bfdbfe;
  --blue-400: #60a5fa;
  --blue-500: #3b82f6;
  --blue-600: #2563eb;
  --blue-700: #1d4ed8;
  --blue-900: #1e3a8a;

  --amber-400: #fbbf24;
  --amber-500: #f59e0b;
  --amber-600: #d97706;
  --orange-400: #fb923c;
  --orange-500: #f97316;
  --orange-600: #ea580c;
  --purple-500: #a855f7;
  --purple-600: #9333ea;
  --yellow-500: #eab308;
  --yellow-600: #ca8a04;
  --yellow-900: #713f12;

  /* Third-party brand colours */
  --color-xero-blue: #13b5ea;
}

/* ============================================
   CSS RESET & BASE
   ============================================ */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: var(--font-body, system-ui, -apple-system, sans-serif);
  line-height: 1.5;
  color: var(--color-black);
  background: var(--color-white);
  min-height: 100vh;
}

/* Text color utilities */
.text-white {
  color: var(--color-white);
}
.text-white-70 {
  color: rgba(255, 255, 255, 0.7);
}
.text-white-50 {
  color: rgba(255, 255, 255, 0.5);
}
.text-gray-300 {
  color: var(--gray-300);
}
.text-gray-400 {
  color: var(--gray-400);
}
.text-gray-500 {
  color: var(--gray-500);
}
.text-gray-600 {
  color: #4b5563;
}
.text-gray-900 {
  color: var(--gray-900);
}
.text-red-300 {
  color: #fca5a5;
}
.text-red-400 {
  color: var(--red-400);
}
.text-red-400-80 {
  color: rgba(248, 113, 113, 0.8);
}
.text-red-500 {
  color: var(--red-500);
}
.text-red-600 {
  color: var(--red-600);
}
.text-green-300 {
  color: #86efac;
}
.text-green-400 {
  color: #4ade80;
}
.text-green-500 {
  color: var(--green-500);
}
.text-blue-200 {
  color: var(--blue-200);
}
.text-blue-300 {
  color: #93c5fd;
}
.text-blue-400 {
  color: #60a5fa;
}
.text-blue-600 {
  color: #2563eb;
}
.text-orange-400 {
  color: #fb923c;
}
.text-orange-500 {
  color: var(--orange-500);
}
.text-orange-600 {
  color: #ea580c;
}
.text-amber-200 {
  color: #fde68a;
}
.text-amber-300 {
  color: #fcd34d;
}
.text-amber-400 {
  color: #fbbf24;
}
.text-amber-400-80 {
  color: rgba(251, 191, 36, 0.8);
}
.text-amber-600 {
  color: #d97706;
}
.text-emerald-400 {
  color: #34d399;
}
.text-violet-400 {
  color: #a78bfa;
}
.text-purple-400 {
  color: #c084fc;
}
.text-purple-600 {
  color: #9333ea;
}
.text-white-80 {
  color: rgba(255, 255, 255, 0.8);
}
.text-bramall-grey {
  color: var(--bramall-grey);
}
.text-bramall-blue {
  color: var(--bramall-blue);
}
.text-black {
  color: var(--color-black);
}
.text-black-60 {
  color: rgba(0, 0, 0, 0.6);
}
.text-black-70 {
  color: rgba(0, 0, 0, 0.7);
}
.text-black-80 {
  color: rgba(0, 0, 0, 0.8);
}
.text-white-30 {
  color: rgba(255, 255, 255, 0.3);
}
.text-white-40 {
  color: rgba(255, 255, 255, 0.4);
}
.text-white-60 {
  color: rgba(255, 255, 255, 0.6);
}

/* ============================================
   FORCE BLACK TEXT ON COLORED BACKGROUNDS
   Status backgrounds indicate meaning via color,
   so text should be black for readability.
   Works for both static HTML and JS-generated content.
   ============================================ */
.bg-red-500-30,
.bg-red-500-40,
.bg-amber-500-30,
.bg-amber-500-40,
.bg-green-500-30,
.bg-green-500-40,
.bg-orange-500-30,
.bg-orange-500-40,
.bg-blue-500-30,
.bg-blue-500-40,
.bg-purple-500-30,
.bg-purple-500-40 {
  color: var(--color-black);
}

.bg-red-500-30 p,
.bg-red-500-30 span,
.bg-red-500-30 div,
.bg-red-500-40 p,
.bg-red-500-40 span,
.bg-red-500-40 div,
.bg-amber-500-30 p,
.bg-amber-500-30 span,
.bg-amber-500-30 div,
.bg-amber-500-40 p,
.bg-amber-500-40 span,
.bg-amber-500-40 div,
.bg-green-500-30 p,
.bg-green-500-30 span,
.bg-green-500-30 div,
.bg-green-500-40 p,
.bg-green-500-40 span,
.bg-green-500-40 div,
.bg-orange-500-30 p,
.bg-orange-500-30 span,
.bg-orange-500-30 div,
.bg-orange-500-40 p,
.bg-orange-500-40 span,
.bg-orange-500-40 div,
.bg-blue-500-30 p,
.bg-blue-500-30 span,
.bg-blue-500-30 div,
.bg-blue-500-40 p,
.bg-blue-500-40 span,
.bg-blue-500-40 div,
.bg-purple-500-30 p,
.bg-purple-500-30 span,
.bg-purple-500-30 div,
.bg-purple-500-40 p,
.bg-purple-500-40 span,
.bg-purple-500-40 div {
  color: var(--color-black);
}

/* Keep SVG icons colored inside status backgrounds */
.bg-red-500-30 svg,
.bg-red-500-40 svg,
.bg-amber-500-30 svg,
.bg-amber-500-40 svg,
.bg-green-500-30 svg,
.bg-green-500-40 svg,
.bg-orange-500-30 svg,
.bg-orange-500-40 svg,
.bg-blue-500-30 svg,
.bg-blue-500-40 svg,
.bg-purple-500-30 svg,
.bg-purple-500-40 svg {
  color: inherit;
}

img,
svg {
  display: block;
  max-width: 100%;
}

button,
input,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}

button {
  cursor: pointer;
  border: none;
  background: none;
}

a {
  color: inherit;
  text-decoration: none;
}

ol,
ul {
  list-style: none;
}

/* ============================================
   BACKGROUND COLOURS
   ============================================ */
.bg-gray-500-20 {
  background-color: rgba(107, 114, 128, 0.2);
}
.bg-gray-700 {
  background-color: var(--gray-700);
}
.bg-gray-800 {
  background-color: var(--gray-800);
}
.bg-gray-700-50 {
  background-color: rgba(55, 65, 81, 0.5);
}
.bg-gray-800-50 {
  background-color: rgba(31, 41, 55, 0.5);
}

.bg-green-500 {
  background-color: var(--green-500);
}
.bg-green-500-10 {
  background-color: rgba(34, 197, 94, 0.1);
}
.bg-green-500-20 {
  background-color: rgba(34, 197, 94, 0.2);
}
.bg-green-500-30 {
  background-color: rgba(34, 197, 94, 0.3);
}
.bg-green-500-40 {
  background-color: rgba(34, 197, 94, 0.4);
}
.bg-green-600 {
  background-color: var(--green-600);
}
.bg-green-900-20 {
  background-color: rgba(6, 78, 59, 0.2);
}
.bg-green-900-30 {
  background-color: rgba(6, 78, 59, 0.3);
}

.bg-red-100 {
  background-color: #fee2e2;
}
.bg-red-200 {
  background-color: #fecaca;
}
.bg-red-400 {
  background-color: var(--red-400);
}
.bg-red-500 {
  background-color: var(--red-500);
}
.bg-red-500-10 {
  background-color: rgba(239, 68, 68, 0.1);
}
.bg-red-500-20 {
  background-color: rgba(239, 68, 68, 0.2);
}
.bg-red-500-30 {
  background-color: rgba(239, 68, 68, 0.3);
}
.bg-red-500-40 {
  background-color: rgba(239, 68, 68, 0.4);
}
.bg-red-900-20 {
  background-color: rgba(127, 29, 29, 0.2);
}
.bg-red-900-30 {
  background-color: rgba(127, 29, 29, 0.3);
}

.bg-blue-100 {
  background-color: #dbeafe;
}
.bg-blue-600 {
  background-color: var(--blue-600);
}
.bg-blue-900 {
  background-color: var(--blue-900);
}
.bg-blue-500-20 {
  background-color: rgba(59, 130, 246, 0.2);
}
.bg-blue-500-30 {
  background-color: rgba(59, 130, 246, 0.3);
}
.bg-blue-500-40 {
  background-color: rgba(59, 130, 246, 0.4);
}
.bg-blue-900-20 {
  background-color: rgba(30, 58, 138, 0.2);
}

.bg-amber-500 {
  background-color: var(--amber-500);
}
.bg-amber-500-10 {
  background-color: rgba(245, 158, 11, 0.1);
}
.bg-amber-500-20 {
  background-color: rgba(245, 158, 11, 0.2);
}
.bg-amber-500-30 {
  background-color: rgba(245, 158, 11, 0.3);
}
.bg-amber-500-40 {
  background-color: rgba(245, 158, 11, 0.4);
}

.bg-orange-100 {
  background-color: #ffedd5;
}
.bg-orange-500 {
  background-color: var(--orange-500);
}
.bg-orange-500-20 {
  background-color: rgba(249, 115, 22, 0.2);
}
.bg-orange-500-30 {
  background-color: rgba(249, 115, 22, 0.3);
}
.bg-orange-500-40 {
  background-color: rgba(249, 115, 22, 0.4);
}

.bg-purple-100 {
  background-color: #f3e8ff;
}
.bg-purple-500 {
  background-color: var(--purple-500);
}
.bg-purple-500-20 {
  background-color: rgba(168, 85, 247, 0.2);
}
.bg-purple-500-30 {
  background-color: rgba(168, 85, 247, 0.3);
}
.bg-purple-500-40 {
  background-color: rgba(168, 85, 247, 0.4);
}

.bg-violet-500-20 {
  background-color: rgba(139, 92, 246, 0.2);
}
.bg-violet-500-30 {
  background-color: rgba(139, 92, 246, 0.3);
}
.bg-violet-500-40 {
  background-color: rgba(139, 92, 246, 0.4);
}

.bg-yellow-500 {
  background-color: var(--yellow-500);
}
.bg-yellow-500-20 {
  background-color: rgba(234, 179, 8, 0.2);
}
.bg-yellow-900-20 {
  background-color: rgba(113, 63, 18, 0.2);
}

.bg-emerald-500-20 {
  background-color: rgba(16, 185, 129, 0.2);
}
.bg-emerald-500-30 {
  background-color: rgba(16, 185, 129, 0.3);
}
.bg-emerald-500-40 {
  background-color: rgba(16, 185, 129, 0.4);
}

.bg-teal-500-20 {
  background-color: rgba(20, 184, 166, 0.2);
}
.bg-teal-500-30 {
  background-color: rgba(20, 184, 166, 0.3);
}
.bg-teal-500-40 {
  background-color: rgba(20, 184, 166, 0.4);
}

.bg-pink-500-20 {
  background-color: rgba(236, 72, 153, 0.2);
}
.bg-pink-500-30 {
  background-color: rgba(236, 72, 153, 0.3);
}
.bg-pink-500-40 {
  background-color: rgba(236, 72, 153, 0.4);
}

.bg-white-5 {
  background-color: rgba(255, 255, 255, 0.05);
}
.bg-white-10 {
  background-color: rgba(255, 255, 255, 0.1);
}
.bg-black-20 {
  background-color: rgba(0, 0, 0, 0.2);
}
.bg-black-50 {
  background-color: rgba(0, 0, 0, 0.5);
}
.bg-white {
  background-color: var(--color-white);
}
.bg-gray-50 {
  background-color: var(--color-bg-light);
}
.bg-gray-100 {
  background-color: var(--color-border-light);
}
.bg-gray-200 {
  background-color: var(--gray-200);
}

.bg-bramall-charcoal {
  background-color: var(--bramall-charcoal);
}
.bg-bramall-blue {
  background-color: var(--bramall-blue);
}
.bg-bramall-blue-20 {
  background-color: rgba(var(--color-secondary-rgb), 0.2);
}

/* ============================================
   TYPOGRAPHY
   ============================================ */
.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}
.text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}
.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}
.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}
.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}
.text-2xl {
  font-size: 1.5rem;
  line-height: 2rem;
}
.text-3xl {
  font-size: 1.875rem;
  line-height: 2.25rem;
}
.text-4xl {
  font-size: 2.25rem;
  line-height: 2.5rem;
}
.text-5xl {
  font-size: 3rem;
  line-height: 1;
}

.font-medium {
  font-weight: 500;
}
.font-semibold {
  font-weight: 600;
}
.font-bold {
  font-weight: 700;
}
.font-mono {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
}
.font-sans {
  font-family: var(--font-body, system-ui, -apple-system, sans-serif);
}

.text-center {
  text-align: center;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}

.leading-tight {
  line-height: 1.25;
}
.tracking-wide {
  letter-spacing: 0.025em;
}
.tracking-wider {
  letter-spacing: 0.05em;
}
.uppercase {
  text-transform: uppercase;
}
.antialiased {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ============================================
   LAYOUT - DISPLAY
   ============================================ */
.block {
  display: block;
}
.hidden {
  display: none !important;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.grid {
  display: grid;
}
.inline-block {
  display: inline-block;
}

/* Responsive visibility - use these classes instead of hidden sm:block */
.hide-mobile {
  display: none;
}
.hide-mobile-flex {
  display: none;
}
@media (min-width: 640px) {
  .hide-mobile {
    display: block;
  }
  th.hide-mobile,
  td.hide-mobile {
    display: table-cell;
  }
}
@media (min-width: 768px) {
  .hide-mobile-flex {
    display: flex;
  }
}

/* ============================================
   LAYOUT - FLEXBOX
   ============================================ */
.flex-row {
  flex-direction: row;
}
.flex-col {
  flex-direction: column;
}
.flex-wrap {
  flex-wrap: wrap;
}
.flex-1 {
  flex: 1 1 0%;
}
.flex-shrink-0 {
  flex-shrink: 0;
}

.items-center {
  align-items: center;
}
.items-start {
  align-items: flex-start;
}
.items-end {
  align-items: flex-end;
}
.justify-center {
  justify-content: center;
}
.justify-between {
  justify-content: space-between;
}
.justify-end {
  justify-content: flex-end;
}

.gap-1 {
  gap: 0.25rem;
}
.gap-2 {
  gap: 0.5rem;
}
.gap-3 {
  gap: 0.75rem;
}
.gap-4 {
  gap: 1rem;
}
.gap-6 {
  gap: 1.5rem;
}

.space-x-4 > * + * {
  margin-left: 1rem;
}
.space-y-1 > * + * {
  margin-top: 0.25rem;
}
.space-y-2 > * + * {
  margin-top: 0.5rem;
}
.space-y-3 > * + * {
  margin-top: 0.75rem;
}
.space-y-4 > * + * {
  margin-top: 1rem;
}
.space-y-6 > * + * {
  margin-top: 1.5rem;
}

/* ============================================
   LAYOUT - GRID
   ============================================ */
.grid-cols-1 {
  grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-cols-4 {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
.col-span-2 {
  grid-column: span 2;
}
.col-span-3 {
  grid-column: span 3;
}
.col-span-full {
  grid-column: 1 / -1;
}

/* ============================================
   SIZING
   ============================================ */
.w-2 {
  width: 0.5rem;
}
.w-3 {
  width: 0.75rem;
}
.w-4 {
  width: 1rem;
}
.w-5 {
  width: 1.25rem;
}
.w-6 {
  width: 1.5rem;
}
.w-7 {
  width: 1.75rem;
}
.w-8 {
  width: 2rem;
}
.w-10 {
  width: 2.5rem;
}
.w-12 {
  width: 3rem;
}
.w-14 {
  width: 3.5rem;
}
.w-48 {
  width: 12rem;
}
.w-64 {
  width: 16rem;
}
.w-auto {
  width: auto;
}
.w-full {
  width: 100%;
}

.h-2 {
  height: 0.5rem;
}
.h-3 {
  height: 0.75rem;
}
.h-4 {
  height: 1rem;
}
.h-5 {
  height: 1.25rem;
}
.h-6 {
  height: 1.5rem;
}
.h-7 {
  height: 1.75rem;
}
.h-8 {
  height: 2rem;
}
.h-10 {
  height: 2.5rem;
}
.h-12 {
  height: 3rem;
}
.h-14 {
  height: 3.5rem;
}
.h-20 {
  height: 5rem;
}
.h-24 {
  height: 6rem;
}
.h-full {
  height: 100%;
}

.min-h-screen {
  min-height: 100vh;
}
.min-h-200 {
  min-height: 200px;
}
.min-h-300 {
  min-height: 300px;
}
.min-h-400 {
  min-height: 400px;
}
.min-w-0 {
  min-width: 0;
}
.min-w-200 {
  min-width: 200px;
}
.min-w-800 {
  min-width: 800px;
}
.min-w-1200 {
  min-width: 1200px;
}
.max-w-200 {
  max-width: 200px;
}

.max-w-md {
  max-width: 28rem;
}
.max-w-lg {
  max-width: 32rem;
}
.max-w-xl {
  max-width: 36rem;
}
.max-w-2xl {
  max-width: 42rem;
}
.max-w-3xl {
  max-width: 48rem;
}
.max-w-4xl {
  max-width: 56rem;
}
.max-w-5xl {
  max-width: 64rem;
}
.max-w-6xl {
  max-width: 72rem;
}
.max-w-7xl {
  max-width: 80rem;
}
.max-w-1800 {
  max-width: 1800px;
}
.max-w-100 {
  max-width: 100px;
}
.max-w-90vw {
  max-width: 90vw;
}
.max-h-500 {
  max-height: 500px;
}
.max-h-80vh {
  max-height: 80vh;
}
.max-h-90vh {
  max-height: 90vh;
}
.max-h-95vh {
  max-height: 95vh;
}

.aspect-square {
  aspect-ratio: 1 / 1;
}
.object-cover {
  object-fit: cover;
}

/* ============================================
   SPACING - PADDING
   ============================================ */
.p-2 {
  padding: 0.5rem;
}
.p-3 {
  padding: 0.75rem;
}
.p-4 {
  padding: 1rem;
}
.p-5 {
  padding: 1.25rem;
}
.p-6 {
  padding: 1.5rem;
}
.p-8 {
  padding: 2rem;
}
.p-12 {
  padding: 3rem;
}

.px-2 {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}
.px-6 {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}

.py-1 {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
.py-3 {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}
.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}
.py-12 {
  padding-top: 3rem;
  padding-bottom: 3rem;
}

.pl-4 {
  padding-left: 1rem;
}
.pl-10 {
  padding-left: 2.5rem;
}
.pl-12 {
  padding-left: 3rem;
}
.pr-4 {
  padding-right: 1rem;
}
.pt-3 {
  padding-top: 0.75rem;
}
.pt-4 {
  padding-top: 1rem;
}
.pt-6 {
  padding-top: 1.5rem;
}
.pt-8 {
  padding-top: 2rem;
}
.pt-12 {
  padding-top: 3rem;
}
.pt-20 {
  padding-top: 5rem;
}
.pt-24 {
  padding-top: 6rem;
}
.pt-32 {
  padding-top: 8rem;
}
.pb-3 {
  padding-bottom: 0.75rem;
}
.pb-12 {
  padding-bottom: 3rem;
}

/* ============================================
   SPACING - MARGIN
   ============================================ */
.mx-auto {
  margin-left: auto;
  margin-right: auto;
}

.mb-0 {
  margin-bottom: 0;
}
.mb-1 {
  margin-bottom: 0.25rem;
}
.mb-2 {
  margin-bottom: 0.5rem;
}
.mb-3 {
  margin-bottom: 0.75rem;
}
.mb-4 {
  margin-bottom: 1rem;
}
.mb-5 {
  margin-bottom: 1.25rem;
}
.mb-6 {
  margin-bottom: 1.5rem;
}
.mb-8 {
  margin-bottom: 2rem;
}
.mb-10 {
  margin-bottom: 2.5rem;
}

.ml-2 {
  margin-left: 0.5rem;
}
.ml-3 {
  margin-left: 0.75rem;
}
.ml-6 {
  margin-left: 1.5rem;
}

.mr-1 {
  margin-right: 0.25rem;
}
.mr-2 {
  margin-right: 0.5rem;
}
.mr-4 {
  margin-right: 1rem;
}

.mt-1 {
  margin-top: 0.25rem;
}
.mt-1-5 {
  margin-top: 0.375rem;
}
.mt-2 {
  margin-top: 0.5rem;
}
.mt-3 {
  margin-top: 0.75rem;
}
.mt-4 {
  margin-top: 1rem;
}
.mt-6 {
  margin-top: 1.5rem;
}

/* ============================================
   BORDERS
   ============================================ */
.border {
  border-width: 1px;
  border-style: solid;
  border-color: currentColor;
}
.border-2 {
  border-width: 2px;
  border-style: solid;
  border-color: currentColor;
}
.border-0 {
  border-width: 0;
}
.border-b {
  border-bottom-width: 1px;
  border-bottom-style: solid;
}
.border-b-0 {
  border-bottom-width: 0;
}
.border-b-2 {
  border-bottom-width: 2px;
  border-bottom-style: solid;
}
.border-t {
  border-top-width: 1px;
  border-top-style: solid;
}
.border-l {
  border-left-width: 1px;
  border-left-style: solid;
}
.border-l-4 {
  border-left-width: 4px;
  border-left-style: solid;
}
.border-none {
  border: none;
}
.border-transparent {
  border-color: transparent;
}

.border-gray-600 {
  border-color: var(--gray-600);
}
.border-blue-500 {
  border-color: var(--blue-500);
}
.border-blue-500-30 {
  border-color: rgba(59, 130, 246, 0.3);
}
.border-red-500 {
  border-color: var(--red-500);
}
.border-red-500-20 {
  border-color: rgba(239, 68, 68, 0.2);
}
.border-red-500-30 {
  border-color: rgba(239, 68, 68, 0.3);
}
.border-red-500-40 {
  border-color: rgba(239, 68, 68, 0.4);
}
.border-red-500-50 {
  border-color: rgba(239, 68, 68, 0.5);
}
.border-green-500-20 {
  border-color: rgba(34, 197, 94, 0.2);
}
.border-green-500-30 {
  border-color: rgba(34, 197, 94, 0.3);
}
.border-green-500-40 {
  border-color: rgba(34, 197, 94, 0.4);
}
.border-green-500-50 {
  border-color: rgba(34, 197, 94, 0.5);
}
.border-yellow-500-30 {
  border-color: rgba(234, 179, 8, 0.3);
}
.border-amber-500-20 {
  border-color: rgba(245, 158, 11, 0.2);
}
.border-amber-500-30 {
  border-color: rgba(245, 158, 11, 0.3);
}
.border-amber-500-40 {
  border-color: rgba(245, 158, 11, 0.4);
}
.border-amber-500-50 {
  border-color: rgba(245, 158, 11, 0.5);
}
.border-orange-500-30 {
  border-color: rgba(249, 115, 22, 0.3);
}
.border-orange-500-40 {
  border-color: rgba(249, 115, 22, 0.4);
}
.border-orange-500-50 {
  border-color: rgba(249, 115, 22, 0.5);
}
.border-blue-500-50 {
  border-color: rgba(59, 130, 246, 0.5);
}
.border-teal-500-50 {
  border-color: rgba(20, 184, 166, 0.5);
}
.border-violet-500-50 {
  border-color: rgba(139, 92, 246, 0.5);
}
.border-white-5 {
  border-color: rgba(255, 255, 255, 0.05);
}
.border-white-10 {
  border-color: rgba(255, 255, 255, 0.1);
}
.border-gray-100 {
  border-color: var(--color-border-light);
}
.border-gray-200 {
  border-color: var(--color-border);
}
.border-gray-300 {
  border-color: #d1d5db;
}
.border-bramall-blue {
  border-color: var(--bramall-blue);
}
.border-bramall-blue-30 {
  border-color: rgba(var(--color-secondary-rgb), 0.3);
}
.border-bramall-blue-40 {
  border-color: rgba(var(--color-secondary-rgb), 0.4);
}
.border-bramall-navy {
  border-color: var(--bramall-navy);
}

.rounded {
  border-radius: 0.25rem;
}
.rounded-lg {
  border-radius: 0.5rem;
}
.rounded-xl {
  border-radius: 0.75rem;
}
.rounded-2xl {
  border-radius: 1rem;
}
.rounded-full {
  border-radius: 9999px;
}
.rounded-t-lg {
  border-top-left-radius: 0.5rem;
  border-top-right-radius: 0.5rem;
}
.rounded-b-lg {
  border-bottom-left-radius: 0.5rem;
  border-bottom-right-radius: 0.5rem;
}
.rounded-tl-lg {
  border-top-left-radius: 0.5rem;
}
.rounded-tr-lg {
  border-top-right-radius: 0.5rem;
}

/* ============================================
   EFFECTS
   ============================================ */
.shadow-lg {
  box-shadow:
    0 10px 15px -3px rgba(0, 0, 0, 0.1),
    0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.shadow-xl {
  box-shadow:
    0 20px 25px -5px rgba(0, 0, 0, 0.1),
    0 10px 10px -5px rgba(0, 0, 0, 0.04);
}

.opacity-25 {
  opacity: 0.25;
}
.opacity-50 {
  opacity: 0.5;
}
.opacity-75 {
  opacity: 0.75;
}
.opacity-90 {
  opacity: 0.9;
}

.outline-none {
  outline: none;
}

.backdrop-blur-sm {
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}
.backdrop-blur-lg {
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
}

/* ============================================
   TRANSITIONS & TRANSFORMS
   ============================================ */
.transition {
  transition-property:
    color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow,
    transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-all {
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-colors {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-transform {
  transition-property: transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

/* ============================================
   POSITIONING
   ============================================ */
.relative {
  position: relative;
}
.absolute {
  position: absolute;
}
.fixed {
  position: fixed;
}
.sticky {
  position: sticky;
}

.inset-0 {
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}
.top-0 {
  top: 0;
}
.top-full {
  top: 100%;
}
.top-1-2 {
  top: 50%;
}
.top-72px {
  top: 72px;
}
.left-0 {
  left: 0;
}
.left-3 {
  left: 0.75rem;
}
.left-4 {
  left: 1rem;
}
.right-0 {
  right: 0;
}
.-top-1 {
  top: -0.25rem;
}
.-right-1 {
  right: -0.25rem;
}
.z-10 {
  z-index: 10;
}
.z-40 {
  z-index: 40;
}
.z-50 {
  z-index: 50;
}

.-translate-y-1-2 {
  transform: translateY(-50%);
}

/* ============================================
   OVERFLOW
   ============================================ */
.overflow-hidden {
  overflow: hidden;
}
.overflow-x-auto {
  overflow-x: auto;
}
.overflow-y-auto {
  overflow-y: auto;
}

/* ============================================
   CURSOR
   ============================================ */
.cursor-pointer {
  cursor: pointer;
}
.cursor-not-allowed {
  cursor: not-allowed;
}
.cursor-grab {
  cursor: grab;
}
.cursor-grabbing {
  cursor: grabbing;
}
.cursor-grab:active {
  cursor: grabbing;
}

/* ============================================
   DRAG AND DROP
   ============================================ */
.dragging-item {
  opacity: 0.4;
  border: 2px dashed #3b82f6 !important;
}

/* ============================================
   LIST STYLES
   ============================================ */
.list-disc {
  list-style-type: disc;
}
.list-decimal {
  list-style-type: decimal;
}
.list-inside {
  list-style-position: inside;
}

/* ============================================
   TEXT UTILITIES
   ============================================ */
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.whitespace-nowrap {
  white-space: nowrap;
}
.whitespace-pre-wrap {
  white-space: pre-wrap;
}
.underline {
  text-decoration: underline;
}

/* ============================================
   DIVIDE
   ============================================ */
.divide-y > * + * {
  border-top-width: 1px;
  border-top-style: solid;
  border-color: var(--color-border);
}
.divide-white-10 > * + * {
  border-color: rgba(255, 255, 255, 0.1);
}
.divide-gray-200 > * + * {
  border-color: var(--color-border);
}

/* ============================================
   GROUP HOVER
   Add .group to parent, use .group-hover-* on children
   ============================================ */
.group:hover .group-hover-text-white {
  color: var(--color-white);
}
.group:hover .group-hover-text-bramall-blue {
  color: var(--bramall-blue);
}

/* ============================================
   HOVER STATES
   ============================================ */
/* Text color hovers */
.hover-text-white:hover {
  color: var(--color-white);
}
.hover-text-black:hover {
  color: var(--color-black);
}
.hover-text-bramall-blue:hover {
  color: var(--bramall-blue);
}
.hover-text-bramall-charcoal:hover {
  color: var(--color-charcoal);
}
.hover-text-blue-400:hover {
  color: #60a5fa;
}
.hover-text-red-400:hover {
  color: #f87171;
}
.hover-text-red-500:hover {
  color: var(--red-500);
}
.hover-text-red-600:hover {
  color: var(--red-600);
}
.hover-text-red-700:hover {
  color: #b91c1c;
}
.hover-text-amber-600:hover {
  color: #d97706;
}
.hover-text-amber-800:hover {
  color: #92400e;
}

/* Text decoration hovers */
.hover-underline:hover {
  text-decoration: underline;
}
.hover-no-underline:hover {
  text-decoration: none;
}

/* Background color hovers */
.hover-bg-gray-50:hover {
  background-color: var(--color-bg-subtle);
}
.hover-bg-gray-100:hover {
  background-color: var(--gray-100);
}
.hover-bg-gray-200:hover {
  background-color: var(--gray-200);
}
.hover-bg-gray-600:hover {
  background-color: var(--gray-600);
}
.hover-bg-gray-700:hover {
  background-color: var(--gray-700);
}
.hover-bg-red-50:hover {
  background-color: #fef2f2;
}
.hover-bg-red-100:hover {
  background-color: #fee2e2;
}
.hover-bg-red-200:hover {
  background-color: #fecaca;
}
.hover-bg-red-500:hover {
  background-color: var(--red-500);
}
.hover-bg-red-600:hover {
  background-color: var(--red-600);
}
.hover-bg-red-700:hover {
  background-color: #b91c1c;
}
.hover-bg-red-500-30:hover {
  background-color: rgba(239, 68, 68, 0.3);
}
.hover-bg-red-500-50:hover {
  background-color: rgba(239, 68, 68, 0.5);
}
.hover-bg-green-600:hover {
  background-color: var(--green-600);
}
.hover-bg-green-700:hover {
  background-color: #15803d;
}
.hover-bg-green-500-30:hover {
  background-color: rgba(34, 197, 94, 0.3);
}
.hover-bg-blue-200:hover {
  background-color: #bfdbfe;
}
.hover-bg-blue-600:hover {
  background-color: var(--blue-600);
}
.hover-bg-blue-700:hover {
  background-color: var(--blue-700);
}
.hover-bg-blue-500-30:hover {
  background-color: rgba(59, 130, 246, 0.3);
}
.hover-bg-amber-200:hover {
  background-color: #fde68a;
}
.hover-bg-amber-600:hover {
  background-color: #d97706;
}
.hover-bg-amber-500-30:hover {
  background-color: rgba(245, 158, 11, 0.3);
}
.hover-bg-amber-500-50:hover {
  background-color: rgba(245, 158, 11, 0.5);
}
.hover-bg-orange-600:hover {
  background-color: var(--orange-600);
}
.hover-bg-purple-600:hover {
  background-color: var(--purple-600);
}
.hover-bg-yellow-600:hover {
  background-color: var(--yellow-600);
}
.hover-bg-white-5:hover {
  background-color: rgba(255, 255, 255, 0.05);
}
.hover-bg-white-10:hover {
  background-color: rgba(255, 255, 255, 0.1);
}
.hover-bg-white-20:hover {
  background-color: rgba(255, 255, 255, 0.2);
}
.hover-bg-black-5:hover {
  background-color: rgba(0, 0, 0, 0.05);
}
.hover-bg-bramall-blue-10:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.1);
}
.hover-bg-bramall-blue-20:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.2);
}
.hover-bg-bramall-blue-30:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.3);
}
.hover-bg-bramall-blue-80:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.8);
}
.hover-bg-bramall-blue-90:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.9);
}
.hover-bg-bramall-navy:hover {
  background-color: var(--bramall-navy);
}

/* Border color hovers */
.hover-border-gray-400:hover {
  border-color: #9ca3af;
}
.hover-border-amber-400:hover {
  border-color: #fbbf24;
}
.hover-border-orange-500:hover {
  border-color: #f97316;
}
.hover-border-bramall-blue:hover {
  border-color: var(--bramall-blue);
}
.hover-border-bramall-blue-50:hover {
  border-color: rgba(var(--color-secondary-rgb), 0.5);
}

/* Transform hovers */
.hover-scale-105:hover {
  transform: scale(1.05);
}
.hover-scale-1-02:hover {
  transform: scale(1.02);
}

/* Shadow hovers */
.hover-shadow-lg:hover {
  box-shadow:
    0 10px 15px -3px rgba(0, 0, 0, 0.1),
    0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.hover-shadow-xl:hover {
  box-shadow:
    0 20px 25px -5px rgba(0, 0, 0, 0.1),
    0 10px 10px -5px rgba(0, 0, 0, 0.04);
}

/* Opacity hovers */
.hover-opacity-80:hover {
  opacity: 0.8;
}
.hover-opacity-90:hover {
  opacity: 0.9;
}

/* ============================================
   DISABLED STATES
   ============================================ */
.disabled-opacity-50:disabled {
  opacity: 0.5;
}
.disabled-cursor-not-allowed:disabled {
  cursor: not-allowed;
}
.disabled-bg-gray-300:disabled {
  background-color: var(--gray-300);
}

/* Global disabled cursor for buttons */
button:disabled,
.btn:disabled {
  cursor: not-allowed;
}

/* ============================================
   RESPONSIVE - SMALL SCREENS (640px+)
   ============================================ */
@media (min-width: 640px) {
  .sm-block {
    display: block;
  }
  .sm-inline {
    display: inline;
  }
  .sm-flex-row {
    flex-direction: row;
  }
  .sm-items-center {
    align-items: center;
  }
  .sm-grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .sm-grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .sm-gap-4 {
    gap: 1rem;
  }
  .sm-gap-6 {
    gap: 1.5rem;
  }
  .sm-px-6 {
    padding-left: 1.5rem;
    padding-right: 1.5rem;
  }
  .sm-text-3xl {
    font-size: 1.875rem;
    line-height: 2.25rem;
  }
  .sm-text-4xl {
    font-size: 2.25rem;
    line-height: 2.5rem;
  }
  .sm-text-5xl {
    font-size: 3rem;
    line-height: 1;
  }
}

/* ============================================
   RESPONSIVE - MEDIUM SCREENS (768px+)
   ============================================ */
@media (min-width: 768px) {
  .md-block {
    display: block;
  }
  .md-flex {
    display: flex;
  }
  .md-flex-row {
    flex-direction: row;
  }
  .md-items-center {
    align-items: center;
  }
  .md-grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .md-grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .md-grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .md-grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
  .md-col-span-2 {
    grid-column: span 2;
  }
  .md-w-auto {
    width: auto;
  }
  .md-p-8 {
    padding: 2rem;
  }
  .md-text-5xl {
    font-size: 3rem;
    line-height: 1;
  }
}

/* ============================================
   RESPONSIVE - LARGE SCREENS (1024px+)
   ============================================ */
@media (min-width: 1024px) {
  .lg-hidden {
    display: none;
  }
  .lg-sticky {
    position: sticky;
  }
  .lg-grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .lg-grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .lg-grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
  .lg-col-span-2 {
    grid-column: span 2;
  }
  .lg-top-20 {
    top: 5rem;
  }
  .lg-top-24 {
    top: 6rem;
  }
  .lg-p-8 {
    padding: 2rem;
  }
  .lg-pb-12 {
    padding-bottom: 3rem;
  }
}

/* ============================================
   RESPONSIVE - EXTRA LARGE SCREENS (1280px+)
   ============================================ */
@media (min-width: 1280px) {
  .xl-grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .xl-grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
  .xl-grid-cols-6 {
    grid-template-columns: repeat(6, minmax(0, 1fr));
  }
}

/* ============================================
   ANIMATIONS
   ============================================ */
@keyframes slide-in {
  0% {
    transform: translateX(100%);
    opacity: 0;
  }
  100% {
    transform: translateX(0);
    opacity: 1;
  }
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes pulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.5;
  }
}

@keyframes fadeIn {
  0% {
    opacity: 0;
    transform: translateY(10px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes messageFadeIn {
  0% {
    opacity: 0;
    transform: translateY(10px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes typing {
  0%,
  60%,
  100% {
    transform: translateY(0);
  }
  30% {
    transform: translateY(-4px);
  }
}

.animate-slide-in {
  animation: slide-in 0.3s ease-out;
}

.animate-spin {
  animation: spin 1s linear infinite;
}

.fade-in {
  animation: fadeIn 0.5s ease-out forwards;
  opacity: 0;
}

.fade-in-delay-1 {
  animation-delay: 0.1s;
}
.fade-in-delay-2 {
  animation-delay: 0.2s;
}
.fade-in-delay-3 {
  animation-delay: 0.3s;
}
.fade-in-delay-4 {
  animation-delay: 0.4s;
}

/* ============================================
   FORM ELEMENTS
   ============================================ */
.appearance-none {
  appearance: none;
}
.resize-none {
  resize: none;
}
.placeholder-bramall-grey::placeholder {
  color: var(--bramall-grey);
}
.accent-bramall-blue {
  accent-color: var(--bramall-blue);
}

/* Hide number input spinners */
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
input[type='number'] {
  -moz-appearance: textfield;
}

.focus-outline-none:focus {
  outline: none;
}
.focus-ring-1:focus {
  box-shadow: 0 0 0 1px currentColor;
}
.focus-ring-2:focus {
  box-shadow: 0 0 0 2px currentColor;
}
.focus-ring-bramall-blue:focus {
  box-shadow: 0 0 0 2px var(--bramall-blue);
}
.focus-ring-blue-500:focus {
  box-shadow: 0 0 0 2px var(--blue-500);
}
.focus-ring-amber-500:focus {
  box-shadow: 0 0 0 2px var(--amber-500);
}
.focus-ring-purple-500:focus {
  box-shadow: 0 0 0 2px #a855f7;
}
.focus-border-bramall-blue:focus {
  border-color: var(--bramall-blue);
}
.focus-border-transparent:focus {
  border-color: transparent;
}
.focus-border-amber-400:focus {
  border-color: #fbbf24;
}
.focus-border-red-400:focus {
  border-color: #f87171;
}

/* File input styling */
.file-mr-4::file-selector-button {
  margin-right: 1rem;
}
.file-py-2::file-selector-button {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
.file-px-4::file-selector-button {
  padding-left: 1rem;
  padding-right: 1rem;
}
.file-rounded::file-selector-button {
  border-radius: 0.25rem;
}
.file-border-0::file-selector-button {
  border-width: 0;
}
.file-bg-bramall-blue::file-selector-button {
  background-color: var(--bramall-blue);
}
.file-text-white::file-selector-button {
  color: white;
}
.hover-file-bg-blue-600:hover::file-selector-button {
  background-color: var(--blue-600);
}

/* ============================================
   SCROLLBAR STYLING
   ============================================ */
/* Firefox */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--gray-300) var(--color-border-light);
}

/* Chrome, Safari, Edge */
::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

::-webkit-scrollbar-track {
  background: var(--color-border-light);
}

::-webkit-scrollbar-thumb {
  background: var(--gray-300);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: var(--bramall-blue);
}

/* ============================================
   SELECT DROPDOWN FIX
   Ensures dropdown options are readable regardless
   of parent background colour inheritance
   ============================================ */
select option {
  background-color: var(--color-white);
  color: var(--color-black);
}

/* ============================================
   REUSABLE UTILITY CLASSES
   ============================================ */

/* Dark gradient background - brand charcoal to navy
   Used by: .nav-bar, .card-glass-dark, .stat-card-dark,
   .lead-card, .section-header-dark, .hub-footer
   Consider extending these components to use this class */
.dark-gradient-bg {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  border: 1px solid var(--color-primary);
}

/* White text for dark backgrounds - apply to parent container
   Uses inheritance so all child elements receive white text */
.dark-bg-text {
  color: var(--color-white);
}

.dark-bg-text .text-bramall-grey {
  color: rgba(255, 255, 255, 0.7);
}

.dark-bg-text .text-bramall-blue {
  color: rgba(255, 255, 255, 0.9);
}

/* Card hover lift effect */
.card-lift-hover {
  transition: all 0.3s ease;
}

.card-lift-hover:hover {
  transform: translateY(-2px);
  border-color: var(--bramall-blue);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}

/* Circular icon button (lightbox nav, close buttons) */
.icon-btn-circle {
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.2);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.3s ease;
}

.icon-btn-circle:hover {
  background: rgba(255, 255, 255, 0.2);
}

/* ============================================
   HUB-SPECIFIC COMPONENTS
   ============================================ */
.login-card {
  background-color: var(--color-white);
  box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
  border: 1px solid var(--color-border);
}

.nav-bar {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  color: var(--color-white);
}

.nav-bar .text-bramall-grey {
  color: rgba(255, 255, 255, 0.7);
}

.nav-bar .text-bramall-blue {
  color: rgba(255, 255, 255, 0.9);
}

.nav-bar .border-gray-200,
.nav-bar.border-gray-200,
.nav-bar.border-t {
  border-color: rgba(255, 255, 255, 0.2);
}

.nav-bar .bg-gray-100 {
  background-color: rgba(255, 255, 255, 0.2);
}

/* ============================================
   DROPDOWN MENU STYLING
   Uses .nav-bar prefix for higher specificity to override
   inherited white text from .nav-bar
   ============================================ */
.nav-bar .dropdown-menu {
  background-color: var(--color-white);
  border: 1px solid var(--color-border);
  color: var(--color-black);
}

/* Override nav-bar text color classes inside dropdown */
.nav-bar .dropdown-menu .text-bramall-grey,
.nav-bar .dropdown-menu .dropdown-text-grey {
  color: var(--gray-500);
}

.nav-bar .dropdown-menu .dropdown-text-dark {
  color: var(--color-black);
}

.nav-bar .dropdown-menu a,
.nav-bar .dropdown-menu .dropdown-link {
  color: var(--gray-700);
}

.nav-bar .dropdown-menu a:hover,
.nav-bar .dropdown-menu .dropdown-link:hover {
  background-color: var(--color-bg-light);
  color: var(--color-black);
}

.nav-bar .dropdown-menu svg {
  color: var(--gray-500);
}

.portal-card {
  background-color: var(--color-white);
  border: 1px solid var(--color-border);
  transition: all 0.3s ease;
}

.portal-card:hover {
  border-color: var(--bramall-blue);
  transform: translateY(-4px);
  box-shadow: 0 20px 40px -12px rgba(0, 0, 0, 0.15);
}

.stat-card {
  background-color: var(--color-white);
  border: 1px solid var(--color-border);
}

/* Dark stat card variant - inherits white text to all children */
.stat-card-dark {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  border: 1px solid var(--color-primary);
  color: var(--color-white);
}

.stat-card-dark .text-bramall-grey {
  color: rgba(255, 255, 255, 0.7);
}

.status-pulse {
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}

/* ============================================
   MANAGEMENT PORTAL COMPONENTS
   ============================================ */
.card-glass {
  background: var(--color-white);
  border: 1px solid var(--color-border);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

/* Dark card variant - company charcoal/navy background */
/* Inherits white text to all children */
.card-glass-dark {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  border: 1px solid var(--color-primary);
  box-shadow: 0 4px 12px rgba(var(--color-charcoal-rgb), 0.3);
  color: var(--color-white);
}

.card-glass-dark .text-bramall-grey {
  color: rgba(255, 255, 255, 0.7);
}

.tab-button {
  transition: all 0.3s ease;
  border-bottom: 2px solid transparent;
  padding-bottom: 0.75rem;
  color: var(--bramall-grey);
}

.tab-button:hover {
  color: var(--bramall-blue);
}

.tab-button.active {
  border-bottom-color: var(--bramall-blue);
  color: var(--bramall-blue);
}

/* CRM Tab Styles */
.crm-tab {
  background-color: transparent;
}

.crm-tab.active {
  background-color: rgba(var(--color-secondary-rgb), 0.2);
  color: var(--color-secondary);
}

.crm-tab:not(.active):hover {
  background-color: var(--color-border);
  color: var(--gray-700);
}

/* CRM Tab Dark Styles (for dark nav-bar background) */
.crm-tab-dark {
  background-color: transparent;
  color: rgba(255, 255, 255, 0.7);
}

.crm-tab-dark.active {
  background-color: rgba(255, 255, 255, 0.2);
  color: var(--color-white);
}

.crm-tab-dark:not(.active):hover {
  background-color: rgba(255, 255, 255, 0.1);
  color: var(--color-white);
}

/* Settings Tab Styles */
.settings-tab {
  background: var(--color-border-light);
  color: var(--gray-500);
  flex-shrink: 0;
}

.settings-tab:hover {
  background: var(--color-border);
  color: var(--gray-700);
}

.settings-tab.active {
  background: rgba(var(--color-secondary-rgb), 0.2);
  color: var(--color-secondary);
}

/* Tab content visibility controlled by .hidden class via JS */
.tab-content.active {
  display: block;
}

.category-btn {
  transition: all 0.2s ease;
}

.category-btn.active {
  background-color: var(--bramall-blue);
  color: var(--color-white);
}

.view-tab {
  transition: all 0.2s ease;
}

.view-tab.active {
  background-color: var(--color-border-light);
}

/* Table row hover for management pages */
.table-row {
  cursor: pointer;
  transition:
    background-color 0.2s ease,
    border-left-color 0.2s ease;
  border-left: 3px solid transparent;
}

.table-row:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.08);
  border-left-color: var(--color-secondary);
}

/* ============================================
   CLIENT PORTAL STYLES
   ============================================ */

/* Client portal body with white background */
.client-portal-bg {
  background: var(--color-white);
  min-height: 100vh;
}

/* Card base styles - white bg with border */
/* Add .card-lift-hover in HTML for hover effect */
.card-base,
.feature-card,
.project-card {
  background: var(--color-white);
  border: 1px solid var(--color-border);
}

.project-card {
  cursor: pointer;
}

/* Progress bar */
.progress-bar {
  background: var(--color-border);
  height: 8px;
  border-radius: 4px;
  overflow: hidden;
}

.progress-fill {
  background: linear-gradient(90deg, var(--color-secondary) 0%, var(--color-secondary-light) 100%);
  height: 100%;
  transition: width 0.5s ease;
}

/* ============================================
   NAVIGATION ROW - unified compact padding
   ============================================ */
.nav-row {
  padding: 0.25rem 0;
}

/* Nav logo - circular container matching user avatar */
.nav-logo {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 9999px;
  background-color: var(--color-white);
  border: 2px solid rgba(var(--color-secondary-rgb), 0.4);
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

.nav-logo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Nav title text */
.nav-title {
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--color-white);
}

/* Portal navigation layout */
.portal-navigation {
  display: flex;
  justify-content: space-evenly;
  align-items: center;
}

.portal-navigation .nav-link {
  color: rgba(255, 255, 255, 0.7);
  font-size: 0.875rem;
  font-weight: 500;
  padding: 0.25rem 0.5rem;
  transition: color 0.2s;
}

.portal-navigation .nav-link:hover {
  color: var(--color-white);
}

.portal-navigation .nav-link.active {
  color: var(--color-white);
  font-weight: 700;
}

/* ============================================
   FORM INPUTS - Unified styling for all portals
   ============================================ */
.form-input {
  background: var(--color-white);
  border: 1px solid var(--gray-300);
  color: var(--color-black);
  transition: border-color 0.2s ease;
}

.form-input:focus {
  outline: none;
  border-color: var(--bramall-blue);
}

.form-input::placeholder {
  color: var(--gray-400);
}

.form-input option {
  background-color: var(--color-white);
  color: var(--color-black);
}

.toggle-switch {
  position: relative;
  width: 48px;
  height: 24px;
  background: var(--gray-300);
  border-radius: 12px;
  cursor: pointer;
  transition: background 0.3s ease;
  flex-shrink: 0;
}
.toggle-switch.active {
  background: var(--bramall-blue);
}
.toggle-switch::after {
  content: '';
  position: absolute;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--color-white);
  top: 2px;
  left: 2px;
  transition: transform 0.3s ease;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}
.toggle-switch.active::after {
  transform: translateX(24px);
}

.setting-row {
  padding: 1rem 0;
  border-bottom: 1px solid var(--color-border);
}
.setting-row:last-child {
  border-bottom: none;
}

/* ============================================
   CLIENT PORTAL - MESSAGES PAGE
   ============================================ */
/* Container height: 100vh - (header ~72px + footer ~88px + padding ~80px) = ~240px offset */
.messages-container {
  height: calc(100vh - 240px); /* 240px = nav + header + input area */
  min-height: 300px;
  overflow-y: auto;
  scroll-behavior: smooth;
  background: var(--color-bg-light);
}

.message-bubble {
  max-width: 75%;
  word-wrap: break-word;
  animation: messageFadeIn 0.3s ease;
}

.message-client {
  margin-left: auto;
  background: linear-gradient(135deg, var(--color-secondary) 0%, var(--color-secondary-light) 100%);
  border-radius: 16px 16px 4px 16px;
  color: var(--color-white);
}

.message-staff {
  margin-right: auto;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: 16px 16px 16px 4px;
}

.message-input-area {
  background: var(--color-white);
  border-top: 1px solid var(--color-border);
}

.send-button {
  background: linear-gradient(135deg, var(--color-secondary) 0%, var(--color-secondary-light) 100%);
  transition: all 0.2s ease;
  color: var(--color-white);
}
.send-button:hover:not(:disabled) {
  transform: scale(1.05);
}
.send-button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.typing-indicator {
  display: flex;
  gap: 4px;
  padding: 8px 12px;
}

.typing-dot {
  width: 8px;
  height: 8px;
  background: var(--gray-400);
  border-radius: 50%;
  animation: typing 1.4s infinite;
}
.typing-dot:nth-child(2) {
  animation-delay: 0.2s;
}
.typing-dot:nth-child(3) {
  animation-delay: 0.4s;
}

/* ============================================
   CRM - PIPELINE SPECIFIC STYLES
   ============================================ */
.crm-bg {
  background: var(--color-bg-light);
  min-height: 100vh;
}

/* Pipeline board container - responsive flex */
.pipeline-board {
  display: inline-flex;
  min-width: 100%;
  gap: 1rem;
}

.stage-column {
  background: var(--color-white);
  border: 1px solid var(--color-border);
  min-height: 500px;
  /* Mobile/Tablet: fixed min-width for horizontal scroll */
  min-width: 250px;
  flex-shrink: 0;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

/* Desktop: equal-width columns that fill container */
@media (min-width: 1024px) {
  .pipeline-board {
    display: flex;
    min-width: auto;
    width: 100%;
  }

  .stage-column {
    flex: 1 1 0%;
    min-width: 0;
  }
}

.lead-card {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  border: 1px solid var(--color-primary);
  color: var(--color-white);
  transition: all 0.3s ease;
}

.lead-card:hover {
  border-color: var(--color-secondary);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}

.lead-card[draggable='true'] {
  cursor: move;
}

.lead-card:active {
  cursor: grabbing;
}

.lead-card h4:hover {
  color: rgba(255, 255, 255, 0.8);
}

/* ============================================
   CLIENT PORTAL - PHOTOS PAGE
   ============================================ */
.photo-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 1rem;
}
/* Responsive: 200px min at md (768px), 250px min at lg (1024px) */
@media (min-width: 768px) {
  .photo-grid {
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  }
}
@media (min-width: 1024px) {
  .photo-grid {
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  }
}

.photo-item {
  aspect-ratio: 1;
  border-radius: 0.75rem;
  overflow: hidden;
  cursor: pointer;
  transition: all 0.3s ease;
  position: relative;
}

.photo-item:hover {
  transform: scale(1.02);
  box-shadow: 0 8px 20px rgba(var(--color-secondary-rgb), 0.3);
}

.photo-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.photo-overlay {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.7), transparent);
  padding: 1rem;
  opacity: 0;
  transition: opacity 0.3s ease;
  color: var(--color-white);
}

.photo-item:hover .photo-overlay {
  opacity: 1;
}

/* Lightbox */
.lightbox {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.95);
  z-index: 9999;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

.lightbox.active {
  display: flex;
  align-items: center;
  justify-content: center;
}

.lightbox-content {
  max-width: 90vw;
  max-height: 90vh;
  position: relative;
}

.lightbox-content img {
  max-width: 100%;
  max-height: 90vh;
  border-radius: 0.5rem;
}

/* Lightbox nav/close buttons - extend icon-btn-circle */
.lightbox-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

/* Desktop: nav buttons outside image */
.lightbox-nav.prev {
  left: -60px;
}
.lightbox-nav.next {
  right: -60px;
}

@media (max-width: 767px) {
  /* Mobile: nav buttons inside image, inset from edges */
  .lightbox-nav.prev {
    left: 10px;
  }
  .lightbox-nav.next {
    right: 10px;
  }
}

.lightbox-close {
  position: absolute;
  top: 20px;
  right: 20px;
}

/* ============================================
   CLIENT PORTAL - SELECTIONS PAGE
   ============================================ */
/* Selection card - uses card-lift-hover utility */
.selection-card {
  background: var(--color-white);
  border: 1px solid var(--color-border);
}

.selection-option {
  cursor: pointer;
  transition: all 0.2s ease;
}

.selection-option:hover {
  background: var(--color-bg-light);
}

/* Consolidated selected state for selection components */
.selection-option.selected,
.option-card.selected,
.urgency-option.selected {
  border-color: var(--bramall-blue);
  background: rgba(var(--color-secondary-rgb), 0.1);
}

.option-card {
  transition: all 0.2s ease;
  cursor: pointer;
  border: 2px solid var(--color-border);
  background: var(--color-white);
}

.option-card:hover {
  border-color: var(--bramall-blue);
  background: var(--color-bg-light);
}

.option-image {
  width: 100%;
  height: 120px;
  object-fit: cover;
  border-radius: 8px;
  background: var(--gray-100);
}

.deadline-urgent {
  color: var(--red-400);
}
.deadline-soon {
  color: var(--amber-400, #fbbf24);
}

.status-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 12px;
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 500;
}

.status-pending {
  background: rgba(245, 158, 11, 0.2);
  color: var(--amber-400);
}
.status-selected {
  background: rgba(34, 197, 94, 0.2);
  color: var(--green-400);
}
.status-confirmed {
  background: rgba(59, 130, 246, 0.2);
  color: var(--blue-400);
}

/* ============================================
   CLIENT PORTAL - SNAGS PAGE
   ============================================ */
/* Snag card - uses card-lift-hover utility */
.snag-card {
  background: var(--color-white);
  border: 1px solid var(--color-border);
}

/* Urgency and status badge base - layout only, colors below */
.urgency-low,
.urgency-medium,
.urgency-high,
.urgency-urgent,
.status-investigating,
.status-resolved {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  line-height: 1;
}

/* Urgency variants */
.urgency-low {
  background: rgba(34, 197, 94, 0.15);
  color: var(--green-600);
}
.urgency-medium {
  background: rgba(245, 158, 11, 0.15);
  color: var(--amber-600);
}
.urgency-high {
  background: rgba(249, 115, 22, 0.15);
  color: var(--orange-600);
}
.urgency-urgent {
  background: rgba(239, 68, 68, 0.15);
  color: var(--red-600);
}

/* Snag status badges */
.status-investigating {
  background: rgba(59, 130, 246, 0.15);
  color: var(--blue-600);
}
.status-resolved {
  background: rgba(34, 197, 94, 0.15);
  color: var(--green-600);
}

.urgency-option {
  cursor: pointer;
  transition: all 0.2s ease;
  border: 2px solid var(--color-border);
}

.urgency-option:hover {
  border-color: var(--gray-300);
}
/* .urgency-option.selected consolidated into Selections section */

/* ============================================
   CLIENT PORTAL - TIMELINE PAGE
   ============================================ */
/* Timeline now uses flexbox layout in JS - no pseudo-elements needed */

.timeline-line {
  position: absolute;
  left: 20px; /* Aligns with center of 40px dot */
  top: 50px; /* Below first dot */
  bottom: -20px; /* Extends past last dot */
  width: 2px;
  background: var(--color-border);
}

.timeline-dot {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
  transition: all 0.3s ease;
  color: var(--color-white);
}

.timeline-dot.complete {
  background: linear-gradient(135deg, var(--green-500) 0%, var(--green-600) 100%);
  border: 3px solid rgba(16, 185, 129, 0.3);
}

.timeline-dot.current {
  background: linear-gradient(135deg, var(--color-secondary) 0%, var(--color-secondary-light) 100%);
  border: 3px solid rgba(var(--color-secondary-rgb), 0.5);
  box-shadow: 0 0 20px rgba(var(--color-secondary-rgb), 0.3);
}

.timeline-dot.upcoming {
  background: var(--color-border);
  border: 3px solid var(--gray-300);
  color: var(--gray-500);
}

.progress-ring {
  transform: rotate(-90deg);
}

.progress-ring-circle {
  transition: stroke-dashoffset 0.5s ease;
}

/* ============================================
   TOUCH-FRIENDLY SIZING (44px minimum)
   ============================================ */
/*
 * .touch-target - Add to any interactive element that needs
 * minimum 44px touch target size on mobile (Apple HIG guideline)
 */
.touch-target,
button,
a.nav-link {
  min-height: var(--touch-target-min);
  min-width: var(--touch-target-min);
}

/* Ensure buttons have adequate padding for touch */
button:not(.toggle-switch) {
  padding: 0.5rem 1rem;
}

/* Portal navigation - desktop: compact, mobile: touch-friendly */
.portal-navigation .nav-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

@media (max-width: 767px) {
  .portal-navigation .nav-link {
    min-height: var(--touch-target-min);
  }
}

/* Dropdown menu items - touch-friendly sizing */
.dropdown-menu a {
  min-height: var(--touch-target-min);
  display: flex;
  align-items: center;
}

/* ============================================
   MOBILE RESPONSIVE OVERRIDES
   Uses max-width queries for mobile-specific adjustments.
   Base styles are desktop-sized.
   HTML uses responsive classes (e.g., px-4 sm-px-6) for proper scaling.
   ============================================ */

/* Mobile: horizontal scroll for portal navigation */
@media (max-width: 767px) {
  .portal-navigation {
    overflow-x: auto;
    /* Deprecated: Kept for momentum scrolling on iOS Safari 12 and earlier */
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }

  .portal-navigation::-webkit-scrollbar {
    display: none;
  }
}

/* Small mobile optimization (< 640px) */
@media (max-width: 639px) {
  /* Smaller nav-logo on mobile */
  .nav-logo {
    width: 2rem;
    height: 2rem;
  }

  /* Smaller user avatar in nav-bar on mobile */
  .nav-bar .w-10.h-10 {
    width: 2rem;
    height: 2rem;
  }

  /* Smaller login logo on mobile */
  .login-screen .h-20 {
    height: 4rem;
  }

  /* Smaller font on tiny screens */
  .portal-navigation .nav-link {
    font-size: 0.7rem;
  }

  /* Full width inputs on mobile */
  input[type='text'],
  input[type='email'],
  input[type='password'],
  input[type='tel'],
  input[type='number'],
  input[type='date'],
  select,
  textarea {
    width: 100%;
    font-size: 16px; /* Prevents iOS zoom on focus */
  }

  /* Stats cards: allow flex shrink on mobile */
  .stat-card,
  .stat-card-dark {
    min-width: 0;
  }

  /* Smaller stat card padding on mobile */
  .stat-card-dark.p-5 {
    padding: 0.75rem;
  }

  /* Smaller stat card icons on mobile */
  .stat-card-dark .w-10.h-10 {
    width: 2rem;
    height: 2rem;
  }

  /* Constrain modal height on mobile */
  .max-h-\[90vh\] {
    max-height: 85vh;
  }

  /* Shorter pipeline columns on mobile */
  .stage-column {
    min-height: 350px;
  }
}

/* Tablet/Desktop improvements (768px+) */
@media (min-width: 768px) {
  .portal-navigation {
    overflow-x: visible;
  }
}

/* Desktop improvements (1024px+) */
@media (min-width: 1024px) {
  /* Larger pipeline columns on desktop */
  .stage-column {
    min-height: 500px;
  }
}

/* ============================================
   TABLES - MOBILE RESPONSIVE
   ============================================ */
.table-responsive {
  overflow-x: auto;
  /* Deprecated: Kept for momentum scrolling on iOS Safari 12 and earlier */
  -webkit-overflow-scrolling: touch;
}

@media (max-width: 767px) {
  /* Optional: Card layout for tables on mobile */
  .table-mobile-cards tbody tr {
    display: block;
    margin-bottom: 1rem;
    border: 1px solid var(--color-border);
    border-radius: 0.5rem;
    padding: 1rem;
    background: var(--color-white);
  }

  .table-mobile-cards tbody td {
    display: flex;
    justify-content: space-between;
    padding: 0.5rem 0;
    border-bottom: 1px solid var(--color-border-light);
  }

  .table-mobile-cards tbody td:last-child {
    border-bottom: none;
  }

  .table-mobile-cards thead {
    display: none;
  }
}

/* ============================================
   GMAIL BOX - RESPONSIVE
   ============================================ */
#gmail-list {
  max-height: 400px;
  overflow-y: auto;
}

@media (max-width: 639px) {
  #gmail-list {
    grid-template-columns: 1fr !important;
  }
}

/* ============================================
   SITE PORTAL STYLES
   ============================================ */

/* Page background - dark theme for site portal */
.site-page-bg {
  background: linear-gradient(135deg, var(--gray-800) 0%, var(--gray-900) 100%);
  color: var(--color-white);
}

/* Override global black text rule for site portal - inherit white from parent */
.site-page-bg h1,
.site-page-bg h2,
.site-page-bg h3,
.site-page-bg h4,
.site-page-bg h5,
.site-page-bg h6,
.site-page-bg p,
.site-page-bg span,
.site-page-bg label,
.site-page-bg li,
.site-page-bg td,
.site-page-bg th,
.site-page-bg div,
.site-page-bg button {
  color: inherit;
}

/* Site portal text colors - higher specificity to override base utilities
   Hardcoded values required: site portal uses dark theme with specific overrides */
.site-page-bg .text-white-70 {
  color: rgba(255, 255, 255, 0.7);
}
.site-page-bg .text-white-50 {
  color: rgba(255, 255, 255, 0.5);
}
.site-page-bg .text-white {
  color: var(--color-white);
}
.site-page-bg .text-gray-400 {
  color: var(--gray-400);
}
.site-page-bg .text-gray-500 {
  color: var(--gray-500);
}
.site-page-bg .text-green-400 {
  color: #4ade80;
}
.site-page-bg .text-blue-400 {
  color: #60a5fa;
}
.site-page-bg .text-red-400 {
  color: var(--red-400);
}
.site-page-bg .text-orange-400 {
  color: #fb923c;
}

/* Site stats card text - dedicated classes */
.site-stat-label {
  color: rgba(255, 255, 255, 0.7);
}
.site-stat-secondary {
  color: rgba(255, 255, 255, 0.5);
}
.site-stat-value-muted {
  color: rgba(255, 255, 255, 0.5);
}

/* Card/container background */
.site-card-bg {
  background-color: rgba(31, 41, 55, 0.8); /* gray-800 at 80% */
  border: 1px solid rgba(75, 85, 99, 0.5); /* gray-600 at 50% */
}

/* Sticky header for site portal forms */
.site-header-sticky {
  background-color: var(--gray-800);
  border-bottom: 1px solid rgba(75, 85, 99, 0.5);
}

.site-header-nearmiss {
  background-color: #fb923c; /* orange-400 */
  border-bottom: 1px solid var(--orange-600);
}

.site-header-toolbox {
  background-color: #14b8a6; /* teal-500 */
  border-bottom: 1px solid #0d9488; /* teal-600 */
}

.site-header-sitediary {
  background-color: #8b5cf6; /* violet-500 */
  border-bottom: 1px solid #7c3aed; /* violet-600 */
}

/* Site portal action button base */
.site-action-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 2rem;
  border-radius: 0.5rem;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  transition: all 0.2s ease;
  color: var(--color-white);
  font-weight: bold;
  font-size: 1.25rem;
}

.site-action-btn:hover {
  box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.2);
  transform: scale(1.05);
}

/* Site action button color variants */
.site-btn-signin {
  background-color: var(--green-500);
}
.site-btn-signin:hover {
  background-color: var(--green-600);
}
.site-btn-induction {
  background-color: #0052cc;
} /* brand blue */
.site-btn-induction:hover {
  background-color: #003d99;
}
.site-btn-incident {
  background-color: var(--red-500);
}
.site-btn-incident:hover {
  background-color: var(--red-600);
}
.site-btn-nearmiss {
  background-color: #fb923c;
} /* orange-400 */
.site-btn-nearmiss:hover {
  background-color: var(--orange-500);
}
.site-btn-toolbox {
  background-color: #14b8a6;
} /* teal-500 */
.site-btn-toolbox:hover {
  background-color: #0d9488;
} /* teal-600 */
.site-btn-sitediary {
  background-color: #8b5cf6;
} /* violet-500 */
.site-btn-sitediary:hover {
  background-color: #7c3aed;
} /* violet-600 */
.site-btn-rams {
  background-color: var(--orange-500);
}
.site-btn-rams:hover {
  background-color: var(--orange-600);
}
.site-btn-permits {
  background-color: var(--purple-500);
}
.site-btn-permits:hover {
  background-color: var(--purple-600);
}
.site-btn-documents {
  background-color: var(--yellow-500);
}
.site-btn-documents:hover {
  background-color: var(--yellow-600);
}

/* Site portal mobile optimizations */
@media (max-width: 639px) {
  .site-action-btn {
    padding: 1.25rem;
    font-size: 1rem;
  }

  .site-action-btn svg {
    width: 2rem;
    height: 2rem;
  }

  /* Reduce sticky header padding on mobile */
  .site-header-sticky {
    padding: 0.75rem 1rem;
  }

  /* Messages panel responsive height */
  .messages-panel-height {
    height: 300px;
  }

  /* Site card padding on mobile */
  .site-card-bg {
    padding: 0.75rem;
  }

  /* Site portal header - reduce spacing on mobile */
  .site-page-bg .space-x-4 {
    gap: 0.5rem;
  }

  /* Make 3-column form grids stack on mobile */
  .site-page-bg .grid-cols-3 {
    grid-template-columns: 1fr;
  }

  .site-page-bg .grid-cols-3 .col-span-2 {
    grid-column: span 1;
  }

  /* Site portal form inputs - ensure readable size */
  .site-page-bg input,
  .site-page-bg select,
  .site-page-bg textarea {
    font-size: 16px; /* Prevent iOS zoom */
  }

  /* Reduce dashboard title size on mobile */
  .site-page-bg .text-4xl {
    font-size: 1.5rem;
  }
}

/* Chat/messages container height */
.chat-container-height {
  height: calc(100vh - 120px);
}

/* Messages panel height */
.messages-panel-height {
  height: 400px;
  overflow-y: auto;
}

/* ============================================
   SECTION HEADER STYLES
   ============================================ */
.section-header-dark {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  border-bottom: 1px solid var(--color-primary);
}

.section-header-dark h3,
.section-header-dark p,
.section-header-dark span {
  color: var(--color-white);
}

.section-header-dark .text-bramall-grey {
  color: rgba(255, 255, 255, 0.7);
}

/* ============================================
   FOOTER STYLES
   ============================================ */
.hub-footer {
  background: linear-gradient(135deg, var(--color-charcoal) 0%, var(--color-primary) 100%);
  border-top: 1px solid var(--color-primary);
}

.hub-footer,
.hub-footer p,
.hub-footer a,
.hub-footer span {
  color: var(--color-white);
}

.hub-footer a:hover {
  color: rgba(255, 255, 255, 0.8);
}

/* ============================================
   PRINT STYLES
   ============================================ */
@media print {
  body {
    background: white;
    color: black;
  }

  .no-print {
    display: none !important;
  }
}

/* ============================================
   PWA INSTALL PROMPT BANNER
   ============================================ */
.pwa-install-banner {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 9999;
  padding: 1rem;
  transform: translateY(100%);
  transition: transform 0.3s ease-out;
}

.pwa-install-banner.visible {
  transform: translateY(0);
}

.pwa-install-banner-content {
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: 1rem;
  box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.1);
  padding: 1.25rem;
  max-width: 600px;
  margin: 0 auto;
}

.pwa-install-header {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-bottom: 0.75rem;
}

.pwa-install-icon {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  flex-shrink: 0;
}

/* ============================================
   PRIVACY NOTICE STYLES
   ============================================ */
.privacy-notice {
  font-size: 0.8rem;
  color: var(--gray-400);
  margin-top: 1rem;
  margin-bottom: 0.5rem;
}

.privacy-notice a {
  color: var(--bramall-blue);
  text-decoration: underline;
}

/* For use on colored backgrounds (green header, etc) */
.privacy-notice-light {
  font-size: 0.8rem;
  color: rgba(255, 255, 255, 0.7);
  margin-top: 0.75rem;
  margin-bottom: 0;
}

.privacy-notice-light a {
  color: rgba(255, 255, 255, 0.9);
  text-decoration: underline;
}

.pwa-install-title {
  font-size: 1.125rem;
  font-weight: 600;
  color: var(--color-black);
  margin-bottom: 0.25rem;
}

.pwa-install-benefit {
  font-size: 0.875rem;
  color: var(--gray-500);
}

.pwa-install-actions {
  display: flex;
  gap: 0.75rem;
  margin-top: 1rem;
}

.pwa-install-btn {
  flex: 1;
  padding: 0.875rem 1.5rem;
  border-radius: 0.5rem;
  font-weight: 600;
  font-size: 1rem;
  text-align: center;
  transition: all 0.2s ease;
  min-height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
}

.pwa-install-btn-primary {
  background: linear-gradient(135deg, var(--color-secondary) 0%, var(--color-secondary-light) 100%);
  color: var(--color-white);
  border: none;
}

.pwa-install-btn-primary:hover {
  background: linear-gradient(135deg, var(--color-secondary-light) 0%, var(--color-secondary) 100%);
  transform: scale(1.02);
}

.pwa-install-btn-secondary {
  background: var(--color-border-light);
  color: var(--color-black);
  border: 1px solid var(--color-border);
}

.pwa-install-btn-secondary:hover {
  background: var(--color-border);
  color: var(--color-black);
}

/* iOS-specific instructions */
.pwa-ios-instructions {
  background: var(--color-bg-light);
  border-radius: 0.75rem;
  padding: 1rem;
  margin-top: 0.75rem;
}

.pwa-ios-step {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.5rem 0;
}

.pwa-ios-step:not(:last-child) {
  border-bottom: 1px solid var(--color-border);
}

.pwa-ios-step-number {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--bramall-blue);
  color: var(--color-white);
  font-size: 0.75rem;
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.pwa-ios-step-text {
  font-size: 0.875rem;
  color: var(--color-black);
}

.pwa-ios-share-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  vertical-align: middle;
  margin: 0 0.25rem;
}

.pwa-ios-share-icon svg {
  width: 16px;
  height: 16px;
  fill: var(--blue-400);
}

/* Responsive adjustments */
@media (max-width: 639px) {
  .pwa-install-banner {
    padding: 0.75rem;
  }

  .pwa-install-banner-content {
    padding: 1rem;
    border-radius: 0.75rem;
  }

  .pwa-install-header {
    gap: 0.75rem;
  }

  .pwa-install-icon {
    width: 40px;
    height: 40px;
  }

  .pwa-install-title {
    font-size: 1rem;
  }

  .pwa-install-benefit {
    font-size: 0.8rem;
  }

  .pwa-install-actions {
    flex-direction: column;
    gap: 0.5rem;
  }

  .pwa-install-btn {
    padding: 0.75rem 1rem;
  }
}

/* ============================================
   SCHEDULE VIEW TOGGLE
   ============================================ */
.schedule-view-btn {
  color: var(--bramall-grey);
  background: transparent;
}

.schedule-view-btn:hover {
  color: var(--bramall-charcoal);
  background: rgba(0, 0, 0, 0.05);
}

.schedule-view-btn.active {
  color: var(--color-white);
  background: var(--bramall-blue);
}

/* ============================================
   GANTT CHART STYLES
   ============================================ */
.gantt-container {
  position: relative;
}

.gantt-wrapper {
  background: var(--color-white);
}

.gantt-chart {
  min-width: 100%;
}

.gantt-grid {
  display: grid;
  gap: 0;
}

/* Header styles */
.gantt-header-label {
  display: flex;
  align-items: center;
  padding: 0 12px;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--bramall-grey);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  background: var(--color-bg-light);
  border-bottom: 1px solid var(--color-border);
  height: 60px;
  position: sticky;
  left: 0;
  z-index: 10;
}

.gantt-timeline-header {
  display: flex;
  flex-direction: column;
  background: var(--color-bg-light);
  border-bottom: 1px solid var(--color-border);
  overflow: hidden;
}

.gantt-timeline-months {
  display: flex;
  border-bottom: 1px solid var(--color-border);
}

.gantt-month {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 28px;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--bramall-charcoal);
  border-right: 1px solid var(--color-border);
  flex-shrink: 0;
}

.gantt-timeline-weeks {
  display: flex;
}

.gantt-week {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 32px;
  font-size: 0.65rem;
  color: var(--bramall-grey);
  border-right: 1px solid var(--color-border-light);
  flex-shrink: 0;
}

/* Row styles */
.gantt-row-label {
  display: flex;
  align-items: center;
  padding: 0 12px;
  font-size: 0.8125rem;
  color: var(--bramall-charcoal);
  background: var(--color-white);
  border-bottom: 1px solid var(--color-border-light);
  position: sticky;
  left: 0;
  z-index: 5;
}

.gantt-row-label:nth-child(4n + 1) {
  background: var(--color-bg-light);
}

.gantt-phase-name {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 130px;
}

.gantt-row-bars {
  position: relative;
  border-bottom: 1px solid var(--color-border-light);
  background: linear-gradient(90deg, var(--color-bg-light) 1px, transparent 1px);
  background-size: 168px 100%; /* 7 days * 24px */
}

.gantt-row-label:nth-child(4n + 1) + .gantt-row-bars {
  background-color: var(--color-bg-light);
}

/* Bar styles */
.gantt-bar {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  height: 16px;
  border-radius: 3px;
  cursor: pointer;
  transition: opacity 0.15s ease;
}

.gantt-bar:hover {
  opacity: 0.85;
}

/* Target bar offset: 10px/2 - 4px adjustment for visual alignment */
.gantt-bar-target {
  background: var(--gray-300);
  height: 10px;
  top: calc(50% - 4px);
}

.gantt-bar-actual {
  z-index: 2;
}

.gantt-bar-not-started {
  background: var(--bramall-grey);
}

.gantt-bar-in-progress {
  background: var(--bramall-blue);
}

.gantt-bar-complete {
  background: var(--bramall-charcoal);
}

.gantt-bar-overdue {
  background: var(--red-500);
}

.gantt-bar-on-hold {
  background: var(--amber-500);
}

/* Hold period overlay with diagonal stripes */
.gantt-bar-hold {
  position: absolute;
  height: 20px;
  border-radius: 3px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 5;
  background: repeating-linear-gradient(
    45deg,
    rgba(245, 158, 11, 0.6),
    rgba(245, 158, 11, 0.6) 4px,
    rgba(245, 158, 11, 0.3) 4px,
    rgba(245, 158, 11, 0.3) 8px
  );
  border: 1px solid rgba(245, 158, 11, 0.8);
}

/* Today marker */
.gantt-today-marker {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 2px;
  background: var(--amber-500);
  z-index: 3;
}

.gantt-today-marker::before {
  content: '';
  position: absolute;
  top: 0;
  left: -4px;
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 6px solid var(--amber-500);
}

/* Delay label */
.gantt-delay-label {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  font-size: 0.65rem;
  white-space: nowrap;
  z-index: 4;
}

/* Tooltip */
.gantt-tooltip {
  position: fixed;
  z-index: 1000;
  pointer-events: none;
}

.gantt-tooltip-content {
  background: var(--bramall-charcoal);
  color: var(--color-white);
  padding: 8px 12px;
  border-radius: 6px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
  font-size: 0.8125rem;
  max-width: 200px;
}

/* Responsive */
@media (max-width: 768px) {
  .gantt-row-label {
    min-width: 120px;
  }

  .gantt-phase-name {
    max-width: 100px;
  }
}

/* ============================================
   XERO INTEGRATION
   ============================================ */
.btn-xero {
  background-color: #13b5ea; /* Xero brand color */
  color: var(--color-white);
  padding: 0.375rem 0.75rem;
  border-radius: 0.5rem;
  font-size: 0.875rem;
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  transition: background-color 0.2s ease;
}

.btn-xero:hover {
  background-color: #0fa8db;
}

.btn-xero svg {
  width: 1rem;
  height: 1rem;
}

/* Xero brand color utilities */
.bg-xero-blue-20 {
  background-color: rgba(19, 181, 234, 0.2);
}

.text-xero-blue {
  color: var(--color-xero-blue);
}

/* ============================================
   ACTIVITY TIMELINE
   ============================================ */
#activity-timeline.activity-scroll {
  max-height: 320px;
  overflow-y: auto;
  padding-right: 0.5rem;
}

#activity-timeline.activity-scroll::-webkit-scrollbar {
  width: 6px;
}

#activity-timeline.activity-scroll::-webkit-scrollbar-track {
  background: rgba(55, 65, 81, 0.3);
  border-radius: 3px;
}

#activity-timeline.activity-scroll::-webkit-scrollbar-thumb {
  background: var(--color-secondary);
  border-radius: 3px;
}

#activity-timeline.activity-scroll::-webkit-scrollbar-thumb:hover {
  background: var(--color-secondary-light);
}

/* ============================================
   MOBILE NAVIGATION MENU
   ============================================ */
/* Hamburger button - only visible on mobile */
.mobile-menu-btn {
  display: none;
  padding: 0.5rem;
  background: transparent;
  border: none;
  cursor: pointer;
  color: white;
}

@media (max-width: 767px) {
  .mobile-menu-btn {
    display: flex;
    align-items: center;
    justify-content: center;
  }

  /* Hide secondary nav on mobile - show in drawer instead */
  .secondary-nav-desktop {
    display: none;
  }
}

/* Mobile drawer overlay */
.mobile-nav-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 100;
  opacity: 0;
  transition: opacity 0.3s ease;
}

.mobile-nav-overlay.active {
  display: block;
  opacity: 1;
}

/* Mobile drawer */
.mobile-nav-drawer {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: 280px;
  max-width: 85vw;
  background: var(--color-primary);
  z-index: 101;
  transform: translateX(-100%);
  transition: transform 0.3s ease;
  overflow-y: auto;
}

.mobile-nav-drawer.active {
  transform: translateX(0);
}

.mobile-nav-drawer .drawer-header {
  padding: 1rem;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.mobile-nav-drawer .drawer-close {
  padding: 0.5rem;
  background: transparent;
  border: none;
  color: white;
  cursor: pointer;
}

.mobile-nav-drawer .drawer-section {
  padding: 0.75rem 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.mobile-nav-drawer .drawer-section-title {
  padding: 0.5rem 1rem;
  font-size: 0.75rem;
  color: rgba(255, 255, 255, 0.5);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.mobile-nav-drawer .drawer-link {
  display: block;
  padding: 0.75rem 1rem;
  color: rgba(255, 255, 255, 0.8);
  text-decoration: none;
  font-size: 0.9rem;
  transition:
    background 0.2s,
    color 0.2s;
}

.mobile-nav-drawer .drawer-link:hover,
.mobile-nav-drawer .drawer-link.active {
  background: rgba(255, 255, 255, 0.1);
  color: white;
}

.mobile-nav-drawer .drawer-link.active {
  border-left: 3px solid var(--color-secondary);
}

/* ============================================
   ACCESSIBILITY - KEYBOARD FOCUS INDICATORS
   Ensures keyboard-only users can see where they are
   Uses :focus-visible to only show for keyboard navigation
   ============================================ */

/* Global focus outline for interactive elements */
:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
}

/* Remove default focus outline when using mouse */
:focus:not(:focus-visible) {
  outline: none;
}

/* Buttons - enhanced focus state */
button:focus-visible,
.btn:focus-visible,
[type='button']:focus-visible,
[type='submit']:focus-visible,
[type='reset']:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
  box-shadow: 0 0 0 4px rgba(82, 114, 154, 0.3);
}

/* Links */
a:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
  border-radius: 2px;
}

/* Form inputs */
input:focus-visible,
textarea:focus-visible,
select:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 0;
  border-color: var(--bramall-blue, #52729a);
}

/* Checkboxes and radio buttons */
input[type='checkbox']:focus-visible,
input[type='radio']:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
}

/* Tab buttons and navigation */
.tab-button:focus-visible,
.nav-link:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
  border-radius: 4px;
}

/* Cards and clickable containers */
.card:focus-visible,
[role='button']:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
}

/* Modal close buttons */
.modal-close:focus-visible,
[aria-label='Close']:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
  border-radius: 50%;
}

/* Dropdown triggers */
.dropdown-trigger:focus-visible,
#user-menu-btn:focus-visible {
  outline: 2px solid var(--bramall-blue, #52729a);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ============================================
   STANDARDIZED ACTION BUTTONS
   ============================================ */
.btn-action {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.5rem 1rem;
  height: 2rem;
  min-height: 2rem;
  min-width: auto;
  border-radius: 0.5rem;
  font-size: 0.75rem;
  font-weight: 500;
  transition: all 0.2s ease;
  border: none;
  cursor: pointer;
  text-decoration: none;
}

.btn-action-primary {
  background-color: var(--bramall-blue);
  color: var(--color-white);
}

.btn-action-primary:hover {
  background-color: rgba(var(--color-secondary-rgb), 0.9);
}

.btn-action-danger {
  background-color: var(--red-500);
  color: var(--color-white);
}

.btn-action-danger:hover {
  background-color: var(--red-600);
}

.btn-action-secondary {
  background-color: var(--color-border-light);
  color: var(--gray-900);
}

.btn-action-secondary:hover {
  background-color: var(--gray-200);
}

.btn-action-success {
  background-color: var(--green-500);
  color: var(--color-white);
}

.btn-action-success:hover {
  background-color: var(--green-600);
}

/* Skip to content link for screen readers */
.skip-to-content {
  position: absolute;
  top: -40px;
  left: 0;
  background: var(--bramall-blue, #52729a);
  color: white;
  padding: 8px 16px;
  z-index: 1000;
  text-decoration: none;
  transition: top 0.3s;
}

.skip-to-content:focus {
  top: 0;
}

/* High contrast mode support */
@media (prefers-contrast: high) {
  :focus-visible {
    outline: 3px solid currentColor;
    outline-offset: 3px;
  }
}

/* Reduced motion support */
@media (prefers-reduced-motion: reduce) {
  :focus-visible {
    transition: none;
  }
}

/* ============================================
   AUTO-REFRESH TOAST ANIMATIONS
   ============================================ */

@keyframes slideIn {
  from {
    transform: translateX(400px);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

@keyframes slideOut {
  from {
    transform: translateX(0);
    opacity: 1;
  }
  to {
    transform: translateX(400px);
    opacity: 0;
  }
}

/* Disable animations for users who prefer reduced motion */
@media (prefers-reduced-motion: reduce) {
  @keyframes slideIn {
    from {
      opacity: 0;
    }
    to {
      opacity: 1;
    }
  }

  @keyframes slideOut {
    from {
      opacity: 1;
    }
    to {
      opacity: 0;
    }
  }
}

/* ============================================
   REFRESH BUTTON
   ============================================ */

.refresh-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  font-size: 14px;
  transition: all 0.2s;
}

.refresh-btn svg {
  width: 16px;
  height: 16px;
  transition: transform 0.3s;
}

.refresh-btn.refreshing svg {
  animation: spin 1s linear infinite;
}

.refresh-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  .refresh-btn.refreshing svg {
    animation: none;
  }
}
