/* Map feedback uses authoritative, role-filtered events. SVG dimensions below
   are map units, so badges, outlines and text scale together while zooming. */
.rk-map-feedback { pointer-events: none; }
.rk-cont { opacity: .75; animation: rk-cont-reveal var(--p-motion-duration-300) ease-out; }
.rk-badge--preview .rk-badge__bg { stroke-dasharray: 9 5; }
/* Continent geography and personal conquest progress. Unknown enemy ownership
   uses the same subdued continent tint as every other unowned territory. */
.rk-map--continents .rk-t:not(.is-blocked) { fill-opacity: .3; opacity: 1; filter: none; stroke-width: 2.5; }
.rk-map--continents .rk-t.is-region-owned { fill-opacity: .92; }
.rk-map--continents .rk-t.is-region-selected { stroke-width: 5; }
.rk-map--continents .rk-t.is-blocked { opacity: .6; }
.rk-map--continents .rk-border { stroke-width: 2; opacity: .55; }
.rk-map--continents .rk-routes { opacity: .7; }
.rk-region-edge { fill: var(--p-color-text); opacity: .95; }
.rk-region-chart { cursor: pointer; outline: none; }
.rk-region-chart__focus { fill: transparent; stroke: transparent; stroke-width: 5; }
.rk-region-chart:focus-visible .rk-region-chart__focus,
.rk-region-chart.is-selected .rk-region-chart__focus { fill: color-mix(in srgb, var(--p-color-bg) 55%, transparent); stroke: var(--p-color-region); }
.rk-region-chart__disc { fill: var(--p-color-bg); fill-opacity: .92; stroke: var(--p-color-region); stroke-width: 3; }
.rk-region-chart__track { fill: none; stroke: var(--p-color-region); stroke-opacity: .4; }
.rk-region-chart__progress { fill: none; stroke: var(--p-color-text); stroke-linecap: butt; }
.rk-region-chart.is-complete .rk-region-chart__progress { stroke: var(--p-color-region); }
.rk-region-chart text { pointer-events: none; font-family: var(--p-font-family-body); font-weight: var(--p-font-weight-bold); fill: var(--p-color-text); paint-order: stroke fill; stroke: var(--p-color-bg); stroke-linejoin: round; }
.rk-region-chart__bonus { stroke-width: 7; }
.rk-region-chart__name { stroke-width: 14; }
.rk-region-chart__count { stroke-width: 10; }
.rk-event-glow {
  pointer-events: none;
  fill: currentColor;
  fill-opacity: .15;
  stroke: currentColor;
  stroke-width: 9px;
  stroke-linejoin: round;
  paint-order: stroke;
  filter: drop-shadow(0 0 16px currentColor);
  animation: rk-event-beat .65s ease-out both;
}
.rk-event-glow--attack { color: var(--p-color-text-warning); }
.rk-event-glow--defend { color: var(--p-color-text-critical); }
.rk-event-glow--gain { color: var(--p-color-text-success); }
.rk-event-glow--move { color: var(--p-color-bg-fill-info); }
.rk-troop-delta {
  font-family: var(--p-font-family-body);
  font-weight: var(--p-font-weight-bold);
  paint-order: stroke fill;
  stroke: var(--p-color-bg);
  stroke-width: 9px;
  stroke-linejoin: round;
  filter: drop-shadow(0 3px 5px var(--p-color-bg));
  animation: rk-troop-rise 1.6s ease-out both;
  fill: var(--rk-owner-color, var(--p-color-text));
}
@keyframes rk-cont-reveal { from { opacity: 0; } }
@keyframes rk-event-beat {
  0% { opacity: 0; fill-opacity: 0; }
  22% { opacity: 1; fill-opacity: .3; }
  58% { opacity: .65; fill-opacity: .1; }
  78% { opacity: 1; fill-opacity: .2; }
  100% { opacity: 0; fill-opacity: 0; }
}
@keyframes rk-troop-rise {
  0% { opacity: 0; transform: translateY(10px); }
  14%, 65% { opacity: 1; }
  100% { opacity: 0; transform: translateY(-44px); }
}
@media (prefers-reduced-motion: reduce) {
  .rk-event-glow { animation: none; opacity: .9; fill-opacity: .1; }
  .rk-troop-delta { animation: none; }
}
