diff --git a/README.md b/README.md
index 45f3487..12d3add 100644
--- a/README.md
+++ b/README.md
@@ -5,34 +5,18 @@
-
Fe (iron) + enigma — we solve the geo puzzles.
+Fe (iron) + enigma, we solve the geo puzzles.
-A companion app that mostly automates **IRON NEST: Heavy Turret Simulator** -for you. Screenshot the game's typewriter orders and it solves the geo -puzzle and the trajectory math, handing you ready-to-fire commands — -elevation, azimuth, number of powder charges. Screenshot the field log and -it picks up kills and newly-spotted units automatically. You can also plan -strikes of your own, picking a shell for the blast radius you need. Pure -screen-reading — no game files touched, no input injected. +A companion app that mostly automates **IRON NEST: Heavy Turret Simulator** for you. Screenshot the game's typewriter orders and it solves the geo puzzle and the trajectory math, handing you ready-to-fire commands: elevation, azimuth, number of powder charges. Screenshot the field log and it picks up kills and newly-spotted units automatically. You can also plan strikes of your own, picking a shell for the blast radius you need. Pure screen-reading, no game files touched, no input injected.  ## What it does -- **Reads orders, solves the geometry.** Paste/screenshot the in-game - typewriter text and it parses absolute grid refs and relative - bearing/distance descriptions, then resolves everything into map - coordinates — chained clues ("Bearing 293 from Alpha") included. The - map shows its work: the actual bearing lines/circles behind each - resolved position. When a description is genuinely ambiguous (two - intersections), both candidates are shown instead of guessing. -- **Calculates the shot.** Every resolved target gets a live firing card: - elevation, azimuth, and minimum powder charge, computed from the Nest. -- **Tracks the battle.** A second screenshot of the field log marks units - destroyed and folds in newly-spotted contacts, merging with what's - already known instead of duplicating it. -- **Plans strikes.** Drop a strike anywhere on the map and pick a shell to - preview its blast radius before committing. +- **Reads orders, solves the geometry.** Paste/screenshot the in-game typewriter text and it parses absolute grid refs and relative bearing/distance descriptions, then resolves everything into map coordinates, chained clues ("Bearing 293 from Alpha") included. The map shows its work: the actual bearing lines/circles behind each resolved position. When a description is genuinely ambiguous (two intersections), both candidates are shown instead of guessing. +- **Calculates the shot.** Every resolved target gets a live firing card: elevation, azimuth, and minimum powder charge, computed from the Nest. +- **Tracks the battle.** A second screenshot of the field log marks units destroyed and folds in newly-spotted contacts, merging with what's already known instead of duplicating it. +- **Plans strikes.** Drop a strike anywhere on the map and pick a shell to preview its blast radius before committing. ## Run @@ -40,14 +24,8 @@ screen-reading — no game files touched, no input injected. ./run.sh ``` -GTK apps with this app ID are single-instance — if a run gets killed -uncleanly it can leave a zombie registered on D-Bus and silently no-op the -next launch. If `./run.sh` seems to do nothing, `pgrep -af ironnest_assist` -and kill any stragglers first. +GTK apps with this app ID are single-instance, if a run gets killed uncleanly it can leave a zombie registered on D-Bus and silently no-op the next launch. If `./run.sh` seems to do nothing, `pgrep -af ironnest_assist` and kill any stragglers first. ## Stack -GTK4 + libadwaita (PyGObject) for the UI, Tesseract (via pytesseract) for -OCR, Pillow/numpy for preprocessing. Details on the coordinate system, -OCR formats, and solver internals live in code comments (`solver.py`, -`ocr.py`, `models.py`) rather than here. +GTK4 + libadwaita (PyGObject) for the UI, Tesseract (via pytesseract) for OCR, Pillow/numpy for preprocessing. Details on the coordinate system, OCR formats, and solver internals live in code comments (`solver.py`, `ocr.py`, `models.py`) rather than here.