/* Loading screen and its SVG ECG trace */
.loader {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: linear-gradient(315deg, #f6f6f6 0%, #e8e6f1 80%);
  transition: opacity 1.1s ease;
  will-change: transform, opacity;
}
.loader.is-gone {
  opacity: 0;
  pointer-events: none;
}
.loader-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 34px;
  transform: translateY(-7vh);
}
.loader-title {
  font-family: var(--font);
  font-weight: 900;
  font-size: 2.2rem;
  letter-spacing: 0.34em;
  color: var(--petal-blue);
  padding-left: 0.34em; /* offset trailing letter-spacing */
  opacity: 0;
  transform: translateY(8px);
  animation: loader-title-in 0.6s cubic-bezier(0.1, 0.9, 0.2, 1) 0.1s forwards;
}
@keyframes loader-title-in {
  to { opacity: 1; transform: translateY(0); }
}
.loader-ecg {
  width: 100vw;
  height: 26vh;
}
.loader-ecg svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.ecg-track {
  fill: none;
  stroke: rgba(108, 144, 196, 0.16);
  stroke-width: 2;
}
.ecg-line {
  fill: none;
  stroke-width: 3.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.ecg-blue {
  stroke: #5ab0ff;
  filter: drop-shadow(0 0 5px rgba(90, 176, 255, 0.55));
}
.ecg-pulse {
  stroke: #8c6ce0;
  filter: drop-shadow(0 0 7px rgba(140, 108, 224, 0.7));
}
