Login verification request expiry logic is inverted

Bug Description

In internal/graphql/login.go:109-121, when checking email verification request expiry:

  • When ExpiresAt > Now (NOT expired), the code deletes the verification request
  • When expired (ExpiresAt <= Now), it blocks the user with "email verification pending"

This is backwards — it should block the user when the verification hasn't expired yet, and re-send when it has expired.

Impact

HIGH — Valid (non-expired) verification requests get deleted, and expired ones block the user permanently.

Fix

Swap the logic — return "email verification pending" when NOT expired, delete and re-send when expired.