diff --git a/changelog.json b/changelog.json
index 7b4927f..11a1fbd 100644
--- a/changelog.json
+++ b/changelog.json
@@ -6,13 +6,13 @@
"Cluster: \"Hide worked\" no longer hides a spot that is a new prefix, county, grid or park in an entity already worked.",
"DX Cluster: a spot lifetime can be set — 5, 10, 15 minutes or your own value — after which spots leave the list and the band maps.",
"Call lookup: QRZ.com now fills Name with the first name only, and optionally with the operator nickname instead.",
- "Entry form: Name, Band, Mode and Country are narrower, and a State field sits between QTH and the locator."
+ "Entry form: a narrower left column, State beside the locator, and a new line with County, CQ, ITU and DXCC."
],
"fr": [
"Cluster : « Masquer les contactés » ne masque plus un spot qui est un nouveau préfixe, comté, carré ou parc dans une contrée déjà faite.",
"Cluster DX : on peut fixer une durée de vie des spots — 5, 10, 15 minutes ou une valeur libre — au-delà de laquelle ils quittent la liste et les band maps.",
"Recherche d indicatif : QRZ.com remplit désormais Nom avec le seul prénom, et au choix avec le surnom de l opérateur.",
- "Saisie : Nom, Bande, Mode et Pays sont plus étroits, et un champ État s intercale entre QTH et le locator."
+ "Saisie : colonne de gauche plus étroite, État à côté du locator, et une nouvelle ligne Comté, CQ, ITU et DXCC."
]
},
{
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 46558f5..d919b50 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -4448,6 +4448,41 @@ export default function App() {
onChange={(e) => setDetails((d) => ({ ...d, state: e.target.value.toUpperCase() }))} />
);
+ // County beside State: the lookup fills QTH, State, County and the locator
+ // together, and they are read together. Wider than State because a county name
+ // is a name — "St. Tammany Parish", not a code.
+ // The row Comment/Note freed by moving onto one line: county, zones and the
+ // ADIF entity number. All four are filled by the lookup and were previously
+ // only visible after opening a tab — which is the wrong place for values an
+ // operator wants to SEE are right before pressing Log.
+ //
+ // A numeric field stores undefined when cleared, not 0: zero is a real DXCC
+ // number for "no entity" and a real answer for a zone, so an empty box must
+ // stay empty rather than assert something.
+ const num = (v: string): number | undefined => {
+ const s = v.replace(/[^0-9]/g, '');
+ return s === '' ? undefined : parseInt(s, 10);
+ };
+ const geoDetailRow = (
+