 .storm-layer, .effects-layer { pointer-events: none; }
.island-app.storm-calm .storm-layer { background: transparent; }

.hotspot::after {
  content: "";
  position: absolute;
  inset: 6px;
  border-radius: 14px;
  border: 1px dashed rgba(255,255,255,0.08);
  opacity: 0.8;
}

.blaze-banner { animation: bannerGlow 3.2s ease-in-out infinite; }
.blaze-banner.message-flash { animation: bannerFlash 0.8s ease-out 1; }
.hotspot.is-busy { box-shadow: 0 0 24px rgba(94, 205, 143, 0.28); }
.hotspot.is-hot { box-shadow: 0 0 26px rgba(255, 191, 0, 0.32); }

.island-app.storm-rising .storm-layer {
  background: radial-gradient(circle at 50% 0%, rgba(255,191,0,0.10), transparent 42%);
}

.island-app.storm-critical .storm-layer {
  background:
    radial-gradient(circle at 50% 0%, rgba(255,191,0,0.16), transparent 45%),
    radial-gradient(circle at 20% 12%, rgba(124,173,255,0.12), transparent 25%);
  animation: stormPulse 1.4s ease-in-out infinite;
}

.island-app.storm-break .storm-layer {
  background:
    radial-gradient(circle at 50% 0%, rgba(255,215,108,0.22), transparent 46%),
    radial-gradient(circle at 82% 14%, rgba(255,215,108,0.18), transparent 18%);
  animation: stormPulse 0.9s ease-in-out infinite;
}

.hotspot.radio-flash { animation: radioFlash 0.35s 5; }
.hotspot.vault-burst { animation: vaultBurst 1.8s ease-out; }
.hotspot.world-shock { animation: worldShock 0.9s ease-out 1; }

.lightning-bolt,
.energy-ring,
.broadcast-sweep,
.coin-burst,
.storm-scanlines {
  position: absolute;
  opacity: 0;
}

.lightning-bolt {
  width: 18%;
  height: 36%;
  top: 4%;
  filter: drop-shadow(0 0 18px rgba(194,225,255,0.55));
}

.lightning-bolt::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(235,248,255,0) 0%, rgba(235,248,255,1) 20%, rgba(149,214,255,1) 55%, rgba(235,248,255,0) 100%);
  clip-path: polygon(48% 0%, 63% 0%, 49% 34%, 66% 34%, 38% 100%, 46% 57%, 29% 57%);
}

.bolt-radio { left: 10%; }
.bolt-vault { right: 7%; }

.energy-ring {
  width: 18%;
  height: 18%;
  border-radius: 50%;
  border: 2px solid rgba(255,215,108,0.75);
  box-shadow: 0 0 24px rgba(255,215,108,0.35), inset 0 0 24px rgba(255,215,108,0.18);
}
.ring-radio { left: 13%; top: 10%; }
.ring-vault { right: 11%; top: 8%; }

.broadcast-sweep {
  inset: -10% -35%;
  background: linear-gradient(90deg, rgba(124,173,255,0) 0%, rgba(124,173,255,0.16) 48%, rgba(124,173,255,0) 100%);
  transform: translateX(-35%) rotate(-8deg);
}

.coin-burst {
  width: 24%;
  height: 28%;
  top: 8%;
  background:
    radial-gradient(circle at 18% 25%, rgba(255,210,99,0.95) 0 6px, transparent 7px),
    radial-gradient(circle at 35% 52%, rgba(255,210,99,0.95) 0 7px, transparent 8px),
    radial-gradient(circle at 62% 18%, rgba(255,210,99,0.95) 0 5px, transparent 6px),
    radial-gradient(circle at 72% 45%, rgba(255,210,99,0.95) 0 6px, transparent 7px),
    radial-gradient(circle at 48% 78%, rgba(255,210,99,0.95) 0 6px, transparent 7px),
    radial-gradient(circle at 85% 72%, rgba(255,210,99,0.95) 0 5px, transparent 6px);
  filter: drop-shadow(0 0 12px rgba(255,202,77,0.3));
}
.coin-burst-left { left: 54%; }
.coin-burst-right { right: 2%; }

.storm-scanlines {
  inset: 0;
  background: repeating-linear-gradient(180deg, rgba(255,255,255,0.05) 0 1px, rgba(255,255,255,0) 2px 6px);
  mix-blend-mode: screen;
}

.effects-layer.fx-radio-live .bolt-radio,
.effects-layer.fx-radio-live .ring-radio,
.effects-layer.fx-radio-live .broadcast-sweep {
  animation: radioFX 1.2s ease-out 1;
}

.effects-layer.fx-vault-burst .bolt-vault,
.effects-layer.fx-vault-burst .ring-vault,
.effects-layer.fx-vault-burst .coin-burst-left,
.effects-layer.fx-vault-burst .coin-burst-right {
  animation: vaultFX 1.6s ease-out 1;
}

.effects-layer.fx-storm-break .storm-scanlines,
.effects-layer.fx-storm-break .broadcast-sweep {
  animation: stormFX 1.25s ease-out 1;
}

.effects-layer.fx-world-pulse .ring-radio,
.effects-layer.fx-world-pulse .ring-vault {
  animation: pulseFX 0.9s ease-out 1;
}

@keyframes bannerGlow {
  0%, 100% { box-shadow: 0 0 0 rgba(255, 191, 0, 0); }
  50% { box-shadow: 0 0 24px rgba(255, 191, 0, 0.12); }
}

@keyframes bannerFlash {
  0% { box-shadow: 0 0 0 rgba(124,173,255,0); }
  35% { box-shadow: 0 0 36px rgba(124,173,255,0.35); }
  100% { box-shadow: 0 0 0 rgba(124,173,255,0); }
}

@keyframes stormPulse {
  0%, 100% { filter: brightness(1); }
  50% { filter: brightness(1.12); }
}

@keyframes radioFlash {
  0%,100% { transform: translate(-50%, -50%); }
  50% { transform: translate(-50%, -50%) scale(1.04); border-color: rgba(124,173,255,0.75); }
}

@keyframes vaultBurst {
  0% { transform: translate(-50%, -50%) scale(1); }
  35% { transform: translate(-50%, -50%) scale(1.08); }
  100% { transform: translate(-50%, -50%) scale(1); }
}

@keyframes worldShock {
  0% { transform: translate(-50%, -50%) scale(1); }
  45% { transform: translate(-50%, -50%) scale(1.06); }
  100% { transform: translate(-50%, -50%) scale(1); }
}

@keyframes radioFX {
  0% { opacity: 0; transform: translateX(-35%) rotate(-8deg); }
  18% { opacity: 1; }
  100% { opacity: 0; transform: translateX(35%) rotate(-8deg); }
}

@keyframes vaultFX {
  0% { opacity: 0; transform: scale(0.72) translateY(8px); }
  18% { opacity: 1; }
  100% { opacity: 0; transform: scale(1.12) translateY(-20px); }
}

@keyframes stormFX {
  0% { opacity: 0; }
  15% { opacity: 0.55; }
  100% { opacity: 0; }
}

@keyframes pulseFX {
  0% { opacity: 0; transform: scale(0.78); }
  25% { opacity: 0.85; }
  100% { opacity: 0; transform: scale(1.32); }
}

.island-app.surge-live .island-stage {
  box-shadow: 0 30px 80px rgba(0,0,0,0.45), 0 0 36px rgba(255, 176, 71, 0.18);
}

.island-app.surge-live .status-card {
  border-color: rgba(255, 184, 90, 0.18);
  background: linear-gradient(180deg, rgba(255,184,90,0.08), rgba(255,255,255,0.04));
}


.effects-layer.ambient-radio .ring-radio { opacity: .42; transform: scale(1.04); }
.effects-layer.ambient-vault .ring-vault { opacity: .36; transform: scale(1.03); }
.effects-layer.world-breathing .storm-scanlines { opacity: .18; }
.effects-layer.ambient-shimmer::after {
  content:""; position:absolute; inset:0;
  background: radial-gradient(circle at 52% 32%, rgba(255,255,255,.06), transparent 26%),
              radial-gradient(circle at 78% 66%, rgba(255,191,0,.05), transparent 20%);
  pointer-events:none; animation: islandAmbientShimmer 6.5s ease-in-out infinite;
}
@keyframes islandAmbientShimmer {
  0%,100% { opacity:.18; }
  50% { opacity:.34; }
}
.hotspot.ambient-flicker { box-shadow: 0 0 18px rgba(255,191,0,.16); }


/* Patch H: weather flash states */
.weather-flash .storm-glow { opacity: .58 !important; }
.weather-flash .cloud-front { opacity: .9 !important; }
.weather-flash .radio-beam { opacity: .65 !important; }
.weather-flash .vault-halo { opacity: .9 !important; }
.weather-flash .rain-sheet { opacity: .34 !important; }

@keyframes ghWeatherFlash {
  0%,100% { opacity: 0; }
  20% { opacity: 1; }
  40% { opacity: .2; }
  60% { opacity: .85; }
}


/* Patch I: daypart and climate intensity */
.daypart-dawn .season-wash { opacity: .18; background: linear-gradient(180deg, rgba(255,179,102,.22), rgba(255,232,174,.05)); }
.daypart-day .season-wash { opacity: .12; }
.daypart-dusk .season-wash { opacity: .2; background: linear-gradient(180deg, rgba(255,144,86,.2), rgba(122,73,150,.06)); }
.daypart-night .season-wash { opacity: .22; background: linear-gradient(180deg, rgba(92,124,255,.16), rgba(17,25,52,.08)); }

.signal-420-live .radio-beam { opacity: .72 !important; }
.signal-420-live .vault-halo { opacity: .68 !important; }
.signal-420-live .storm-glow { opacity: .3 !important; }
.effects-layer.fx-420-signal .ring-radio,
.effects-layer.fx-420-signal .broadcast-sweep,
.effects-layer.fx-420-signal .coin-burst-left {
  animation: signal420FX 1.8s ease-out 1;
}

@keyframes signal420FX {
  0% { opacity: 0; transform: scale(.88) translateY(8px); }
  22% { opacity: .95; }
  100% { opacity: 0; transform: scale(1.18) translateY(-12px); }
}
