Quarter-star ratings save again
If your Star rating steps setting was quarter stars, a 4.25 or 4.75 rating could not be saved — silently from the Rate what you finished row, and as Could not save beside the stars on a book page. Half and whole stars were unaffected, and a quarter value written into ratings.json by hand always displayed correctly, because only the write path checked the step. The ratings API now accepts 0.25–5 in quarter steps; halves and whole stars are a subset of that, so nothing that used to be accepted is rejected.
Thanks to the reporter for the detail that isolated it — "editing the file directly displays fine" is what pointed straight at the write path.
Import your ratings from StoryGraph or Goodreads
New Import ratings control in Settings → Theme → Book Page. Export your books from StoryGraph or Goodreads as CSV, pick the file, and every match is shown before anything is saved.
Rows are matched against your own libraries in confidence order:
- ISBN-13 / ISBN-10 or Amazon ASIN. ISBNs are indexed in both forms, so a 10-digit ISBN in the file finds a 13-digit one in your library and vice versa.
- Title and author, compared after folding accents, punctuation, subtitles and leading articles. Authors are matched on surname in any order, because both sides list translators and co-authors inconsistently.
- A scored close match, for the rows an export leaves without any identifier at all.
The dry run separates what matched (and why), what is worth a second look, what you have already rated, and what is not in your library. Uncertain rows carry a picker over the runner-up candidates plus an explicit skip, and a title that exists in two libraries is always sent for review rather than guessed. Books you rated yourself are held back unless you tick overwrite; written reviews come along if you want them; quarter-star ratings keep their exact value. Only libraries that take part in ratings are searched.
The customizations pop-up no longer shifts when a dropdown opens
Opening a dropdown near the bottom of the settings pop-up moved the whole panel. Three separate causes behind one symptom:
- The flip-up decision was made against the viewport instead of the box that actually clips, so the menu opened downward into the dialog's edge and was cut off.
- An absolutely positioned menu that overflows a scroller extends that scroller's scroll range — so scrolling down to see the cut-off part and then closing the menu clamped the scroll position and jumped the panel by the menu's overhang.
- In Firefox, rewriting the dropdown button's label with the same text made the panel's multi-column layout re-balance, nudging every card.
The menu is now a body-level fixed layer that lives outside the panel: it cannot be clipped by any ancestor, it changes no scroll geometry, and it never mutates the panel's DOM. It also prefers to open on whichever side keeps it inside the dialog.
Also
- The ratings endpoint accepts a bulk write, so importing an export is one write instead of one per book. It can only ever write the caller's own ratings.
- New strings are in English and Polish; the other 38 languages fall back to English as elsewhere in the settings panel.
ghcr.io/rodzalendo/nanohive-abs-theme:2.0.4 · :latest
Theme stamp core3.118.0_enh6.178.1_book1.42.0_early1.6.0_njs1.13.0
Upgrading: the njs module changed in this release, so recreate the container (a plain restart keeps the old module). Already-open browser tabs run the previous inlined theme until reloaded.