:where([class^="ri-"])::before {
  content: "\f3c2";
}
body {
  font-family: 'Inter', sans-serif;
}
.hero-bg {
  background-size: cover;
  background-position: center;
  position: relative;
}
.hero-overlay {
  background: linear-gradient(135deg, rgba(30, 64, 175, 0.9) 0%, rgba(59, 130, 246, 0.8) 50%, rgba(255, 255, 255, 0.1) 100%);
}
.page-hidden {
  display: none;
}
.page-visible {
  display: block;
}

html { scroll-behavior: smooth; }

.nav-scrolled { background-color: rgba(255, 255, 255, 0.95) !important; }


.group:hover .group-hover\:opacity-0 {
opacity: 0;
}
.group:hover .group-hover\:opacity-100 {
opacity: 1;
}

a {
	font-weight: bold;
}

a:hover {
	color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
}

.bg-primary:hover{
	background: white !important;
	border: 2px solid rgb(37 99 235 / var(--tw-bg-opacity, 1)) !important;
	color: rgb(37 99 235 / var(--tw-bg-opacity, 1)) !important;
}

/* ---- 3D hero helpers ---- */
#acm-sphere canvas {
  display: block;
}

/* speech bubble w/ arrow; matches Tailwind card look */
.speech-bubble {
  border: 1px solid rgba(0,0,0,0.06);
  border-radius: 12px;
  background: #ffffff;
  position: absolute;
  transform: translate(-50%, -120%); /* position above the point by default */
  z-index: 5;
}
.speech-bubble::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -8px;
  transform: translateX(-50%);
  width: 0; height: 0;
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-top: 8px solid #ffffff;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,0.05));
}

/* respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  #acm-sphere[data-reduced-motion="true"] { opacity: 0.95; }
}

/* speech bubble above the point */
.speech-bubble {
  border: 1px solid rgba(0,0,0,0.06);
  border-radius: 12px;
  background: #fff;
  position: absolute;
  transform: translate(-50%, -120%); /* center X, above Y */
  z-index: 5;
  pointer-events: none; /* don’t block the canvas */
}
.speech-bubble::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -8px;
  transform: translateX(-50%);
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-top: 8px solid #ffffff;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,0.05));
}


/* --- 2D hero graph helpers --- */
.speech-bubble {
  border: 1px solid rgba(0,0,0,0.06);
  border-radius: 12px;
  background: #ffffff;
  transform: translate(-50%, -120%);
  z-index: 5;
}
.speech-bubble::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -8px;
  transform: translateX(-50%);
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-top: 8px solid #ffffff;
  filter: drop-shadow(0 1px 1px rgba(0,0,0,0.05));
}

#graph-svg .edge { opacity: 0; transition: opacity 300ms ease; }
#graph-svg .edge.visible { opacity: 0.95; }
#graph-svg .edge-label { opacity: 0; transition: opacity 300ms ease; }
#graph-svg .edge-label.visible { opacity: 1; }
\
#graph-svg .edge {
  cursor: default !important;
  transition: none !important;
}

/* respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  #graph-svg .edge, #graph-svg .edge-label,
  #graph-svg .user, #graph-svg .subject { transition: none !important; }
}

/* Publications hero particle text */
#pub-hero-particles{
  background-image:
    radial-gradient(1200px 600px at 85% 0%, rgba(59,130,246,0.06), transparent 60%),
    radial-gradient(900px 450px at 5% 100%, rgba(14,165,233,0.08), transparent 60%);
}

@media (prefers-reduced-motion: reduce) {
  #pub-hero-particles { background-image: none; }
}

/* Projects: Data Stream Tunnel */
#projects-tunnel {
  background-image:
    radial-gradient(900px 450px at 80% 10%, rgba(37, 99, 235, 0.10), transparent 60%),
    radial-gradient(700px 350px at 10% 90%, rgba(244, 63, 94, 0.12), transparent 60%);
}

@media (prefers-reduced-motion: reduce) {
  #projectsTunnelCanvas { display: none; }
  #projects-tunnel { background-image: none; }
}

/* Media grid tweaks */
.media-card:hover img {
  transform: scale(1.02);
}
.media-card img {
  transition: transform 300ms ease;
}

/* Publications: micro-interactions */
.publication-card:hover {
  box-shadow: 0 10px 28px rgb(17 24 39 / 8%);
}
.pub-abstract {
  transition: height 220ms ease, opacity 200ms ease;
}
.line-clamp-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* --- Team/Alumni skeleton loader --- */
.skeleton-card {
  @apply bg-white rounded-xl shadow-sm overflow-hidden;
  position: relative;
  height: 340px;
}
.skeleton-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(226,232,240,0.6) 25%, rgba(203,213,225,0.6) 37%, rgba(226,232,240,0.6) 63%);
  background-size: 400% 100%;
  animation: shimmer 1.25s infinite;
}
@keyframes shimmer {
  0% { background-position: 100% 0; }
  100% { background-position: -100% 0; }
}

/* optional image polish */
.team-card img {
  transition: transform .35s ease, filter .35s ease;
}
.team-card:hover img {
  transform: scale(1.03);
  filter: saturate(1.05);
}

/* Optional: project gallery hover */
#proj-gallery-grid figure img { transition: transform 250ms ease; }
#proj-gallery-grid figure:hover img { transform: scale(1.02); }




