@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap");

* { margin: 0; padding: 0; box-sizing: border-box; }

body {
  background: #06060f;
  height: 100vh;
  overflow: hidden;
  font-family: "JetBrains Mono", "Courier New", monospace;
}

.container {
  position: relative;
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
}

.card-stream {
  position: absolute;
  width: 100vw;
  height: 220px;
  display: flex;
  align-items: center;
  overflow: visible;
}

.card-line {
  display: flex;
  align-items: center;
  gap: 48px;
  white-space: nowrap;
  will-change: transform;
}

/* ── Card wrapper ── */
.card-wrapper {
  position: relative;
  width: 220px;
  height: 220px;
  flex-shrink: 0;
}

.card {
  position: absolute;
  top: 0; left: 0;
  width: 220px;
  height: 220px;
  border-radius: 12px;
  overflow: hidden;
}

/* ── LEFT: footage card (image layer) ── */
.card-normal {
  background: #000;
  z-index: 2;
  position: relative;
}

.card-media {
  width: 100%; height: 100%;
  object-fit: cover;
  border-radius: 12px;
  filter: brightness(0.85) contrast(1.1) saturate(0.9);
  display: block;
}

/* Film strip overlay on footage cards */
.card-normal::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    /* top film holes */
    radial-gradient(circle 4px at 20px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 52px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 84px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 116px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 148px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 180px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 212px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 244px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 276px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 308px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 340px 10px, rgba(0,0,0,0.9) 3px, transparent 3px),
    /* bottom film holes */
    radial-gradient(circle 4px at 20px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 52px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 84px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 116px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 148px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 180px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 212px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 244px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 276px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 308px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    radial-gradient(circle 4px at 340px 210px, rgba(0,0,0,0.9) 3px, transparent 3px),
    /* top & bottom dark bands */
    linear-gradient(to bottom, rgba(0,0,0,0.7) 0px, rgba(0,0,0,0.7) 20px, transparent 20px),
    linear-gradient(to top,    rgba(0,0,0,0.7) 0px, rgba(0,0,0,0.7) 20px, transparent 20px);
  border-radius: 12px;
  z-index: 3;
  pointer-events: none;
}

/* Filename badge */
.card-normal::after {
  content: attr(data-filename);
  position: absolute;
  bottom: 6px; left: 10px; right: 10px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 9px;
  color: rgba(255,255,255,0.45);
  text-align: center;
  z-index: 4;
  pointer-events: none;
  letter-spacing: 0.04em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Clip: footage stays on RIGHT of scanner (before it crosses) */
.card-normal {
  clip-path: inset(0 calc(100% - var(--left-pct, 100%)) 0 0);
}

/* ── RIGHT: data output layer (revealed by scanner) ── */
.card-data {
  background: rgba(4, 16, 12, 0.97);
  border: 1px solid rgba(52, 211, 153, 0.15);
  z-index: 1;
  position: absolute;
  top: 0; left: 0;
  border-radius: 12px;
  overflow: hidden;
}

.card-data::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(52,211,153,0.04) 0%, transparent 60%);
  pointer-events: none;
}

/* Clip: data revealed on LEFT of scanner (after it crosses) */
.card-data {
  clip-path: inset(0 0 0 var(--left-pct, 100%));
}

.data-content {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
  color: rgba(52, 211, 153, 0.85);
  font-family: "JetBrains Mono", "Courier New", monospace;
  font-size: 11px;
  line-height: 14px;
  overflow: hidden;
  white-space: pre;
  padding: 10px 12px;
  -webkit-mask-image: linear-gradient(to right,
    rgba(0,0,0,1) 0%, rgba(0,0,0,0.9) 40%,
    rgba(0,0,0,0.6) 70%, rgba(0,0,0,0.2) 100%);
  mask-image: linear-gradient(to right,
    rgba(0,0,0,1) 0%, rgba(0,0,0,0.9) 40%,
    rgba(0,0,0,0.6) 70%, rgba(0,0,0,0.2) 100%);
}

/* Scan flash effect */
.scan-effect {
  position: absolute; top: 0; left: 0;
  width: 100%; height: 100%;
  background: linear-gradient(90deg, transparent, rgba(99,102,241,0.35), transparent);
  animation: scanEffect 0.5s ease-out;
  pointer-events: none;
  z-index: 5;
}

@keyframes scanEffect {
  0%   { transform: translateX(-100%); opacity: 0; }
  40%  { opacity: 1; }
  100% { transform: translateX(100%); opacity: 0; }
}

/* ── Canvases ── */
#particleCanvas {
  position: absolute;
  top: 50%; left: 0;
  transform: translateY(-50%);
  width: 100vw; height: 250px;
  z-index: 0;
  pointer-events: none;
}

#scannerCanvas {
  position: absolute;
  top: 50%; left: -3px;
  transform: translateY(-50%);
  width: 100vw; height: 300px;
  z-index: 15;
  pointer-events: none;
}
