/* Project-specific style overrides that go beyond Tailwind utility classes. */

:root {
  --color-cyprus: #004643;
  --color-cyprus-light: #0b6e6a;
  --color-cyprus-dark: #002e2c;
  --color-sand: #f0ede5;
  --color-sand-dark: #e4ddcf;
}

body {
  min-height: 100vh;
}

/* Alpine.js: hide elements bound with x-show until Alpine has initialized. */
[x-cloak] {
  display: none !important;
}

/* Subtle entrance animation for dashboard cards/panels. */
@keyframes fade-in-up {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    /* Literally "none", not translateY(0): any non-"none" transform value
       creates a new CSS stacking context for the element for as long as it
       applies. Because this animation uses fill-mode "both", the "to" state
       persists forever after the animation finishes — if it were
       translateY(0) (numerically identical, but not the "none" keyword),
       every card using this class would permanently become its own
       stacking context once its entrance animation completed. Later cards
       in DOM order would then always paint fully on top of earlier ones,
       including anything an earlier card tries to show above its own
       bounds (e.g. an absolutely-positioned, higher z-index tooltip) —
       which is exactly why KPI tooltips were rendering behind the next
       card. Using "none" avoids creating that lingering stacking context. */
    transform: none;
  }
}

.animate-fade-in-up {
  animation: fade-in-up 0.45s ease-out both;
}

/* Staggered delays for a sequence of cards (used on KPI cards + chart panels). */
.stagger-1 { animation-delay: 0.03s; }
.stagger-2 { animation-delay: 0.06s; }
.stagger-3 { animation-delay: 0.09s; }
.stagger-4 { animation-delay: 0.12s; }
.stagger-5 { animation-delay: 0.15s; }
.stagger-6 { animation-delay: 0.18s; }
.stagger-7 { animation-delay: 0.21s; }

/* Gentle pulse used on live/status badges. */
@keyframes pulse-dot {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

.animate-pulse-dot {
  animation: pulse-dot 1.8s ease-in-out infinite;
}
