When a user has both student and missionary roles, common items
(dashboard, education, ticket) appeared twice. Added dedupeKey to
each item; buildMergedMenuItems now skips items whose key was already
added by an earlier role — the primary role's version always wins.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- roleMenuItems.js: merged menu builder that unions items from all user roles
(student + missionary, student + counselor, etc.) additively
- auth store: expose `roles` array in addition to singular `role`; wire in
WordPress auth-status cookie sync so the public site can show/hide the
account button
- router guards: use roles.includes() instead of role === for multi-role access
- layouts (Student/Counselor/Missionary): delegate menuItems to
buildMergedMenuItems so dual-role users see sections from both roles
- StudentSessionDetailsPage: contentKind now returns 'video' (not 'link')
when session.videoUrl is set; adds embed iframe branch for online sessions
- CertificateItem.vue: fix CSS order/alignment for desktop + mobile layout
- StudentCertificatesPage.vue: map backend payload fields to component props
with Jalaali date formatting
- SessionFormPage: upload progress bar (%) during video uploads; embed_code
textarea for online sessions (frontend-only; dormant until batch-2 backend
migration is deployed)
- wp-sync/auth-status-cookie.js: cookie helper for WordPress login-state sync
[batch-1-low-risk]