diff --git a/frontend/layouts/default.vue b/frontend/layouts/default.vue
index 4894ea4..f3e6b53 100644
--- a/frontend/layouts/default.vue
+++ b/frontend/layouts/default.vue
@@ -53,6 +53,23 @@
:collapsed="sidebarIsCollapsed"
@click="ui.closeMobileSidebar()"
/>
+
+
+
+ {{ mailStore.globalUnreadCount > 99 ? '99+' : mailStore.globalUnreadCount }}
+
+
{
+ const roles: string[] = auth.user?.roles ?? []
+ const isClientOnly = roles.includes('ROLE_CLIENT')
+ && !roles.includes('ROLE_ADMIN')
+ && !roles.includes('ROLE_USER')
+ return !isClientOnly && (roles.includes('ROLE_USER') || roles.includes('ROLE_ADMIN'))
+})
+
// On mobile, sidebar is always expanded (not collapsed icon mode)
const sidebarIsCollapsed = computed(() => {
if (ui.sidebarOpen) return false
@@ -207,6 +233,17 @@ watch(
onMounted(() => {
timerStore.fetchActive()
+ if (isMailVisible.value) {
+ mailStore.startPolling()
+ }
+})
+
+watch(() => auth.user, (user) => {
+ if (!user) {
+ mailStore.stopPolling()
+ } else if (isMailVisible.value) {
+ mailStore.startPolling()
+ }
})
const completeDrawerOpen = ref(false)