/* Vector/CSS visuals: sharp at any resolution (replaces the upscaled mockup photos). */

/* ---- Photography ---- */
.hero-art {
  position: absolute;
  top: -6%;
  right: 0;
  width: 74%;
  height: 112%;
  max-width: none;
  object-fit: cover;
  object-position: 60% 40%;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, rgba(0, 0, 0, 0.55) 24%, #000 52%);
  mask-image: linear-gradient(90deg, transparent 0, rgba(0, 0, 0, 0.55) 24%, #000 52%);
  translate: 0 var(--py, 0px);
  animation: kenburns 26s ease-in-out infinite alternate;
  pointer-events: none;
  will-change: transform, translate;
}

@keyframes kenburns {
  from { transform: scale(1); }
  to { transform: scale(1.06); }
}

.bg-photo {
  position: absolute;
  top: 0;
  right: 0;
  width: 62%;
  height: min(100%, 480px);
  max-width: none;
  object-fit: cover;
  pointer-events: none;
  user-select: none;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 42%), linear-gradient(180deg, #000 55%, transparent 100%);
  -webkit-mask-composite: source-in;
  mask-image: linear-gradient(90deg, transparent 0, #000 42%), linear-gradient(180deg, #000 55%, transparent 100%);
  mask-composite: intersect;
}

.bg-photo-dim { filter: brightness(0.72) saturate(1.05); }

@media (max-width: 1023px) {
  .hero-art {
    width: 100%;
    opacity: 0.4;
    -webkit-mask-image: none;
    mask-image: none;
  }

  .bg-photo { width: 100%; opacity: 0.28; }
}

[dir='rtl'] .hero-art {
  right: auto;
  left: 0;
  -webkit-mask-image: linear-gradient(270deg, transparent 0, rgba(0, 0, 0, 0.55) 24%, #000 52%);
  mask-image: linear-gradient(270deg, transparent 0, rgba(0, 0, 0, 0.55) 24%, #000 52%);
}

[dir='rtl'] .bg-photo {
  right: auto;
  left: 0;
  -webkit-mask-image: linear-gradient(270deg, transparent 0, #000 42%), linear-gradient(180deg, #000 55%, transparent 100%);
  mask-image: linear-gradient(270deg, transparent 0, #000 42%), linear-gradient(180deg, #000 55%, transparent 100%);
}

/* ---- Section backgrounds ---- */
.bg-glow {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
}

.bg-glow::before {
  content: '';
  position: absolute;
  inset: -15%;
  background:
    radial-gradient(45% 55% at 88% 12%, rgba(0, 150, 255, 0.3), transparent 70%),
    radial-gradient(30% 40% at 70% 0%, rgba(0, 229, 255, 0.16), transparent 70%);
  animation: glowDrift 16s ease-in-out infinite alternate;
}

.bg-glow::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(0, 200, 255, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0, 200, 255, 0.06) 1px, transparent 1px);
  background-size: 48px 48px;
  -webkit-mask-image: radial-gradient(ellipse 45% 55% at 90% 5%, #000, transparent 75%);
  mask-image: radial-gradient(ellipse 45% 55% at 90% 5%, #000, transparent 75%);
}

.bg-glow-light::before {
  background:
    radial-gradient(45% 55% at 88% 8%, rgba(0, 174, 255, 0.2), transparent 70%),
    radial-gradient(30% 40% at 70% 0%, rgba(0, 229, 255, 0.14), transparent 70%);
}

.bg-glow-light::after {
  background-image:
    linear-gradient(rgba(0, 120, 200, 0.08) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0, 120, 200, 0.08) 1px, transparent 1px);
}

@keyframes glowDrift {
  from { transform: translate3d(0, 0, 0) scale(1); }
  to { transform: translate3d(-3%, 4%, 0) scale(1.08); }
}

/* ---- Card headers ---- */
.card-photo-header,
.card-art {
  position: relative;
  background:
    radial-gradient(120% 95% at 88% 0%, rgba(var(--tint, 0, 174, 255), 0.38), transparent 62%),
    radial-gradient(80% 80% at 0% 100%, rgba(0, 229, 255, 0.12), transparent 70%),
    linear-gradient(135deg, #07203d, #030b17);
}

.card-photo-header::before,
.card-art::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    repeating-radial-gradient(circle at 88% 8%, transparent 0 26px, rgba(var(--tint, 0, 174, 255), 0.24) 26px 27px),
    linear-gradient(rgba(0, 200, 255, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0, 200, 255, 0.06) 1px, transparent 1px);
  background-size: auto, 26px 26px, 26px 26px;
  -webkit-mask-image: radial-gradient(ellipse 90% 90% at 80% 10%, #000, transparent 85%);
  mask-image: radial-gradient(ellipse 90% 90% at 80% 10%, #000, transparent 85%);
  transition: transform var(--transition-slow);
}

.novami-card:hover .card-photo-header::before,
.novami-card:hover .card-art::before { transform: scale(1.08); }

/* a little colour variety across a row of cards */
.novami-card:nth-child(4n + 2) { --tint: 90, 120, 255; }
.novami-card:nth-child(4n + 3) { --tint: 0, 220, 200; }
.novami-card:nth-child(4n + 4) { --tint: 60, 160, 255; }
.insight-article-card:nth-child(3n + 2) { --tint: 90, 120, 255; }
.insight-article-card:nth-child(3n + 3) { --tint: 0, 220, 200; }

/* Real photo present: drop the decorative rings and tone the photo to sit in the dark UI */
.card-photo-header:has(img)::before,
.card-art:has(img)::before { display: none; }

.card-photo-header img,
.card-art img { filter: brightness(0.82) saturate(1.05); }

/* soft top shade keeps the card number readable on bright photos */
.card-photo-header:has(img)::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(2, 9, 20, 0.6) 0%, rgba(2, 9, 20, 0) 45%);
  pointer-events: none;
}
