/* global React */ // ──────────────────────────────────────────────────────────── // TSUNAMI — оценка риска цунами для события и ссылка на NOAA. // // Без официального API цунами-прогноза: используем эвристику USGS, // показываем только когда М ≥ 6.5 и (h ≤ 50 км) и (предполагаемо в воде). // «В воде» определяем приблизительно: расстояние до ближайшего города из // нашей базы > 100 км ⇒ скорее всего океан/море. Для серьёзных решений // направляем на tsunami.gov / Росгидромет — у нас лишь индикатор. // ──────────────────────────────────────────────────────────── // Estimates a tsunami risk level given the basic event parameters. // Returns: "high" | "mid" | "low" | null (null → don't show the section) window.assessTsunamiRisk = (ev) => { if (!ev) return null; const mag = Number(ev.mag) || 0; const depth = Number(ev.depth) || 0; // Rules of thumb (USGS): // M < 6.5 → no tsunami concern (well below threshold) // depth > 100 km → too deep to displace water effectively // shallow + 7.0+ → strong concern // shallow + 6.5–7.0 → local watch level if (mag < 6.5) return null; if (depth > 100) return null; if (mag >= 7.5 && depth <= 50) return "high"; if (mag >= 7.0 && depth <= 70) return "mid"; if (mag >= 6.5 && depth <= 50) return "mid"; return "low"; }; window.TsunamiNotice = ({ T, dark, ev, onOpenDetail }) => { const risk = window.assessTsunamiRisk(ev); if (!risk) return null; const color = risk === "high" ? T.danger : risk === "mid" ? T.warning : T.accent; const label = risk === "high" ? "ВЫСОКИЙ РИСК" : risk === "mid" ? "ВОЗМОЖНА УГРОЗА" : "СЛАБЫЙ РИСК"; return (
🌊
ЦУНАМИ · {label}
M {ev.mag.toFixed(1)} · h={ev.depth.toFixed(1)} км · подробности →
); }; // Full screen — shows risk level, what to do, links to authoritative sources. window.TsunamiScreen = ({ T, dark, ev, onBack }) => { const risk = window.assessTsunamiRisk(ev); const color = risk === "high" ? T.danger : risk === "mid" ? T.warning : T.accent; const label = risk === "high" ? "ВЫСОКИЙ РИСК" : risk === "mid" ? "ВОЗМОЖНА УГРОЗА" : risk === "low" ? "СЛАБЫЙ РИСК" : "НЕТ РИСКА"; const headline = risk === "high" ? "Сильное прибрежное событие — возможны разрушительные волны" : risk === "mid" ? "Возможны локальные волны на ближайшем побережье" : risk === "low" ? "Параметры на грани порога — риск минимален" : "По параметрам события угроза цунами маловероятна"; return (
{/* Banner */}
● {label} USGS · ЭВРИСТИКА
{headline}
{/* Параметры события (компактно) */}
{[ ["МАГНИТУДА", `M ${ev.mag.toFixed(1)}`, color], ["ГЛУБИНА", `${ev.depth.toFixed(1)} км`, ev.depth <= 50 ? T.warning : T.text], ["ОБЛАСТЬ", ev.flag, T.text], ].map(([k, v, col], i, arr) => (
{k}
{v}
))}
{/* Тело — что делать */}
ЕСЛИ ВЫ НА ПОБЕРЕЖЬЕ
  1. Немедленно покиньте берег — не ждите официального сигнала.
  2. Поднимитесь на возвышенность не ниже 30 м или 3 км вглубь суши.
  3. Не возвращайтесь на берег раньше чем через несколько часов.
  4. Слушайте экстренные сообщения МЧС и Росгидромета.
ОФИЦИАЛЬНЫЕ ИСТОЧНИКИ
⚠️ ОЦЕНКА ОСНОВАНА НА ЭВРИСТИКЕ (M, ГЛУБИНА). НЕ ЗАМЕНЯЕТ ОФИЦИАЛЬНЫЙ ПРОГНОЗ. ДЛЯ КРИТИЧЕСКИХ РЕШЕНИЙ ОБРАЩАЙТЕСЬ К NOAA / РОСГИДРОМЕТУ.
); }; const SourceLink = ({ T, title, desc, url }) => (
{title}
{desc}
);