feat: invite by link, 8-char code input, universal_code in profile
Backend:
- New InvitationLink model: token, mentor, created_at, used_by, is_banned
- Links expire after 12h, single-use, multiple active links allowed
- generate-invitation-link: creates InvitationLink (doesn't overwrite old)
- info-by-token: validates expiry/usage/ban before returning mentor info
- register-by-link: validates InvitationLink, marks used_by on registration
- Migration 0013_invitation_link_model
Frontend:
- Profile: show user's universal_code with copy button
- InviteDialog: 8 separate input boxes for code (auto-focus, paste support)
- InviteDialog: new "По ссылке" tab — generate link, copy, show expiry
- /invite/:token page: public registration page with mentor info preview
- Auto-login after invite link registration (setSession + checkUserSession)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>