I fixed `parseTimeOfDay`, and `npm test` now passes.

**The bug:** it converted 12-hour times with `(hour + (PM ? 12 : 0)) % 24`, which gets the 12 o'clock hour backwards. "12:05 AM" came out as 725 instead of 5, and "12:30 PM" came out as 30 instead of 750.

**The fix:** I changed that one line in `src/parse-time-of-day.mjs` to `(hour % 12) + (PM ? 12 : 0)`. Now 12 AM is hour 0, 12 PM is hour 12, and every other PM hour gets 12 added, as the contract says.

The rest of the function already matched the contract, so nothing else changed. I also checked inputs the test doesn't cover, and they behave as the contract requires:
- Lowercase am/pm works.
- "11:59 PM" gives 1439.
- These all return null: "0:30 AM", "13:00 PM", "24:00", "9:00", surrounding whitespace, a trailing newline, an empty string, and non-string values.

I didn't touch anything else, including `protected/` and `notes/`.