/* ══════════════════════════════
   PROJECTS + PUBLICATIONS
══════════════════════════════ */
.proj-track { position: relative; background: transparent; border-radius: var(--card-radius); overflow: hidden; }
.proj-scroll {
  overflow-x: auto;
  overflow-y: hidden;
  cursor: grab;
  user-select: none;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  padding: 0;
  background: transparent !important;
  scroll-behavior: smooth;
  scroll-snap-type: x proximity;
  scroll-padding-inline: 0.25rem;
  overscroll-behavior-inline: contain;
}
.proj-scroll:active { cursor: grabbing; }
.proj-scroll::-webkit-scrollbar { display: none; }
.proj-grid { display: flex; gap: 1.25rem; width: max-content; padding: 0.35rem 0.25rem 0.7rem; }
.acad-grid { display: flex; gap: 1.25rem; width: max-content; padding: 0.35rem 0.25rem 0.7rem; }

[data-theme="light"] .proj-track,
[data-theme="light"] .proj-scroll,
[data-theme="light"] .pub-track,
[data-theme="light"] .pub-scroll {
  background: transparent;
}

[data-theme="light"] .proj-grid,
[data-theme="light"] .acad-grid,
[data-theme="light"] .pub-grid {
  padding-bottom: 0.4rem;
}

.proj-card {
  position: relative;
  width: 320px;
  min-width: 320px;
  min-height: 292px;
  border-radius: var(--card-radius);
  overflow: hidden;
  cursor: pointer;
  border: 1px solid var(--glass-border);
  background: var(--glass-bg);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  scroll-snap-align: start;
  scroll-snap-stop: always;
  transition: transform 0.38s ease, border-color 0.38s ease, box-shadow 0.38s ease;
  box-shadow: var(--glass-shadow);
}
.proj-card::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1.5px;
  background: linear-gradient(135deg, rgba(255,255,255,0.16), rgba(255,255,255,0.04) 42%, rgba(69,137,255,0.12) 100%);
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0.7;
  z-index: 3;
  pointer-events: none;
}
.proj-card::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--glass-highlight);
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  pointer-events: none;
  z-index: 4;
}
.proj-card:hover, .proj-card:focus-visible { transform: translateY(-6px); box-shadow: var(--glass-shadow-hover), 0 0 28px rgba(69,137,255,0.12); border-color: rgba(255,255,255,0.18) !important; }
.proj-card:focus-visible { outline: none; }
.proj-card-glow { display: none; }
.proj-body {
  position: relative;
  z-index: 3;
  min-height: 292px;
  padding: 1.2rem 1.15rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 1rem;
}
.proj-card-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.85rem;
  margin-bottom: 0.35rem;
}
.proj-card-icon {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: var(--accent-dim);
  border: 1px solid var(--accent-border);
  color: var(--accent);
}
.proj-card-company {
  color: var(--accent-light);
  font-size: 0.58rem;
  font-weight: 700;
  font-family: var(--font-heading) !important;
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
  text-align: right;
  max-width: 62%;
}
.proj-title { font-size: 0.78rem; font-weight: 700; font-family: var(--font-heading) !important; letter-spacing: var(--tracking-normal); text-transform: uppercase; margin-bottom: 0.5rem; color: var(--text); }
.proj-desc { font-size: 0.875rem; font-weight: 400; color: var(--text-secondary); line-height: 1.72; letter-spacing: 0.005em; }
.proj-body .tags {
  position: relative;
  z-index: 3;
  align-items: flex-start;
  gap: 0.45rem;
}
.proj-body .tag {
  background: var(--tag-bg);
  color: var(--tag-text);
}

/* ── Publications ── */
.pub-track { position: relative; background: transparent; border-radius: var(--card-radius); overflow: hidden; }
.pub-scroll {
  overflow-x: auto;
  overflow-y: hidden;
  cursor: grab;
  user-select: none;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  padding: 0;
  background: transparent !important;
  scroll-behavior: smooth;
  scroll-snap-type: x proximity;
  scroll-padding-inline: 0.25rem;
  overscroll-behavior-inline: contain;
}
.pub-scroll:active { cursor: grabbing; }
.pub-scroll::-webkit-scrollbar { display: none; }
.pub-grid { display: flex; gap: 1rem; width: max-content; padding: 0.35rem 0.25rem 0.7rem; }

.pub-card {
  position: relative;
  width: 286px;
  min-width: 286px;
  min-height: 220px;
  padding: 1rem 1rem 0.95rem;
  border-radius: var(--card-radius);
  overflow: hidden;
  text-decoration: none;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  border: 1px solid var(--glass-border);
  background: var(--glass-bg);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  scroll-snap-align: start;
  scroll-snap-stop: always;
  box-shadow: var(--glass-shadow);
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}
.pub-card::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1.5px;
  background: linear-gradient(135deg, rgba(255,255,255,0.16), rgba(255,255,255,0.04) 42%, rgba(69,137,255,0.12) 100%);
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0.7;
  z-index: 3;
  pointer-events: none;
}
.pub-card::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--glass-highlight);
  -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  pointer-events: none;
  z-index: 2;
}
.pub-card:hover, .pub-card:focus-visible { transform: translateY(-6px); border-color: rgba(255,255,255,0.18); box-shadow: var(--glass-shadow-hover), 0 0 22px rgba(69,137,255,0.1); }
.pub-card:focus-visible { outline: none; }
.pub-card-glow { display: none; }
.pub-card-top, .pub-title, .pub-link-row { position: relative; z-index: 3; }
.pub-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.9rem; margin-bottom: 1rem; }
.pub-icon { width: 2.45rem; height: 2.45rem; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center; font-size: 1.15rem; background: var(--accent-dim); border: 1px solid var(--accent-border); }
.pub-badge { display: inline-flex; align-items: center; min-height: 1.65rem; padding: 0.22rem 0.62rem; border-radius: 999px; background: color-mix(in srgb, var(--surface) 82%, transparent); border: 1px solid var(--border-strong); color: var(--text-secondary); font-family: var(--font-body) !important; font-weight: 600; font-size: 0.55rem; letter-spacing: 0.06em; text-transform: uppercase; }
.pub-title { font-size: 0.9375rem; line-height: 1.72; font-weight: 500; color: var(--text); margin: 0 0 1.1rem; letter-spacing: 0.005em; }
.pub-link-row { display: inline-flex; align-items: center; gap: 0.55rem; color: var(--accent); font-size: 0.8rem; font-weight: 500; letter-spacing: 0.01em; opacity: 0.8; transition: opacity 0.2s, color 0.2s; }
.pub-card:hover .pub-link-row, .pub-card:focus-visible .pub-link-row { opacity: 1; color: var(--accent-light); }

@media (max-width: 900px) {
  .pub-card { width: 262px; min-width: 262px; min-height: 208px; }
  .proj-card { width: 292px; min-width: 292px; }
}
@media (max-width: 540px) {
  .pub-grid, .proj-grid, .acad-grid { gap: 1rem; }
  .pub-card { width: calc(100vw - 4rem); min-width: calc(100vw - 4rem); min-height: 204px; padding: 0.95rem; }
  .pub-title { font-size: 0.84rem; line-height: 1.58; margin-bottom: 0.95rem; }
  .pub-badge { font-size: 0.58rem; padding: 0.32rem 0.58rem; }
  .proj-card { width: calc(100vw - 4rem); min-width: calc(100vw - 4rem); }
  .proj-card-head { align-items: flex-start; }
}
