/* ===== NotificationPage Styles ===== */ .notification-page { height: 100%; display: flex; flex-direction: column; overflow: hidden; background: var(--color-bg-primary); } /* ----- Header ----- */ .notification-page-header { padding: var(--space-3xl) var(--space-4xl) var(--space-xl); background: var(--color-bg-secondary); border-bottom: 1px solid var(--color-border-light); display: flex; flex-direction: column; gap: var(--space-xl); flex-shrink: 0; } .notification-title-row { display: flex; align-items: center; gap: var(--space-md); } .notification-page-title { font-size: var(--text-xl); font-weight: 700; color: var(--color-text-primary); line-height: 1.3; } .notification-unread-badge { display: inline-flex; align-items: center; padding: 2px 12px; background: var(--color-accent-light); color: var(--color-accent); border-radius: var(--radius-full); font-size: var(--text-xs); font-weight: 600; } .notification-header-actions { display: flex; align-items: center; justify-content: space-between; gap: var(--space-lg); flex-wrap: wrap; } /* ----- Filter Tabs ----- */ .notification-filter-tabs { display: flex; gap: var(--space-xs); background: var(--color-bg-primary); padding: var(--space-xs); border-radius: var(--radius-md); border: 1px solid var(--color-border-light); } .notif-filter-tab { display: flex; align-items: center; gap: var(--space-xs); padding: var(--space-sm) var(--space-lg); font-size: var(--text-sm); font-weight: 500; color: var(--color-text-secondary); background: none; border: none; border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .notif-filter-tab:hover { color: var(--color-text-primary); background: var(--color-bg-hover); } .notif-filter-tab.active { color: var(--color-accent); background: var(--color-accent-subtle); font-weight: 600; } .notif-filter-count { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--radius-full); font-size: 11px; font-weight: 600; background: var(--color-bg-active); color: var(--color-text-tertiary); line-height: 1; } .notif-filter-tab.active .notif-filter-count { background: var(--color-accent); color: white; } /* ----- Mark All Read Button ----- */ .mark-all-read-btn { display: inline-flex; align-items: center; gap: var(--space-xs); padding: var(--space-sm) var(--space-lg); font-size: var(--text-sm); font-weight: 500; color: var(--color-accent); background: var(--color-accent-subtle); border-radius: var(--radius-sm); cursor: pointer; transition: all var(--transition-fast); white-space: nowrap; } .mark-all-read-btn:hover { background: var(--color-accent-light); color: var(--color-accent-hover); } /* ----- Notification List ----- */ .notification-list { flex: 1; overflow-y: auto; padding: var(--space-lg) var(--space-4xl); display: flex; flex-direction: column; gap: 2px; } /* ----- Notification Item ----- */ .notification-item { position: relative; display: flex; align-items: flex-start; gap: var(--space-lg); padding: var(--space-xl) var(--space-lg); background: var(--color-bg-secondary); border-radius: var(--radius-md); cursor: pointer; transition: all var(--transition-fast); border: 1px solid transparent; } .notification-item:hover { background: var(--color-bg-hover); border-color: var(--color-border-light); } .notification-item.unread { background: var(--color-accent-subtle); } .notification-item.unread:hover { background: var(--color-accent-light); } /* Unread dot */ .notification-unread-dot { position: absolute; top: var(--space-lg); left: var(--space-sm); width: 8px; height: 8px; border-radius: 50%; background: var(--color-accent); flex-shrink: 0; } /* Type Icon */ .notification-type-icon { width: 40px; height: 40px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } /* Content */ .notification-content { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-xs); } .notification-content-header { display: flex; align-items: center; gap: var(--space-sm); } .notification-type-label { display: inline-block; font-size: var(--text-xs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.03em; flex-shrink: 0; } .notification-title { font-size: var(--text-base); font-weight: 600; color: var(--color-text-primary); line-height: 1.4; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .notification-body { font-size: var(--text-sm); color: var(--color-text-secondary); line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } /* Time */ .notification-time { font-size: var(--text-xs); color: var(--color-text-tertiary); white-space: nowrap; flex-shrink: 0; margin-top: 2px; } /* ----- Empty State ----- */ .notification-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-5xl); gap: var(--space-md); flex: 1; } .notification-empty-icon { color: var(--color-text-disabled); } .notification-empty-text { font-size: var(--text-base); color: var(--color-text-tertiary); } /* ----- Responsive ----- */ @media (max-width: 768px) { .notification-page-header { padding: var(--space-xl) var(--space-lg); } .notification-header-actions { flex-direction: column; align-items: flex-start; } .notification-filter-tabs { flex-wrap: wrap; width: 100%; } .notif-filter-tab { padding: var(--space-sm) var(--space-md); font-size: var(--text-xs); } .notification-list { padding: var(--space-md) var(--space-lg); } .notification-item { padding: var(--space-md); gap: var(--space-md); } .notification-time { display: none; } } @media (max-width: 480px) { .notification-title-row { flex-direction: column; align-items: flex-start; gap: var(--space-sm); } .notification-type-icon { width: 32px; height: 32px; } }