/* V1.52 · Global connectivity, syncing and recovery feedback. */
.network-status-indicator {
  --network-color: #9fe8bc;
  --network-line: rgba(126, 233, 171, .42);
  --network-bg: rgba(8, 29, 22, .9);
  position: fixed !important;
  z-index: 9994 !important;
  top: max(76px, calc(env(safe-area-inset-top) + 62px)) !important;
  right: max(12px, env(safe-area-inset-right)) !important;
  left: auto !important;
  bottom: auto !important;
  min-width: 76px !important;
  min-height: 28px !important;
  display: grid !important;
  grid-template-columns: 8px auto !important;
  grid-template-rows: auto auto !important;
  align-items: center !important;
  column-gap: 7px !important;
  row-gap: 1px !important;
  margin: 0 !important;
  padding: 5px 9px !important;
  box-sizing: border-box !important;
  overflow: hidden !important;
  border: 1px solid var(--network-line) !important;
  border-radius: 999px !important;
  color: var(--network-color) !important;
  background: linear-gradient(155deg, color-mix(in srgb, var(--network-bg) 88%, white 12%), var(--network-bg)) !important;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 5px 14px rgba(0,0,0,.28), 0 0 12px color-mix(in srgb, var(--network-color) 13%, transparent) !important;
  opacity: .76 !important;
  transform: none !important;
  pointer-events: none !important;
  transition: opacity 180ms ease, border-color 180ms ease, background-color 180ms ease !important;
}

.network-status-indicator > i {
  position: relative !important;
  grid-column: 1 !important;
  grid-row: 1 / span 2 !important;
  width: 7px !important;
  height: 7px !important;
  display: block !important;
  border: 1px solid currentColor !important;
  border-radius: 50% !important;
  background: currentColor !important;
  box-shadow: 0 0 7px currentColor !important;
}

.network-status-indicator > span {
  grid-column: 2 !important;
  grid-row: 1 !important;
  color: var(--network-color) !important;
  -webkit-text-fill-color: var(--network-color) !important;
  font: 900 10px/1.05 system-ui, "Microsoft YaHei", sans-serif !important;
  letter-spacing: .04em !important;
  white-space: nowrap !important;
  text-shadow: 0 1px 2px rgba(0,0,0,.8) !important;
}

.network-status-indicator > small {
  grid-column: 2 !important;
  grid-row: 2 !important;
  max-width: 230px !important;
  overflow: hidden !important;
  color: rgba(229, 241, 245, .68) !important;
  -webkit-text-fill-color: rgba(229, 241, 245, .68) !important;
  font: 700 8px/1.1 system-ui, "Microsoft YaHei", sans-serif !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}

.network-status-indicator[data-network-status="syncing"] {
  --network-color: #bdefff;
  --network-line: rgba(105, 207, 241, .52);
  --network-bg: rgba(10, 37, 52, .93);
  opacity: .94 !important;
}

.network-status-indicator[data-network-status="syncing"] > i {
  background: transparent !important;
  border-top-color: transparent !important;
  animation: network-sync-turn 760ms linear infinite !important;
}

.network-status-indicator[data-network-status="reconnecting"] {
  --network-color: #ffe0a0;
  --network-line: rgba(235, 177, 79, .56);
  --network-bg: rgba(56, 38, 14, .94);
  opacity: .96 !important;
}

.network-status-indicator[data-network-status="reconnecting"] > i {
  animation: network-reconnect-cadence 920ms ease-in-out infinite !important;
}

.network-status-indicator[data-network-status="offline"] {
  --network-color: #ffc7bc;
  --network-line: rgba(238, 91, 76, .62);
  --network-bg: rgba(63, 20, 22, .96);
  opacity: 1 !important;
}

.network-status-indicator[data-network-status="offline"] > i {
  background: transparent !important;
  box-shadow: inset 0 0 0 2px currentColor, 0 0 8px currentColor !important;
}

.network-status-indicator[data-network-status="recovered"] {
  --network-color: #c6ffe0;
  --network-line: rgba(101, 238, 158, .66);
  --network-bg: rgba(9, 54, 31, .96);
  opacity: 1 !important;
}

.network-status-indicator[data-network-status="recovered"] > i {
  animation: network-recovered-punctuation 620ms cubic-bezier(.14,.82,.18,1) both !important;
}

.network-status-indicator.network-status-changed {
  animation: network-status-change 260ms ease-out both !important;
}

body.maintenance-mode .network-status-indicator {
  display: none !important;
}

@keyframes network-sync-turn { to { transform: rotate(360deg); } }
@keyframes network-reconnect-cadence { 0%,100% { opacity: .5; } 50% { opacity: 1; } }
@keyframes network-recovered-punctuation { 0% { transform: scale(.6); opacity: .35; } 50% { transform: scale(1.35); opacity: 1; } 100% { transform: scale(1); opacity: 1; } }
@keyframes network-status-change { 0% { filter: brightness(.82); } 55% { filter: brightness(1.18); } 100% { filter: brightness(1); } }

@media (max-width: 720px) {
  .network-status-indicator {
    top: max(5px, env(safe-area-inset-top)) !important;
    right: auto !important;
    left: 50% !important;
    min-width: 64px !important;
    min-height: 20px !important;
    grid-template-columns: 6px auto !important;
    grid-template-rows: auto !important;
    gap: 5px !important;
    padding: 3px 7px !important;
    transform: translateX(-50%) !important;
  }

  .network-status-indicator > i {
    grid-row: 1 !important;
    width: 5px !important;
    height: 5px !important;
  }

  .network-status-indicator > span {
    font-size: 8px !important;
  }

  .network-status-indicator > small {
    display: none !important;
  }

  .network-status-indicator.network-status-changed {
    animation-name: network-status-change-mobile !important;
  }
}

@keyframes network-status-change-mobile {
  0% { filter: brightness(.82); transform: translateX(-50%) scale(.96); }
  55% { filter: brightness(1.18); transform: translateX(-50%) scale(1.03); }
  100% { filter: brightness(1); transform: translateX(-50%) scale(1); }
}

@media (prefers-reduced-motion: reduce) {
  .network-status-indicator,
  .network-status-indicator > i,
  .network-status-indicator.network-status-changed {
    animation-duration: 90ms !important;
    animation-iteration-count: 1 !important;
  }
}
