# Kampana (कम्पन, tremor): rapid earthquake triage for the Himalaya and the Northeast

Product spec and methods note. Owner: Kampana module. Status: built, awaiting integrator review.

**Advisory only.** Kampana estimates shaking from an earthquake's magnitude, depth and location. It
does not measure shaking, and its estimates are uncertain by about one intensity unit. For official
earthquake parameters follow the [National Center for Seismology (NCS)](https://seismo.gov.in/) and
its event service [riseq.seismo.gov.in](https://riseq.seismo.gov.in/riseq/earthquake). For response
follow [NDMA](https://ndma.gov.in/) and the state disaster management authority. For dams, bridges
and hospitals follow the owner's engineers. After a large Andaman or Makran earthquake, follow
[INCOIS](https://incois.gov.in/) for tsunami warnings.

## What it is

After an earthquake, Kampana answers one question for road, bridge, dam and hospital teams: which
towns and which public structures sat in the strongest shaking, and in what order should engineers
reach them?

For every earthquake of magnitude 3.5 and above in the last 90 days between 5 and 38° N and 66 and
98° E, Kampana estimates the shaking at 276 Indian reference towns with a published intensity
prediction equation and shows the likely range. For the events most likely to have shaken India it
lists public bridges, dams, hydro stations and hospitals from OpenStreetMap in three inspection
tiers, with the national highway length to patrol and field checklists summarised from public
engineering guidance. It puts India's official NCS solution beside the USGS solution, adds the events
only NCS located, and checks its estimates against USGS ShakeMap wherever one is published.

| Surface | Path | Audience |
|---|---|---|
| Recent events | `/dashboard/kampana/` | district and state control rooms, road, dam and health agencies |
| Event triage | `/dashboard/kampana/event.html?id=<event id>` | inspection planners |
| Quick estimate | `/dashboard/kampana/event.html?mag=6.0&lat=27.33&lon=88.61&depth=15` | anyone with an NCS or USGS bulletin newer than the export |
| History | `/dashboard/kampana/history.html` | planners, researchers |
| Methods | `/dashboard/kampana/methods.html` | anyone checking the work |
| Product page | `/products/kampana.html` | partners, buyers, public |
| Pipeline | `cd pipeline && python3 -m trinetra.kampana run` | builds the exports |
| Command-line estimate | `python3 -m trinetra.kampana estimate --mag 6.0 --lat 26.78 --lon 92.45 --depth 34` | prints a town table, writes nothing |

## Problem

Earthquakes are frequent here. From 1 January 2016 to 21 October 2026 the USGS catalogue lists 552
earthquakes of magnitude 5 and above in the study region (about 51 a year) and 30 of magnitude 6 and
above. Most are deep or outside India, but the ones that shake Indian towns hardest strike under the
hill roads, dams and towns of the Himalaya and the Northeast: Manipur on 4 January 2016 (M6.7),
Arunachal Pradesh on 24 April 2019 (M5.9), Assam on 28 April 2021 (M6.0) and Uttarakhand on
6 October 2026 (M5.1).

India has no earthquake early warning: a PIB release of 1 April 2026 states that no proven system
exists in the country to provide one. What does exist is fast location: NCS publishes an origin,
depth and magnitude within minutes. The step after that, deciding which public structures sat in the
strongest shaking and in what order to inspect them, is done by hand. Dam owners must inspect after
an earthquake under the National Dam Safety Authority's 2024 regulations, and the Rajya Sabha
Committee on Home Affairs asked in August 2026 for denser seismic networks and sturdier
communications ([Report 261, "Disaster Management", paragraphs 4.4.12 to 4.4.14](https://bucketapi.rajyasabha.digital/public-bucket/uploads/committee/2026_08_21_committee_3339_976_6a881941b462a.pdf)).

## Users and the decision each makes

| User | Decision |
|---|---|
| Road agencies (BRO, NHIDCL, state public works departments) | which bridges and highway stretches to inspect first, and which to close until inspected |
| Dam and hydro owners | which structures sit inside the shaking area or the ICOLD screening distance |
| District and state disaster management authorities | which towns may have felt strong shaking, before field reports arrive |
| District health officers, hospital administrators | which hospitals to check for structural and lifeline damage |

## Data

| Source | Used for | Licence | Refresh |
|---|---|---|---|
| [USGS ComCat, FDSN event service](https://earthquake.usgs.gov/fdsnws/event/1/) | origin, depth, magnitude, status, PAGER alert, felt reports; 90 days at M3.5+, every year since 2016 at M4.5+ | public domain (U.S. Government work) | every run; complete past years read from the cache |
| [NCS RISEQ event list](https://riseq.seismo.gov.in/riseq/earthquake) | India's official origin, depth and magnitude; about two weeks at a time, kept in a rolling 90-day archive (`ncs.json`) | published by NCS, Ministry of Earth Sciences; no licence stated, cited as the source | every run |
| [USGS ShakeMap](https://earthquake.usgs.gov/data/shakemap/) | MMI coverage grid and contours, as an independent check | public domain | every run for up to 10 events; files are versioned |
| [GDACS](https://www.gdacs.org/) API and RSS | green, orange or red impact alerts | CC BY 4.0, European Union | every run |
| [OpenStreetMap](https://www.openstreetmap.org/copyright) via the [Overpass API](https://overpass-api.de/) | bridges, dams, hydro stations, hospitals, national highways inside India | ODbL 1.0 | per event; a query's response is reused for 7 days |
| `dashboard/data/geo/frontier_points.json` | 42 shared frontier reference towns | Trinetra | with the repository |

Nothing in Kampana is simulated (`"simulated": false` in every export).

NCS's main site, seismo.gov.in, did not answer from the build network (traffic exits from
Singapore); riseq.seismo.gov.in did. If NCS is unreachable on a run, the archive is kept as it was and
marked stale in the manifest.

## Method

### Events

- **USGS.** `format=geojson`, `minlatitude=5`, `maxlatitude=38`, `minlongitude=66`,
  `maxlongitude=98`, `eventtype=earthquake`. Recent: the last 90 days at `minmagnitude=3.5`. History:
  one query per calendar year from 2016 at `minmagnitude=4.5`. Only features of type "earthquake"
  are kept; the catalogue also lists landslides and blasts. USGS completeness in this region is
  roughly magnitude 4 to 4.5, so smaller events are often missing.
- **NCS.** The RISEQ page lists about 150 events with origin times in IST. Kampana parses it, converts
  times to UTC, keeps events of magnitude 3.5 and above in the study region and merges them into a
  rolling archive that started on 6 October 2026. An NCS event pairs with a USGS event when the
  origin times are within 30 s and the epicentres within 100 km, closest in time first, one to one.
  In the first sample the pairs differed by 0 to 7 s and 7 to 45 km. Events NCS located that USGS
  does not list are added and triaged with NCS's parameters; their ids are `ncs-<UTC origin time>`.
- **GDACS.** Alerts from the event-list API (all levels for the 90-day window, paged until the
  window start; orange and red since 2016) and the RSS feed are merged and matched to an event when
  origin times are within 120 s, epicentres within 100 km and magnitudes within 0.6.
- **Location text** ("31 km NW of Bageshwar, Uttarakhand") is measured from Kampana's own reference
  places (the 276 Indian towns plus 41 towns in neighbouring countries), not from agency labels, so
  names follow one list. NCS's own text is shown as published. For two events near Changlang in
  October 2026, NCS's text places them about 70 km from where its coordinates are; Kampana reports
  the coordinates.

### Reference towns

276 Indian towns: 234 of Kampana's own (state capitals, district headquarters and larger towns of
the Himalaya, the Northeast, the Nepal-border plains, Kutch and the islands, and the capitals and
large cities of central and peninsular India) plus 42 shared frontier towns. Coordinates are
OpenStreetMap place nodes matched by name to a hand-entered estimate and accepted only within 12 km
of it, rounded to 3 decimal places. They are public town centres, never military positions.

### Shaking model

Modified Mercalli Intensity (MMI) at each town uses the intensity prediction equation of Allen, Wald
and Worden (2012), fitted to earthquakes in active crustal regions worldwide, which include the
Himalaya and the Indo-Burma ranges. Kampana uses the hypocentral-distance form because only the
hypocentre is known in the first hours:

```
Rm    = m1 + m2 · exp(M − 5)
MMI   = c0 + c1·M + c2·ln(√(Rhyp² + Rm²))                     Rhyp ≤ 50 km
MMI   = c0 + c1·M + c2·ln(√(Rhyp² + Rm²)) + c4·ln(Rhyp / 50)    Rhyp > 50 km
sigma = s1 + s2 / (1 + (Rhyp / s3)²)

c0 = 2.085   c1 = 1.428   c2 = −1.402   c4 = 0.078
m1 = −0.209  m2 = 2.042   s1 = 0.82     s2 = 0.37   s3 = 22.9
Rhyp = √(epicentral distance² + depth²) in km; ln is the natural logarithm.
```

Each town shows the median and the 16th to 84th percentile range (median ± sigma, 0.82 to 1.19 MMI
units), clamped to I to X. Epicentral distance is the haversine great-circle distance on a sphere of
radius 6371.0088 km. The magnitude is the agency's preferred magnitude (for USGS mostly mb below 5.5
and Mww above; NCS does not state its type on the event list), used as moment magnitude. Converting
mb to Mw with published global relations moves it by a few tenths, inside the range shown.

The equation was fitted to earthquakes of moment magnitude 5.0 to 7.9 at distances under 300 km, for
intensities of II and above. Most events on the 90-day list are smaller and many towns are farther
away; those estimates are extrapolations. Kampana still shows them, because an M4 directly under a
town can be felt strongly, and the event page flags every event below M5 as indicative.

**Worked example (test `test_worked_example_bageshwar_by_hand`).** The M5.1 of 6 October 2026
(USGS us6000u0hz), 16.5 km deep, is 31.3 km from Bageshwar. Rhyp = √(31.3² + 16.5²) = 35.4 km;
Rm = −0.209 + 2.042·e^0.1 = 2.048; MMI = 2.085 + 1.428·5.1 − 1.402·ln(√(35.4² + 2.048²)) = 4.36;
sigma = 0.82 + 0.37 / (1 + (35.4 / 22.9)²) = 0.93. The page shows IV, likely III to V (3.4 to 5.3).
USGS ShakeMap version 1 shows 3.7 at Bageshwar.

**Verification.** `tests/test_kampana.py` reproduces all 42 values of the verification tables that
OpenQuake hazardlib publishes for this equation (generated from an independent Matlab
implementation, both distance forms) to within 0.0001 MMI. The browser copy used by the quick
estimate (`dashboard/kampana/kampana.js`) checks itself against 6 of those values on every visit to
the Methods page and says so if it fails.

**Not modelled.** The equation predicts shaking on an average site. Soft alluvium (the Brahmaputra
and Barak valleys, the Indo-Gangetic plain, valley basins) and ridge tops can shake harder; firm rock
less. For large earthquakes the rupture can be tens of kilometres long and run toward a town, so for
M6 and above Kampana flags towns within half the expected rupture length plus 10 km as "near fault,
may be higher", with the subsurface rupture length from Wells and Coppersmith (1994),
log10 L = −2.44 + 0.59·M. When the nearest reference town is more than 50 km away, the event page
says so and shows the estimate directly above the hypocentre.

### Event level (heuristic)

| Level | Strongest estimated shaking at a reference town or listed site | Why this edge |
|---|---|---|
| Normal | below MMI V (median under 4.5) | USGS: no damage expected below V |
| Watch | MMI V (4.5 to 5.49) | USGS ShakeCast treats intensity 5 as "damage possible" by default (Fraser, Wald and Lin 2008) |
| Warning | MMI VI (5.5 to 6.49) | USGS: strong shaking, light damage |
| Danger | MMI VII or more (6.5 and above) | USGS: very strong shaking, moderate damage or worse |

Levels use the rounded intensity the user sees. Where an infrastructure list exists, the strongest
estimate at any listed site also counts, because the epicentral area often lies between reference
towns. For a USGS event with an NCS solution the level comes from the USGS solution (to match
ShakeMap and the lists); the event page also shows the level with NCS's parameters, computed over
the same listed sites, and offers a one-click estimate with them.

### Rings

Rings on the maps are the epicentral distances at which the median falls to each rounded level (the
4.5 boundary for V, 5.5 for VI and so on, IV to VIII), found by bisection to 0.01 km. A dotted ring
marks where the 84th percentile (median + 1 sigma) still reaches 4.5: the screening area for
infrastructure.

### Which events get an infrastructure list

An event qualifies when the 84th percentile at any reference town reaches MMI V. Qualifying events
are ranked by the strongest median at a town, then by magnitude, and the top 6 get a list. Three
**replays** also get one: the catalogue events since 2016 of magnitude 5.5 and above, outside the
90-day window, whose median V area fits inside the 200 km search cap, ranked by the strongest
estimated shaking at an Indian town. They show what a damaging event's list looks like with today's
map.

### Infrastructure lists

Overpass queries are limited to OpenStreetMap's India area (`area["ISO3166-1"="IN"][admin_level=2]`):

| Kind | OpenStreetMap tags |
|---|---|
| National highway bridge | `way[bridge]` on `highway=motorway` or `trunk` (and their links), or a primary road whose `ref` carries an NH number |
| Major road bridge | `way[bridge][highway=primary]`: state highways and other major roads |
| Dam or barrage | `nwr[waterway=dam]` |
| Hydro station | `nwr[power=plant][plant:source=hydro]` |
| Hospital | `nwr[amenity=hospital]` |
| Highway corridor | `way[highway=motorway|trunk]`: length per national highway inside each circle, not listed one by one |

Bridges, hospitals and highways are searched inside the screening ring, up to 200 km. Dams and hydro
stations are searched out to the larger of that and the ICOLD Bulletin 62 magnitude-distance
screening distance (M4 within 25 km, M5 within 50 km, M6 within 80 km, M7 within 125 km, M8 within
200 km, linear in between), up to 400 km. When a search is cut short by a cap, the event page says
how far V is possible. Each event file keeps the first 400 assets by priority, and the page says
when more were found (the 2016 Manipur replay finds 1,034).

A bridge mapped in several pieces or as two carriageways counts once: ways that share a node are
pieces of one deck, and pieces on the same road (same ref or name) whose midpoints are within 150 m
are carriageways of one bridge, whose length is the longest piece. A hospital, dam or hydro station
mapped twice (a node and an outline, say) is one site when two features of the same kind are within
100 m (hospitals) or 300 m (dams and hydro stations) and at least one is unnamed, or within three
times that distance when their distinctive name words match closely (Chaukhutia and Chaukhutiya).
Highway lengths sum OpenStreetMap ways clipped to each circle, so divided highways count both
carriageways.

**Excluded before storage.** Anything tagged `military=*`, `landuse=military` or
`operator:type=military`, and anything whose name or operator names an armed force, an armed police
force or a defence establishment (pattern `MILITARY_RE` in `exposure.py`, with tests). The count of
excluded features is published; the features are not. Only whitelisted fields are kept: name, ref,
operator (dams and hydro only), operator type, beds, emergency, start date, structure, height and
capacity. Never phone numbers, e-mail addresses, websites or street addresses.

### Inspection tiers (heuristic)

| Tier | Bridges and highways | Dams, hydro stations, hospitals |
|---|---|---|
| Tier 1, inspect first | median MMI VII or more | median MMI VI or more |
| Tier 2, inspect soon | median MMI VI | median MMI V |
| Tier 3, check | median MMI V, or the 84th percentile reaches V | the 84th percentile reaches V, or inside the ICOLD screening distance |

Dams, hydro stations and hospitals move up one level because a failure has larger consequences or
because the facility is needed for the response. For dams, ShakeCast's default "damage likely"
threshold is VIII (Fraser, Wald and Lin 2008); tier 1 at VI is deliberately earlier. Within a tier,
stronger estimated shaking comes first, then shorter distance. Tiers ignore vulnerability (span, age,
design, height), which OpenStreetMap rarely records; owners' registers should add it.

### Checklists

Each event page carries field checklists for five asset types, written by Trinetra as short summaries
of public guidance, with links:

| Checklist | Based on |
|---|---|
| Bridges on national highways and major roads | INDOT/Purdue JTRP handbook for post-earthquake safety evaluation of bridges and roads (FHWA/IN/JTRP-2000/30); Kentucky Transportation Center post-earthquake field manual (KTC-06-30); IRC:SP:35 (bridge inspection and maintenance); IRC:SP:114 (seismic design of road bridges) |
| Dams, barrages and hydro stations | NDSA Inspection, Instrumentation, Seismic Data, Risk Assessment and Evaluation of Specified Dam Regulations, 2024; CWC Guidelines for Safety Inspection of Dams, 2018; ICOLD Bulletin 62 (1988); Fraser, Wald and Lin (2008) on ShakeCast for dam inspections |
| Hospitals | ATC-20-1 field manual, 2nd edition (2005); WHO Hospital Safety Index guide, 2nd edition (2015); NDMA guidelines on hospital safety (2016) |
| Hill roads and national highway corridors | IRC:SP:48 Hill Road Manual; the INDOT/Purdue handbook; NDMA guidelines on landslides and snow avalanches (2009) |
| Towns and public buildings | ATC-20-1; NDMA guidelines on the management of earthquakes (2007) |

The checklists open with inspector safety (work in pairs, expect aftershocks, stay off slopes and out
of gorges while aftershocks continue, record time-stamped photos and positions). They do not replace
the owner's manuals or an engineer's assessment.

### Check against USGS ShakeMap

For up to 10 events per run with a published ShakeMap (events with lists first, then the largest),
Kampana downloads the MMI coverage grid and contours of the current ShakeMap version, samples the
grid at every reference town by bilinear interpolation, and compares its own median wherever
ShakeMap shows III or more. ShakeMap adds site amplification from topographic slope and any
recordings and felt reports, so where the two differ ShakeMap is usually closer.

In the 21 October 2026 export, across 119 town and event pairs from 4 events, Kampana's median minus
ShakeMap averages −0.10 MMI with a root-mean-square difference of 0.51, and 96% agree within one
unit. Four events are a small sample, and differences grow on soft soil. The Methods page shows the
figures for the current export.

### History statistics

- **Zones.** Ten latitude-longitude boxes named after ranges and provinces (Hindu Kush and Pamir,
  Sulaiman and Kirthar ranges, Karakoram and Western Himalaya, Central Himalaya, Eastern Himalaya,
  Tibetan Plateau, Northeast and Indo-Burma ranges, Myanmar central belt, Andaman and Nicobar arc,
  Kutch), plus a catch-all for the plains, peninsula and seas. They are for reporting only and are
  not a hazard zonation. For design use the BIS seismic zone map (IS 1893 Part 1) in force: the 2016
  edition places the Northeast, Kutch, the Andaman and Nicobar Islands and much of the Himalaya in
  Zone V. A 2025 revision that proposed a new Zone VI for the Himalayan arc was reported withdrawn
  in March 2026 ([VisionIAS summary of The Economic Times, 7 March 2026](https://visionias.in/current-affairs/upsc-daily-news-summary/article/2026-03-07/the-economic-times/environment/bis-revokes-new-seismic-map-with-high-risk-zone-vi));
  check with BIS before relying on either.
- **Completeness magnitude.** Mc is the most populated 0.1-magnitude bin plus 0.2 (maximum curvature
  with the Woessner and Wiemer 2005 correction), never below 4.5.
- **b-value.** The Aki (1965) maximum-likelihood estimate with Utsu's binning correction,
  b = log10(e) / (mean M − (Mc − 0.05)), and the Shi and Bolt (1982) standard error, reported where at
  least 50 events reach Mc. a = log10 N(M ≥ Mc) + b·Mc, so the fitted yearly rate at or above M is
  10^(a − b·M) divided by the span in years.
- **Rates** are observed counts divided by the span in years. Counts include aftershocks, so one
  large earthquake can dominate a year (Myanmar, March 2025).

The catalogue mixes magnitude types (mb, Mww and others), so b-values describe this catalogue rather
than a hazard model.

## Outputs

All under `dashboard/data/kampana/`, each under 1.5 MB, coordinates as decimal degrees, times as
ISO-8601 UTC with `Z`. Pages show times in IST with UTC beside them where it matters.

| File | Contents |
|---|---|
| `manifest.json` | provenance, files, stale flags, request ledger, NCS archive start |
| `events.json` | 90-day events with triage (towns as compact rows), NCS and GDACS matches, list summaries, replays, zones and the ShakeMap check summary |
| `event/<id>.json` | per-event asset list, highway lengths, map lines, ShakeMap samples and contours; only for events with a list or a ShakeMap |
| `towns.json` | the 276 reference towns as rows (index used by `events.json`) |
| `history.json` | 2016 onwards M4.5+ events, zone table, per-year and per-month counts, depth histogram, frequency-magnitude data, b-values, largest events, GDACS orange and red alerts |
| `ncs.json` | the rolling NCS archive, read back on the next run |
| `checklists.json` | checklists, inspector safety notes and their sources |

## Pipeline

```
cd pipeline
python3 -m trinetra.kampana run                     # fetch, compute and export
python3 -m trinetra.kampana run --offline           # rebuild from pipeline/cache/kampana/
python3 -m trinetra.kampana run --refresh-history   # refetch every history year
python3 -m trinetra.kampana run --no-overpass       # skip infrastructure lists
python3 -m trinetra.kampana estimate --mag 6.0 --lat 26.78 --lon 92.45 --depth 34
cd .. && python3 -m pytest tests/test_kampana.py -q # offline tests
```

Network etiquette: User-Agent `TrinetraResearch/0.3 (+https://trinetrahq.com) KAMPANA earthquake
triage` (Overpass refuses default library agents), connect timeout 10 s and read timeout 30 s (longer
for Overpass and the yearly USGS queries), a minimum interval between requests to the same host,
retries with backoff on network errors and 5xx, a long pause and one retry for Overpass on 429, and
a public Overpass mirror when the main instance is busy. Every response is cached under
`pipeline/cache/kampana/` (gitignored) with its URL and retrieval time. Complete history years,
versioned ShakeMap files and week-old Overpass responses are read from the cache, so a routine run
makes 30 to 50 requests, most of them GDACS pages.

Failure policy: a failed fetch never destroys the last good export. If the recent USGS query fails
with no cache, nothing is written. A failed history year, GDACS, NCS or Overpass request falls back to
the cached response or the previous export and is marked stale in `manifest.json`.

## Tests

`tests/test_kampana.py`, offline, with recorded responses in `tests/fixtures/kampana/`:

- the intensity equation against all 42 OpenQuake verification values (both distance forms), the
  Bageshwar worked example by hand, the ground-motion conversion against the ShakeMap legend, ring
  radii and their inverse, rupture length;
- geodesy, location text and the reference towns (no duplicates, inside the study region,
  OSM-snapped, a town near every part of the region);
- USGS, NCS (HTML), GDACS (API and RSS) and ShakeMap parsers, event pairing and alert matching;
- triage levels and edges, rings, site-raised levels, the near-fault flag and replay selection;
- Overpass parsing, the military exclusion pattern (including civil "base hospitals" that must stay),
  field whitelisting (contact and address tags never stored), bridge and hospital merging, highway
  lengths and tiers;
- b-value against a worked example and a synthetic Gutenberg-Richter catalogue, frequency-magnitude,
  monthly and depth counts, and zone statistics;
- the cached HTTP client (fresh cache reused, stale fallback, no cache raises);
- export shape and the manifest, built offline from fixtures, including NCS archive gaps (the writer
  refuses any file over 1.5 MB).

## Limits and failure modes

- Early magnitudes and locations change. Agencies revise solutions for hours to days; Kampana shows the
  solution as retrieved, with its status and time.
- NCS and USGS can differ by a few tenths of magnitude and tens of kilometres. The event page shows
  both; for India, NCS is official.
- Point-source distances understate shaking near long ruptures (M6.5 and above). Use ShakeMap when it
  is published.
- No site amplification, topography, landslides or liquefaction in the estimate. Hill slopes may fail
  at lower shaking than buildings.
- OpenStreetMap is incomplete and uneven in border districts: many bridges, small dams and hospitals
  are not mapped, and some tags are wrong. An empty list does not mean nothing needs inspection.
- Tiers ignore vulnerability, because span, age and design are rarely mapped.
- The site is static and refreshed when the pipeline runs. For an event newer than the export, the
  quick estimate gives town estimates, rings and checklists in the browser; lists need a pipeline run.
- NCS's list covers about two weeks; Kampana's archive of it starts on 6 October 2026, so events only
  NCS located are complete from that date.
- Events in neighbouring countries are shown because their shaking reaches India. Kampana lists
  infrastructure only inside India and does not estimate shaking at towns abroad.

## Safeguards (doctrine)

- **Events, places and conditions only.** Kampana holds earthquakes, towns and public structures.
  It holds no data about people.
- **Public infrastructure only.** Military and armed-police sites are excluded before storage, and no
  military positions are used as reference towns.
- **Safety first.** Every page states that it is advisory, gives each estimate's source, time and
  likely range, and names NCS, NDMA, the state disaster management authority and the asset owner.
  Heuristics (levels, tiers) are labelled as heuristics.
- **Every number has a source.** Every panel has a provenance line; the Methods page lists each source
  with its licence and retrieval time from `manifest.json`.

## Shared change requests

- `dashboard/app.css` caps `canvas` at `max-width: 100%`, which collapses Leaflet's canvas renderer
  (it draws in a zero-width pane). `kampana.css` exempts `.leaflet-container canvas`; the shared rule
  could do the same.
- In the optional Day appearance, the shared status chip's 15% tint over a panel leaves text contrast
  at 4.1 to 4.4 to 1; `kampana.css` uses a lighter tint there. A shared fix would help every module.

## References

- Aki, K. (1965). Maximum likelihood estimate of b in the formula log N = a − bM and its confidence
  limits. Bulletin of the Earthquake Research Institute 43, 237–239.
- Allen, T. I., Wald, D. J. and Worden, C. B. (2012). Intensity attenuation for active crustal
  regions. Journal of Seismology 16, 409–433. https://doi.org/10.1007/s10950-012-9278-7
- Applied Technology Council (2005). ATC-20-1 Field Manual: Postearthquake Safety Evaluation of
  Buildings, 2nd edition. https://www.atcouncil.org/atc-20
- Central Water Commission (2018). Guidelines for Safety Inspection of Dams.
  https://cwc.gov.in/sites/default/files/Safety%20inspection%20of%20dams.pdf
- Fraser, W. A., Wald, D. J. and Lin, K.-W. (2008). Using ShakeMap and ShakeCast to prioritize
  post-earthquake dam inspections. Geotechnical Earthquake Engineering and Soil Dynamics IV, ASCE.
  https://doi.org/10.1061/40975(318)183
- ICOLD (1988). Bulletin 62: Inspection of dams following earthquakes, guidelines.
- Indian Roads Congress. IRC:SP:35 (bridge inspection and maintenance), IRC:SP:48 (Hill Road Manual),
  IRC:SP:114 (seismic design of road bridges, 2018). https://www.irc.nic.in/
- National Dam Safety Authority (2024). Inspection, Instrumentation, Seismic Data, Risk Assessment and
  Evaluation of Specified Dam Regulations. https://ndsa.gov.in/
- NDMA guidelines: Management of Earthquakes (2007), Management of Landslides and Snow Avalanches
  (2009), Hospital Safety (2016). https://ndma.gov.in/
- Shi, Y. and Bolt, B. A. (1982). The standard error of the magnitude-frequency b value. BSSA 72(5),
  1677–1687.
- Wells, D. L. and Coppersmith, K. J. (1994). New empirical relationships among magnitude, rupture
  length, rupture width, rupture area, and surface displacement. BSSA 84(4), 974–1002.
- Woessner, J. and Wiemer, S. (2005). Assessing the quality of earthquake catalogues. BSSA 95(2),
  684–698.
- Worden, C. B., Gerstenberger, M. C., Rhoades, D. A. and Wald, D. J. (2012). Probabilistic
  relationships between ground-motion parameters and Modified Mercalli intensity in California. BSSA
  102(1), 204–221. https://doi.org/10.1785/0120110156
- World Health Organization (2015). Hospital Safety Index: Guide for Evaluators, 2nd edition.
  https://www.who.int/publications/i/item/9789241548984
- USGS. The Modified Mercalli Intensity scale.
  https://www.usgs.gov/programs/earthquake-hazards/modified-mercalli-intensity-scale
- OpenQuake hazardlib verification tables for Allen, Wald and Worden (2012), generated from an
  independent Matlab implementation:
  https://github.com/gem/oq-engine/tree/master/openquake/hazardlib/tests/gsim/data/a12ipe

## Changelog

- **1.0 (21 Oct 2026).** First release: 90-day events from USGS with NCS solutions and NCS-only
  events, town estimates with uncertainty, levels and rings, infrastructure lists for six recent
  events and three replays, checklists, ShakeMap check, ten-year history by zone, quick estimate.
