/* Dashboard GIS region data, administrative seams, status signals, and map animations. */

.tech-region__code {
  font-family: var(--font-base);
  paint-order: stroke;
  stroke: var(--alpha-deep-010828-96);
  stroke-width: 3px;
  stroke-linejoin: round;
  text-shadow: 0 0 10px var(--alpha-white-16);
}

.tech-map__regions {
  isolation: isolate;
}

.tech-map__parcel-fabric {
  pointer-events: none;
  mix-blend-mode: screen;
  opacity: 0.54;
}

.tech-map__parcel-fabric-line {
  fill: transparent;
  stroke: color-mix(in srgb, var(--color-map-land-infra) 24%, transparent);
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 0.28;
  opacity: 0.22;
  vector-effect: non-scaling-stroke;
}

.tech-map__parcel-fabric-line--primary {
  stroke: color-mix(in srgb, var(--color-map-land-infra) 28%, transparent);
  stroke-width: 0.32;
  opacity: 0.2;
}

.tech-map__admin-boundaries {
  pointer-events: none;
  isolation: isolate;
}

.tech-map__admin-boundaries-aura,
.tech-map__admin-boundaries-trace {
  pointer-events: none;
}

.tech-map__admin-boundary {
  --admin-boundary-aura: var(--color-map-coast-glow);
  --admin-boundary-trace: var(--color-map-inner-line);
  --admin-boundary-ion: var(--color-map-coast-inner);
  --admin-boundary-bloom: var(--color-map-coast-glow);
  fill: transparent;
  stroke-linecap: butt;
  stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
}

.tech-map__admin-boundary--aura {
  stroke: var(--admin-boundary-aura);
  stroke-opacity: 0.18;
  stroke-width: 1.74;
  filter:
    blur(0.45px)
    drop-shadow(0 0 4px color-mix(in srgb, var(--admin-boundary-aura) 24%, transparent))
    drop-shadow(0 0 9px color-mix(in srgb, var(--admin-boundary-bloom) 14%, transparent));
  mix-blend-mode: screen;
}

.tech-map__admin-boundary--trace {
  stroke: var(--admin-boundary-trace);
  stroke-opacity: 0.68;
  stroke-width: 0.68;
  filter:
    drop-shadow(0 0 2.4px color-mix(in srgb, var(--admin-boundary-trace) 24%, transparent))
    drop-shadow(0 0 6px color-mix(in srgb, var(--admin-boundary-aura) 18%, transparent));
  mix-blend-mode: screen;
}

.tech-map__admin-boundary--status-processing {
  --admin-boundary-aura: var(--color-map-region-processing);
  --admin-boundary-trace: var(--color-map-region-processing-ion);
  --admin-boundary-ion: var(--color-map-region-processing-core);
  --admin-boundary-bloom: var(--color-map-region-processing-bloom);
}

.tech-map__admin-boundary--status-rejected {
  --admin-boundary-aura: var(--color-map-region-rejected);
  --admin-boundary-trace: var(--color-map-region-rejected-ion);
  --admin-boundary-ion: var(--color-map-region-rejected-core);
  --admin-boundary-bloom: var(--color-map-region-rejected-bloom);
}

.tech-map__admin-boundary--status-completed {
  --admin-boundary-aura: var(--color-map-region-completed);
  --admin-boundary-trace: var(--color-map-region-completed-ion);
  --admin-boundary-ion: var(--color-map-region-completed-core);
  --admin-boundary-bloom: var(--color-map-region-completed-bloom);
}

.tech-map__admin-boundary--status-processing.tech-map__admin-boundary--aura,
.tech-map__admin-boundary--status-rejected.tech-map__admin-boundary--aura,
.tech-map__admin-boundary--status-completed.tech-map__admin-boundary--aura {
  stroke: var(--admin-boundary-bloom);
  stroke-opacity: 0.34;
  stroke-width: 2.72;
  filter: blur(0.52px) drop-shadow(0 0 6px color-mix(in srgb, var(--admin-boundary-bloom) 46%, transparent)) drop-shadow(0 0 13px color-mix(in srgb, var(--admin-boundary-aura) 28%, transparent)) drop-shadow(0 0 20px color-mix(in srgb, var(--admin-boundary-bloom) 12%, transparent));
  mix-blend-mode: screen;
}

.tech-map__admin-boundary--status-processing.tech-map__admin-boundary--trace,
.tech-map__admin-boundary--status-rejected.tech-map__admin-boundary--trace,
.tech-map__admin-boundary--status-completed.tech-map__admin-boundary--trace {
  stroke: color-mix(in srgb, var(--color-map-coast-inner) 62%, var(--admin-boundary-ion) 38%);
  stroke-opacity: 0.94;
  stroke-width: 0.86;
  stroke-dasharray: none;
  filter: url(#ionizedMicroTurbulence) drop-shadow(0 0 3px color-mix(in srgb, var(--color-map-coast-inner) 62%, transparent)) drop-shadow(0 0 7px color-mix(in srgb, var(--admin-boundary-ion) 48%, transparent)) drop-shadow(0 0 14px color-mix(in srgb, var(--admin-boundary-bloom) 28%, transparent));
  mix-blend-mode: screen;
}

.tech-map__admin-boundary--status-processing.tech-map__admin-boundary--aura {
  animation: statusAuraPulse 3s ease-in-out infinite;
}

.tech-map__admin-boundary--status-processing.tech-map__admin-boundary--trace {
  animation: statusTracePulse 2.8s ease-in-out infinite;
}

.tech-region__parcel {
  fill: transparent;
  stroke: transparent;
  pointer-events: none;
}

.tech-region--base .tech-region__parcel {
  fill: transparent;
  stroke: transparent;
}

.tech-region__data-wash {
  fill: var(--region-color);
  fill-opacity: 1;
  stroke: transparent;
  pointer-events: none;
  mix-blend-mode: screen;
  filter: drop-shadow(0 0 7px color-mix(in srgb, var(--region-color) 14%, transparent));
}

.tech-region__status-lumen {
  fill: var(--region-color);
  fill-opacity: 0.066;
  stroke: transparent;
  pointer-events: none;
  mix-blend-mode: screen;
  filter: blur(0.75px) drop-shadow(0 0 10px color-mix(in srgb, var(--region-color) 24%, transparent));
  animation: none;
}

.tech-region--status-processing .tech-region__data-wash {
  fill: url(#stateSurfaceProcessing);
}

.tech-region--status-rejected .tech-region__data-wash {
  fill: url(#stateSurfaceRejected);
}

.tech-region--status-completed .tech-region__data-wash {
  fill: url(#stateSurfaceCompleted);
}

.tech-region--status-completed .tech-region__status-lumen {
  fill-opacity: 0.06;
}

.tech-region--status-rejected .tech-region__status-lumen {
  fill-opacity: 0.066;
}

.tech-region--status-processing .tech-region__status-lumen {
  fill-opacity: 0.094;
  filter: blur(0.84px) drop-shadow(0 0 13px color-mix(in srgb, var(--color-map-region-processing) 34%, transparent));
  animation: regionStatusLumen 3.2s ease-in-out infinite;
}

.tech-region--data-warm .tech-region__data-wash {
  filter: drop-shadow(0 0 9px color-mix(in srgb, var(--region-color) 20%, transparent));
}

.tech-region--data-hot .tech-region__data-wash {
  filter: drop-shadow(0 0 12px color-mix(in srgb, var(--region-color) 28%, transparent));
}

.tech-region--has-data .tech-region__parcel {
  fill: color-mix(in srgb, var(--color-map-land-ocean) 84%, var(--region-color) 16%);
  fill-opacity: 0.28;
  stroke: transparent;
  filter: drop-shadow(0 0 5px color-mix(in srgb, var(--color-map-land-abyss) 48%, transparent));
}

.tech-region--priority .tech-region__parcel {
  stroke: transparent;
}

.tech-region--priority:not(.tech-region--has-data) .tech-region__parcel {
  fill: transparent;
}

.tech-region__active-aura {
  fill: var(--color-map-region-processing);
  fill-opacity: 0.044;
  stroke: transparent;
  mix-blend-mode: screen;
  filter: blur(0.65px) drop-shadow(0 0 12px color-mix(in srgb, var(--color-map-region-processing) 42%, transparent));
  animation: processingAuraPulse 2.6s ease-in-out infinite;
}

.tech-region__code {
  fill: var(--color-text);
  font-size: var(--text-xl);
  font-weight: 900;
}

.tech-region__code--small {
  fill: var(--color-map-region-label);
  font-size: var(--text-xs);
  font-weight: 900;
  opacity: 0.34;
  stroke-width: 2.8px;
}

.tech-region--critical { --region-color: var(--color-danger); }
.tech-region--high { --region-color: var(--color-yellow); }
.tech-region--medium { --region-color: var(--color-mint); }
.tech-region--low { --region-color: var(--color-cyan); }
.tech-region--good { --region-color: var(--color-mint); }
.tech-region--base { --region-color: var(--color-cyan); }
.tech-region--status-processing { --region-color: var(--color-map-region-processing); }
.tech-region--status-rejected { --region-color: var(--color-map-region-rejected); }
.tech-region--status-completed { --region-color: var(--color-map-region-completed); }
.tech-region--status-none { --region-color: var(--color-map-region-unmapped); }

.tech-region--base .tech-region__code--small {
  fill: var(--color-map-region-label);
  opacity: 0.3;
}

.tech-region--has-data .tech-region__code--small {
  fill: var(--color-text);
  opacity: 0.86;
}

.tech-region--processing .tech-region__code--small {
  fill: var(--color-white);
  opacity: 1;
}

.tech-region__signal {
  transform-box: fill-box;
  transform-origin: center;
}

.tech-region__signal-value {
  transform-box: fill-box;
  transform-origin: center;
}

.tech-region__signal-core {
  fill: var(--region-color);
  stroke: var(--alpha-deep-010828-95);
  stroke-width: 1.35;
  filter: drop-shadow(0 0 9px var(--region-color));
}

.tech-region__signal-code,
.tech-region__signal-count {
  font-family: var(--font-base);
  paint-order: stroke;
  stroke: var(--alpha-deep-010828-98);
  stroke-width: 3px;
  stroke-linejoin: round;
}

.tech-region__signal-code {
  fill: var(--color-text);
  font-size: var(--text-xs);
  font-weight: 900;
  opacity: 0.92;
}

.tech-region__signal-count {
  fill: var(--color-white);
  font-size: var(--text-lg);
  font-weight: 900;
  filter: drop-shadow(0 0 3px var(--alpha-white-55));
}

.tech-region__signal--completed .tech-region__signal-count {
  fill: var(--color-map-region-completed);
}

.tech-region__signal--rejected .tech-region__signal-core {
  fill: var(--color-map-region-rejected);
  filter: drop-shadow(0 0 10px var(--color-map-region-rejected));
}

.tech-region__signal--rejected .tech-region__signal-count {
  fill: var(--color-map-region-rejected);
}

.tech-region__signal--processing .tech-region__signal-core {
  fill: var(--color-map-region-processing);
  filter: drop-shadow(0 0 12px var(--color-map-region-processing));
  transform-box: fill-box;
  transform-origin: center;
}

.tech-region__signal--processing .tech-region__signal-count {
  fill: var(--color-white);
  font-size: var(--text-lg);
}

.tech-map__unmapped-title {
  fill: var(--color-white);
  font-family: var(--font-base);
  font-size: var(--text-lg);
  font-weight: 900;
  opacity: 1;
  paint-order: stroke;
  stroke: var(--alpha-deep-00724-98);
  stroke-linejoin: round;
  stroke-width: 5.2px;
  text-transform: uppercase;
  filter: drop-shadow(0 0 4px var(--alpha-black-50));
}

.tech-region--unmapped .tech-region__parcel {
  fill: var(--color-map-land-veil-soft);
  fill-opacity: 0.28;
  stroke: transparent;
  filter: none;
}

.tech-region--unmapped .tech-region__data-wash {
  fill-opacity: 0.9;
}

.tech-region--unmapped .tech-region__status-lumen {
  fill-opacity: 0.058;
}

.tech-region--unmapped .tech-region__active-aura {
  display: none;
}

.tech-region--unmapped.tech-region--processing .tech-region__parcel {
  fill: var(--color-map-region-processing);
  fill-opacity: 0.07;
  stroke: transparent;
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--color-map-region-processing) 32%, transparent));
  animation: processingRegionPulse 2.6s ease-in-out infinite;
}

.tech-region--unmapped.tech-region--processing .tech-region__active-aura {
  display: block;
  fill: var(--color-map-region-processing);
  fill-opacity: 0.018;
  stroke: transparent;
  filter: drop-shadow(0 0 6px color-mix(in srgb, var(--color-map-region-processing) 26%, transparent));
  animation: processingAuraPulse 2.6s ease-in-out infinite;
}

.tech-region--unmapped .tech-region__signal-core {
  stroke-width: 1.6;
}

.tech-region__signal--unmapped .tech-region__signal-count {
  font-size: var(--text-lg);
}

.tech-region--unmapped.tech-region--processing .tech-region__signal-core {
  animation: unmappedProcessingPulse 2.2s ease-in-out infinite;
}

@keyframes processingAuraPulse {
  0%, 100% { fill-opacity: 0.025; }
  50% { fill-opacity: 0.08; }
}

@keyframes processingRegionPulse {
  0%, 100% { fill-opacity: 0.08; }
  50% { fill-opacity: 0.18; }
}

@keyframes regionStatusLumen {
  0%, 100% { opacity: 0.72; }
  50% { opacity: 1; }
}

@keyframes statusAuraPulse {
  0%, 100% { opacity: 0.76; }
  50% { opacity: 1; }
}

@keyframes statusTracePulse {
  0%, 100% { opacity: 0.78; }
  50% { opacity: 1; }
}

@keyframes unmappedProcessingPulse {
  0%, 100% {
    opacity: 0.86;
    transform: scale(1);
    filter: drop-shadow(0 0 9px var(--color-map-region-processing));
  }
  50% {
    opacity: 1;
    transform: scale(1.28);
    filter: drop-shadow(0 0 18px var(--color-map-region-processing));
  }
}
