/* ============================================================
   TRAC Bursa · Contest Track — Public supplemental styles
   Vuexy front-pages (light, #000068) tabanına eklenen İMZA
   dokunuşları: monospace çağrı işaretleri, ince dalga aksanı,
   sade QSO haritası. Marka diline saygılı, ölçülü.
   ============================================================ */

:root { --tb-navy: #000068; }

/* ---- Monospace çağrı işareti ---- */
.callsign-mono {
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--tb-navy);
}
.callsign-hero { font-size: clamp(2rem, 6vw, 3.6rem); line-height: 1; }

/* Çağrı işareti INPUT'u: koyu (bg-primary kart içinde beyaza dönmesin) */
input.callsign-mono {
  color: var(--tb-navy) !important;
  background-color: #fff !important;
  -webkit-text-fill-color: var(--tb-navy);
}
input.callsign-mono::placeholder { color: #9a98b8 !important; -webkit-text-fill-color: #9a98b8; opacity: 1; }
.cs-cursor { color: var(--bs-primary); animation: tb-blink 1.3s steps(1) infinite; }

/* ---- Waveform aksanı ---- */
.wave-line { display: block; width: 100%; max-width: 360px; height: 34px; }
.wave-line path {
  fill: none; stroke: var(--bs-primary); stroke-width: 2; opacity: 0.65;
  stroke-dasharray: 6 0;
  animation: tb-wave 7s linear infinite;
}

/* ---- Sade QSO haritası (light tema) ---- */
.qso-map { width: 100%; height: auto; display: block; }
.qso-map .ring    { fill: none; stroke: rgba(0,0,104,0.13); stroke-width: 1; }
.qso-map .bearing { stroke: rgba(0,0,104,0.07); stroke-width: 1; }
.qso-map .arc {
  fill: none; stroke: var(--bs-primary); stroke-width: 1.4; opacity: 0.5;
  stroke-dasharray: 600; stroke-dashoffset: 600;
  animation: tb-draw 2.4s ease forwards;
}
.qso-map .node { fill: var(--bs-primary); }
.qso-map .node-pulse { fill: none; stroke: var(--bs-primary); stroke-width: 1; opacity: 0; animation: tb-ripple 2.8s ease-out infinite; }
.qso-map .origin { fill: #e8364f; }
.qso-map .node-lbl { fill: #8a88ad; font-family: 'JetBrains Mono', monospace; font-size: 11px; letter-spacing: 0.04em; }

/* ---- Sayaçlar ---- */
.stat-count { font-variant-numeric: tabular-nums; }

/* ---- İnce grid arka plan (hero) ---- */
.tb-grid-bg {
  position: relative;
}
.tb-grid-bg::before {
  content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image:
    linear-gradient(rgba(0,0,104,0.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0,0,104,0.04) 1px, transparent 1px);
  background-size: 38px 38px;
  mask-image: radial-gradient(circle at 70% 20%, #000 0%, transparent 70%);
}
.tb-grid-bg > * { position: relative; z-index: 1; }

/* ---- Etkinlik kartı çağrı işareti vurgusu ---- */
.ev-callsign { font-family: 'JetBrains Mono', monospace; font-weight: 600; letter-spacing: 0.04em; }

@keyframes tb-blink  { 0%,50%{opacity:1} 51%,100%{opacity:0.2} }
@keyframes tb-wave   { to { stroke-dashoffset: -240; } }
@keyframes tb-draw   { to { stroke-dashoffset: 0; } }
@keyframes tb-ripple { 0%{ r:4; opacity:.55 } 100%{ r:22; opacity:0 } }

@media (prefers-reduced-motion: reduce) {
  .wave-line path, .qso-map .arc, .qso-map .node-pulse, .cs-cursor { animation: none !important; }
  .qso-map .arc { stroke-dashoffset: 0; }
}
