cf68bc848f
Safari (iPadOS/iOS) blocks SameSite=Strict cookies on the initial top-level navigation when it considers the request cross-site (links from messengers, email, QR codes). The CSRF cookie was therefore never set on first visit, and the subsequent login POST failed with 403 "CSRF failed". Switch the CSRF cookie to SameSite=Lax — this is the OWASP recommended default and matches industry practice. The auth (session) cookie keeps SameSite=Strict, since it is only issued after a successful first-party login POST and needs the stricter binding.