/* ============================================================
   C&G LOOKUP — Animations v1.0
   Inspired by modern OSINT interfaces
   No layout changes — animations & effects only
   ============================================================ */

/* ============================================================
   HARD OVERRIDE — Disable ALL results animations
   (user request: no animation / no hover lift on #results)
   ============================================================ */
#results,
#results * {
  animation: none !important;
  transition: none !important;
  transform: none !important;
}

#results .card:hover,
#results .result-card:hover,
#results [class*="result-card"]:hover {
  animation: none !important;
  transition: none !important;
  transform: none !important;
  box-shadow: none !important;
  border-color: rgba(var(--color-accent-rgb), 0.06) !important;
  outline: none !important;
  filter: none !important;
}

#results .card-header::after,
#results .section-header::after,
#results .card-row::before,
#results .field-row::before,
#results .card::after,
#results .result-card::after {
  animation: none !important;
  transition: none !important;
  opacity: 0 !important;
  background: transparent !important;
  transform: none !important;
}

#results .card-row:hover,
#results .field-row:hover {
  background: transparent !important;
  padding-left: 0 !important;
}

#results .card-row:hover::before,
#results .field-row:hover::before {
  opacity: 0 !important;
  transform: none !important;
}


/* ========== 1. CARD ENTRANCE — staggered fade-in + slide-up ========== */
@keyframes cardReveal {
  0% {
    opacity: 0;
    transform: translateY(18px) scale(0.97);
    filter: blur(3px);
  }
  60% {
    opacity: 1;
    filter: blur(0);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
    filter: blur(0);
  }
}

#results .card,
#results .result-card,
#results [class*="result-card"] {
  animation: cardReveal 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* Staggered delays — set by JS, fallback CSS */
#results > :nth-child(1)  { animation-delay: 0.00s; }
#results > :nth-child(2)  { animation-delay: 0.04s; }
#results > :nth-child(3)  { animation-delay: 0.08s; }
#results > :nth-child(4)  { animation-delay: 0.12s; }
#results > :nth-child(5)  { animation-delay: 0.16s; }
#results > :nth-child(6)  { animation-delay: 0.20s; }
#results > :nth-child(7)  { animation-delay: 0.24s; }
#results > :nth-child(8)  { animation-delay: 0.28s; }
#results > :nth-child(9)  { animation-delay: 0.32s; }
#results > :nth-child(10) { animation-delay: 0.36s; }
#results > :nth-child(n+11) { animation-delay: 0.40s; }

/* ========== 2. CARD ANIMATED GLOW BORDER ========== */
@keyframes borderGlow {
  0%, 100% {
    border-color: rgba(var(--color-accent-rgb), 0.06);
    box-shadow: 0 2px 8px rgba(0,0,0,0.3), 0 0 0 0 rgba(var(--color-accent-rgb), 0);
  }
  50% {
    border-color: rgba(var(--color-accent-rgb), 0.12);
    box-shadow: 0 2px 8px rgba(0,0,0,0.3), 0 0 20px -8px rgba(var(--color-accent-rgb), 0.08);
  }
}

.card, .result-card, [class*="result-card"] {
  animation: borderGlow 4s ease-in-out infinite, cardReveal 0.5s cubic-bezier(0.22, 1, 0.36, 1) both;
  transition: border-color 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
}

/* ========== 3. CARD HOVER — glow intensify + lift ========== */
.card:hover, .result-card:hover, [class*="result-card"]:hover {
  border-color: rgba(var(--color-accent-rgb), 0.25) !important;
  box-shadow:
    0 8px 32px rgba(0,0,0,0.45),
    0 0 24px -4px rgba(var(--color-accent-rgb), 0.15),
    inset 0 0 0 1px rgba(var(--color-accent-rgb), 0.05);
  transform: translateY(-2px);
  animation: none;
}

/* ========== 4. SECTION HEADER — scan-line sweep ========== */
@keyframes scanSweep {
  0%   { background-position: -200% center; }
  100% { background-position: 200% center; }
}

.section-header,
.card-header {
  position: relative;
  overflow: hidden;
}

.section-header::after,
.card-header::after {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background: linear-gradient(
    90deg,
    transparent 0%,
    rgba(var(--color-accent-rgb), 0.04) 45%,
    rgba(var(--color-accent-rgb), 0.08) 50%,
    rgba(var(--color-accent-rgb), 0.04) 55%,
    transparent 100%
  );
  background-size: 200% 100%;
  animation: scanSweep 6s linear infinite;
  pointer-events: none;
  border-radius: inherit;
}

/* ========== 5. FIELD ROW — hover highlight ========== */
.card-row,
.field-row {
  position: relative;
  transition: background 0.2s ease, padding-left 0.2s ease;
  border-radius: 4px;
}

.card-row:hover,
.field-row:hover {
  background: rgba(var(--color-accent-rgb), 0.03);
  padding-left: 4px;
}

/* Left accent bar on hover */
.card-row::before,
.field-row::before {
  content: '';
  position: absolute;
  left: -2px;
  top: 20%;
  bottom: 20%;
  width: 2px;
  background: var(--color-accent);
  border-radius: 2px;
  opacity: 0;
  transform: scaleY(0);
  transition: opacity 0.2s ease, transform 0.25s cubic-bezier(0.22, 1, 0.36, 1);
}

.card-row:hover::before,
.field-row:hover::before {
  opacity: 0.6;
  transform: scaleY(1);
}

/* ========== 6. SIDEBAR ITEMS — static glow, no animation ========== */
#sbPanel .sb-nav-item {
  transition: background 0.2s ease, color 0.2s ease;
  position: relative;
}

#sbPanel .sb-nav-item.active {
  box-shadow: 0 0 14px -4px rgba(var(--color-accent-rgb), 0.18);
}

/* ========== 7. SEARCH BAR FOCUS — handled by rotating glow in index.html ========== */

/* ========== 8. BUTTON SHINE SWEEP ========== */
@keyframes btnShineSweep {
  0%   { left: -60%; }
  100% { left: 120%; }
}

.btn-search,
.sb-claim-btn,
.add-to-cart-btn,
.btn-pay,
.auth-btn,
#authSubmitBtn {
  position: relative;
  overflow: hidden;
}

.btn-search::before,
.sb-claim-btn::before,
.add-to-cart-btn::before,
.btn-pay::before,
.auth-btn::before,
#authSubmitBtn::before {
  content: '';
  position: absolute;
  top: 0;
  left: -60%;
  width: 40%;
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(var(--btn-glow-rgb), 0.18),
    transparent
  );
  transform: skewX(-20deg);
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.2s;
  z-index: 1;
}

.btn-search:hover::before,
.sb-claim-btn:hover::before,
.add-to-cart-btn:hover::before,
.btn-pay:hover::before,
.auth-btn:hover::before,
#authSubmitBtn:hover::before {
  opacity: 1;
  animation: btnShineSweep 0.6s ease forwards;
}

/* Shine sweep on secondary buttons too */
.sb-pw-action-btn::before,
.sb-export-download::before {
  content: '';
  position: absolute;
  top: 0;
  left: -60%;
  width: 40%;
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(var(--btn-glow-rgb), 0.10),
    transparent
  );
  transform: skewX(-20deg);
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.2s;
  z-index: 1;
}

.sb-pw-action-btn:hover::before,
.sb-export-download:hover::before {
  opacity: 1;
  animation: btnShineSweep 0.6s ease forwards;
}

/* ========== 9. QUICK ACTION CARDS — hover glow ========== */
.quick-action-card {
  transition: border-color 0.25s ease, box-shadow 0.25s ease, transform 0.2s ease;
}

.quick-action-card:hover {
  border-color: rgba(var(--color-accent-rgb), 0.18);
  box-shadow:
    0 4px 20px rgba(0,0,0,0.3),
    0 0 20px -6px rgba(var(--color-accent-rgb), 0.12);
  transform: translateY(-2px);
}

/* Icon glow on hover */
.quick-action-card:hover .qa-icon {
  box-shadow: 0 0 14px rgba(var(--color-accent-rgb), 0.2);
  background: rgba(var(--color-accent-rgb), 0.16);
}

/* ========== 10. BADGE PULSE ========== */
@keyframes badgePulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(var(--color-accent-rgb), 0); }
  50%      { box-shadow: 0 0 8px 2px rgba(var(--color-accent-rgb), 0.15); }
}

.card-badge {
  animation: badgePulse 3.5s ease-in-out infinite;
  transition: background 0.2s ease, transform 0.15s ease;
}

.card-badge:hover {
  background: rgba(var(--color-accent-rgb), 0.18);
  transform: scale(1.05);
}

/* ========== 11. COPY BUTTON — animated feedback ========== */
@keyframes copyFlash {
  0%   { background: rgba(var(--color-accent-rgb), 0.25); transform: scale(1.15); }
  100% { background: transparent; transform: scale(1); }
}

.btn-copy-all.copied,
.btn-copy-field.copied,
.card-row-copy.copied,
.field-value-copy.copied {
  animation: copyFlash 0.5s ease forwards;
  color: var(--color-success) !important;
}

/* ========== 12. RESULTS SECTION ENTRANCE ========== */
@keyframes resultsSectionFadeIn {
  0% { opacity: 0; }
  100% { opacity: 1; }
}

#results-section {
  animation: resultsSectionFadeIn 0.4s ease both;
}

/* ========== 13. AMBIENT BACKGROUND GLOW ========== */
/* Applied to #mainSite to avoid conflict with body::before { display:none } in themes.css */
@keyframes ambientGlow {
  0%, 100% { opacity: 0.4; }
  50%      { opacity: 0.8; }
}

#mainSite > .container::before {
  content: '';
  position: fixed;
  top: -60px; left: 10%; right: 10%;
  height: 200px;
  background: radial-gradient(
    ellipse at 50% 0%,
    rgba(var(--color-accent-rgb), 0.04) 0%,
    transparent 70%
  );
  pointer-events: none;
  z-index: 0;
  animation: ambientGlow 8s ease-in-out infinite;
  border-radius: 50%;
  filter: blur(40px);
}

/* ========== 14. TOAST ANIMATION ========== */
@keyframes toastSlideIn {
  0% {
    opacity: 0;
    transform: translateY(20px) scale(0.95);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

@keyframes toastSlideOut {
  0% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
  100% {
    opacity: 0;
    transform: translateY(-10px) scale(0.95);
  }
}

.toast.show, #toast.show {
  animation: toastSlideIn 0.35s cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* ========== 15. LOADING SHIMMER — for skeleton states ========== */
@keyframes shimmerLoad {
  0%   { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

.shimmer, .loading-shimmer {
  background: linear-gradient(
    90deg,
    var(--bg-card) 25%,
    rgba(var(--color-accent-rgb), 0.06) 50%,
    var(--bg-card) 75%
  );
  background-size: 200% 100%;
  animation: shimmerLoad 1.8s ease-in-out infinite;
}

/* ========== 16. MAP MODAL ENTRANCE ========== */
@keyframes modalSlideUp {
  0% {
    opacity: 0;
    transform: translateY(24px) scale(0.96);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

.osm-modal-open .osm-modal-box,
.modal-overlay.active .modal-content,
#blUnlockModal.active .bl-modal-box {
  animation: modalSlideUp 0.35s cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* ========== 17. PROFILE WIDGET HOVER ========== */
.sb-profile-widget {
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
}

.sb-profile-widget:hover {
  border-color: rgba(var(--color-accent-rgb), 0.15);
  box-shadow: 0 0 16px -4px rgba(var(--color-accent-rgb), 0.1);
}

/* Avatar ring glow */
@keyframes avatarRingPulse {
  0%, 100% { border-color: rgba(255,255,255,0.08); }
  50%      { border-color: rgba(var(--color-accent-rgb), 0.3); }
}

.sb-pw-avatar {
  animation: avatarRingPulse 4s ease-in-out infinite;
}

/* ========== 18. STATS WIDGET — count-up style ========== */
.sb-stats-val {
  transition: color 0.3s ease;
}

.sb-stats-widget:hover .sb-stats-val {
  text-shadow: 0 0 12px rgba(var(--color-accent-rgb), 0.3);
}

/* ========== 19. LIVE SEARCH ITEMS — enhanced entrance ========== */
@keyframes liveItemPop {
  0% {
    opacity: 0;
    transform: translateX(-8px) scale(0.95);
  }
  100% {
    opacity: 1;
    transform: translateX(0) scale(1);
  }
}

.sb-live-item {
  animation: liveItemPop 0.35s cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* ========== 20. DATA STREAM EFFECT — accent line on cards ========== */
@keyframes dataStream {
  0%   { top: -30%; opacity: 0; }
  10%  { opacity: 0.6; }
  90%  { opacity: 0.6; }
  100% { top: 130%; opacity: 0; }
}

.card::after, .result-card::after {
  content: '';
  position: absolute;
  right: 0;
  top: -30%;
  width: 1px;
  height: 30%;
  background: linear-gradient(
    180deg,
    transparent,
    rgba(var(--color-accent-rgb), 0.4),
    transparent
  );
  opacity: 0;
  pointer-events: none;
  z-index: 1;
}

.card:hover::after, .result-card:hover::after {
  animation: dataStream 1.2s ease-in-out forwards;
}

/* ========== 21. HIGHLIGHT ANIMATION — for search matches ========== */
@keyframes highlightPulse {
  0%, 100% { background: rgba(var(--color-accent-rgb), 0.15); }
  50%      { background: rgba(var(--color-accent-rgb), 0.25); }
}

.highlight, .card-value .highlight {
  background: rgba(var(--color-accent-rgb), 0.15);
  color: var(--color-accent-hover);
  padding: 1px 3px;
  border-radius: 3px;
  animation: highlightPulse 2.5s ease-in-out infinite;
}

/* ========== 22. CLAIM & SEARCH BUTTON GLOW ========== */
/* -- All themes: button glow & gradients use accent color -- */
:root {
  --btn-glow-rgb: var(--color-accent-rgb);
  --btn-grad-from: rgba(var(--color-accent-rgb), 0.04);
  --btn-grad-to: rgba(var(--color-accent-rgb), 0.10);
  --btn-grad-hover-from: rgba(var(--color-accent-rgb), 0.10);
  --btn-grad-hover-to: rgba(var(--color-accent-rgb), 0.20);
}

/* Claim button — same style as nav items, defined in index.html inline */

/* Search button — subtle accent glow, adapts to theme */
.btn-search {
  border: none;
  box-shadow: 0 0 10px rgba(var(--color-accent-rgb), 0.15);
  transition: box-shadow 0.3s ease, filter 0.2s ease, transform 0.2s ease;
}

.btn-search:hover {
  box-shadow: 0 0 18px rgba(var(--color-accent-rgb), 0.25);
  filter: brightness(1.15);
  transform: translateY(-1px);
}

/* ========== 22b. EXPORT & SECONDARY BUTTONS — gradient + hover ========== */
/* All secondary buttons use --btn-grad-* which adapts per theme */

/* Export / New Search — styles are in index.html inline <style> */

/* Export download button (in export modal) */
.sb-export-download {
  background: linear-gradient(135deg, var(--color-accent) 0%, var(--color-accent-hover) 100%);
  transition: all 0.3s cubic-bezier(0.22, 1, 0.36, 1);
  position: relative;
  overflow: hidden;
  box-shadow: 0 2px 10px rgba(var(--color-accent-rgb), 0.15);
}

.sb-export-download:hover {
  background: linear-gradient(135deg, var(--color-accent-hover) 0%, var(--color-accent) 100%);
  box-shadow: 0 4px 20px rgba(var(--color-accent-rgb), 0.25);
  transform: translateY(-1px);
  filter: brightness(1.08);
}

/* Export cancel button */
.sb-export-cancel {
  background: linear-gradient(135deg, var(--btn-grad-from) 0%, var(--btn-grad-to) 100%);
  transition: all 0.25s ease;
}

.sb-export-cancel:hover {
  background: linear-gradient(135deg, var(--btn-grad-hover-from) 0%, var(--btn-grad-hover-to) 100%);
  border-color: rgba(var(--btn-glow-rgb), 0.12);
  transform: translateY(-1px);
}

/* Copy-all button on cards */
.btn-copy-all {
  background: linear-gradient(135deg, var(--btn-grad-from) 0%, var(--btn-grad-to) 100%);
  transition: all 0.25s cubic-bezier(0.22, 1, 0.36, 1);
}

.btn-copy-all:hover {
  background: linear-gradient(135deg, var(--btn-grad-hover-from) 0%, var(--btn-grad-hover-to) 100%);
  border-color: rgba(var(--btn-glow-rgb), 0.18);
  color: var(--color-accent);
  transform: translateY(-1px);
  box-shadow: 0 2px 8px rgba(0,0,0,0.2);
}

/* Result card action buttons (Copier, Favoris, etc.) */
.btn-result {
  background: linear-gradient(135deg, var(--btn-grad-from) 0%, var(--btn-grad-to) 100%);
  transition: all 0.25s cubic-bezier(0.22, 1, 0.36, 1);
}

.btn-result:hover {
  background: linear-gradient(135deg, var(--btn-grad-hover-from) 0%, var(--btn-grad-hover-to) 100%);
  border-color: rgba(var(--btn-glow-rgb), 0.18);
  color: var(--color-accent);
  transform: translateY(-1px);
  box-shadow: 0 2px 10px rgba(0,0,0,0.2);
}

/* Ghost buttons (sidebar, admin page) */
.btn-ghost {
  background: linear-gradient(135deg, var(--btn-grad-from) 0%, var(--btn-grad-to) 100%);
  transition: all 0.25s ease;
  border: 1px solid rgba(var(--btn-glow-rgb), 0.08);
  border-radius: var(--radius-md);
}

.btn-ghost:hover {
  background: linear-gradient(135deg, var(--btn-grad-hover-from) 0%, var(--btn-grad-hover-to) 100%);
  border-color: rgba(var(--btn-glow-rgb), 0.15);
  transform: translateY(-1px);
  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}

/* Topbar action buttons (fallback) */
.topbar-action-btn {
  background: linear-gradient(135deg, var(--btn-grad-from) 0%, var(--btn-grad-to) 100%);
  transition: all 0.25s ease;
}

.topbar-action-btn:hover {
  background: linear-gradient(135deg, var(--btn-grad-hover-from) 0%, var(--btn-grad-hover-to) 100%);
  border-color: rgba(var(--btn-glow-rgb), 0.18);
  transform: translateY(-1px);
  box-shadow: 0 2px 8px rgba(0,0,0,0.2);
}

/* Location / map button on card rows */
.btn-location,
.btn-copy-field {
  transition: all 0.2s ease;
  border-radius: var(--radius-xs);
}

.btn-location:hover,
.btn-copy-field:hover {
  color: var(--color-accent);
  background: rgba(var(--color-accent-rgb), 0.08);
  transform: scale(1.1);
}

/* ========== 23. PAGINATION BUTTONS ========== */
#pagination-controls button,
.pagination-btn {
  transition: all 0.2s ease;
}

#pagination-controls button:hover:not(:disabled),
.pagination-btn:hover:not(:disabled) {
  transform: translateY(-1px);
  box-shadow: 0 2px 8px rgba(0,0,0,0.3);
}

#pagination-controls button.active,
.pagination-btn.active {
  box-shadow: 0 0 12px rgba(var(--color-accent-rgb), 0.25);
}

/* ========== 24. SIDEBAR BRAND BANNER — subtle parallax ========== */
.sb-brand-banner {
  transition: transform 0.3s ease;
}

.sb-brand-banner:hover .sb-banner-img {
  transform: scale(1.03);
  transition: transform 0.5s ease, filter 0.3s ease;
}

/* ========== 25. EMPTY STATE ENTRANCE ========== */
@keyframes emptyFloat {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-6px); }
}

.sb-empty-icon {
  animation: emptyFloat 3.5s ease-in-out infinite;
}

/* ========== 26. SCROLLBAR GLOW ========== */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

::-webkit-scrollbar-track {
  background: transparent;
}

::-webkit-scrollbar-thumb {
  background: rgba(var(--color-accent-rgb), 0.15);
  border-radius: 3px;
  transition: background 0.2s;
}

::-webkit-scrollbar-thumb:hover {
  background: rgba(var(--color-accent-rgb), 0.3);
}

/* ========== 27. RESULTS LOADING BAR ========== */
@keyframes resultsBarProgress {
  0%   { width: 0%; }
  20%  { width: 35%; }
  50%  { width: 60%; }
  80%  { width: 85%; }
  100% { width: 100%; }
}

@keyframes resultsBarShimmer {
  0%   { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

#resultsLoadingBar {
  position: sticky;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  height: 3px;
  background: rgba(var(--color-accent-rgb), 0.08);
  overflow: hidden;
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
  border-radius: 0 0 2px 2px;
}

#resultsLoadingBar.active {
  opacity: 1;
}

#resultsLoadingBar .bar-fill {
  height: 100%;
  background: linear-gradient(
    90deg,
    var(--color-accent),
    var(--color-accent-hover),
    var(--color-accent)
  );
  background-size: 200% 100%;
  border-radius: 2px;
  width: 0%;
  transition: width 0.4s ease;
  animation: resultsBarShimmer 1.2s linear infinite;
}

#resultsLoadingBar.done .bar-fill {
  width: 100% !important;
  animation: none;
  transition: opacity 0.4s ease 0.2s;
}

#resultsLoadingBar.done {
  opacity: 0;
  transition: opacity 0.5s ease 0.4s;
}

/* ========== REDUCED MOTION ========== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* Final hard stop: prevent any white hover contour inside results */
#results *:hover {
  outline: none !important;
  box-shadow: none !important;
}
#results .card:hover,
#results .result-card:hover,
#results [class*="result-card"]:hover {
  border-color: rgba(var(--color-accent-rgb), 0.06) !important;
  transform: none !important;
  filter: none !important;
}
