Source of truth: exhaustive for what it covers. Generated from Velt customization metadata. If a name isn’t on this page, it doesn’t exist: don’t use it (a missing identifier resolves to
undefined / renders nothing). Never invent or guess a name; use only identifiers that appear verbatim here or that you verified against ground truth and added here. Scope: the conditional (stateful) class list is exhaustive across components; the structural root classes below are exhaustive for comments + notifications + core theming only (other features’ structural classes: inspect live with shadowDom={false}). Out-of-scope clusters (huddle, recorder, video-editor, view-analytics, follow/live-state, audio-waveform) keep their conditional rows but get no structural-root coverage here.velt-* class the SDK toggles: extracted per component, with the condition that applies it (the condition is the description: “applied when …”). Target these (override with !important, R9b) to style state without a wireframe or hook. Prefer the velt-* BEM class over the short legacy twin where both appear. Always-on structural root classes for in-scope components are listed in their own section near the bottom.
Conditional classes are exhaustive. Conditions reference internal SDK state expressions; read them as “applied whenexpris truthy”. Count: 393 class entries (one per- `velt-…`bullet below). If a script reports fewer, it’s matching only one pattern: many entries pair avelt-*BEM class with its short legacy twin on the same line.
comment
text-comment-toolbar-copywritervelt-text-comment-toolbar-copywriter--disabled: applied whencomponentConfig.data.selectedWordsCount < componentConfig.uiState.MIN_ALLOWED_WORDS_COUNT || componentConfig.data.selectedCharactersCount < componentConfig.uiState.MIN_ALLOWED_CHARACTERS_COUNT || componentConfig.data.selectedCharactersCount > componentConfig.uiState.MAX_ALLOWED_CHARACTERS_COUNT
velt-text-comment-toolbar-generic--disabled: applied whencomponentConfig.data.selectedWordsCount < componentConfig.uiState.MIN_ALLOWED_WORDS_COUNT || componentConfig.data.selectedCharactersCount < componentConfig.uiState.MIN_ALLOWED_CHARACTERS_COUNT || componentConfig.data.selectedCharactersCount > componentConfig.uiState.MAX_ALLOWED_CHARACTERS_COUNT
dark: applied whenconfig.uiState.darkMode
velt-inline-comments-section-sorting-dropdown-content-item--active: applied whenisActive()
velt-inline-comments-section-sorting-dropdown-trigger-open: applied whenconfig.uiState?.sortState?.sortingDropdownOpen
multi-thread: applied whenlocalUIStateSignal()?.multiThread
velt-dropdown-arrow--open: applied whenconfig.uiState?.filterState?.filterDropdownOpen
selected: applied whencomponentConfig.selectedAnnotationsMap[entry?.annotation?.annotationId!]
velt-comments-sidebar-filter-button-open: applied whencomponentConfig.moreFiltersVisible
velt-comment-sidebar-location-filter-dropdown-trigger-icon-flipped: applied whencomponentConfig.documentFilterDropdownOpenvelt-comments-sidebar-document-filter-dropdown-trigger-open: applied whencomponentConfig.documentFilterDropdownOpen
velt-sidebar-filter--search-dropdown-icon-open: applied whendropdownOpen
velt-sidebar-filter--max-height: applied whenmaxHeight
velt-comment-sidebar-filter-item--Added: applied whenvalue?.id === componentConfig?.user?.userIdvelt-comment-sidebar-filter-item--Me: applied whenvalue?.id === componentConfig?.user?.userId
visible: applied whencomponentConfig.moreFiltersVisible
velt-comment-sidebar-minimal-filter-dropdown-trigger--filter-selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter !== 'all'velt-comment-sidebar-minimal-filter-dropdown-trigger-open: applied whencomponentConfig.minimalFilterDropdownOpen
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'reset'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'read'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'resolved'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.sorting === 'date'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'all'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'open'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'assignedToMe'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.sorting === 'unread'
velt-comment-sidebar-minimal-filter-content-item--selected: applied whencomponentConfig.selectedMinimalFilterDropdownOption.filter === 'unread'
velt-comment-sidebar-minimal-filter-content-item-selected-icon--selected: applied whenisSelected
velt-comment-sidebar-action-button-active: applied whencomponentConfig?.customActionsState?.[id]
velt-comments-sidebar-status-open: applied whencomponentConfig.isOpen
velt-dropdown-arrow--open: applied whencomponentConfig.isOpen
dark: applied whencomponentConfig.darkMode
velt-comment-sidebar-list--icon-expanded: applied whenscrollData?.data?.isExpanded
velt-comment-sidebar-location-filter-dropdown-trigger-open: applied whencomponentConfig.locationFilterDropdownOpen
velt-comment-sidebar-panel--more-filters-visible: applied whencomponentConfig.moreFiltersVisible
velt-comment-sidebar-minimal-actions-dropdown-trigger-open: applied whencomponentConfig.minimalActionsDropdownOpen
embed: applied whencomponentConfig.embedModefloating: applied whencomponentConfig.floatingModemobile: applied whencomponentConfig.isPhonepage: applied whencomponentConfig.pageModes-overflow-hidden: applied whencomponentConfig.moreFiltersVisiblevelt-comment-sidebar--read-only: applied whencomponentConfig.readOnlyvelt-sidebar--more-filters-visible: applied whencomponentConfig.moreFiltersVisiblevelt-sidebar-container--fullscreen: applied whencomponentConfig.fullScreenvisible: applied when(componentConfig.sidebarVisible || componentConfig.embedMode || componentConfig.floatingMode)
velt-comment-pin--number-3-digit: applied whencomponentConfig.data?.annotation?.annotationNumber?.toString()?.length === 3
velt-display-none: applied when!coreService.globalConfigSignal().featureState.popoverTriangleComponent
velt-comment-pin--index-3-digit: applied whencomponentConfig.data?.annotation?.annotationIndex?.toString()?.length === 3
velt-comment-pin--agent: applied whenisAgentComment()velt-comment-pin--different-device: applied whenisDeviceIndicatorWithDifferentDevice()velt-comment-pin--ghost: applied when!!componentConfig.data.annotation?.ghostCommentvelt-comment-pin--marker-default: applied when!usingCustomCommentPinvelt-comment-pin--marker-transparent: applied whenusingCustomCommentPinvelt-comment-pin--outside-viewport: applied when!componentConfig.uiState.annotationDragging && isOutsideViewportvelt-comment-pin--status-default: applied when!customStatusesShown() && componentConfig.data.annotation?.status?.type === 'default'velt-comment-pin--status-ongoing: applied when!customStatusesShown() && componentConfig.data.annotation?.status?.type === 'ongoing'velt-comment-pin--status-terminal: applied when!customStatusesShown() && componentConfig.data.annotation?.status?.type === 'terminal'velt-comment-pin-open: applied whencomponentConfig.uiState.commentPinSelected && !componentConfig.uiState.annotationDraggingvelt-comment-pin-unread-comment: applied whenisAuthenticatedUser() && componentConfig.data?.unreadCommentsMap?.[componentConfig.data.annotation?.annotationId!]velt-display-none: applied whenlocalUIStateSignal().commentPinType !== 'bubble' && componentConfig.data.commentBubbleElementAnnotationId && componentConfig.data.commentBubbleElementAnnotationId !== componentConfig.data.annotation?.annotationId
dark: applied whendarkModevelt-sidebar-button--visible: applied whencoreService.globalConfigSignal().featureState.sidebarVisiblevelt-sidebar-tool-open: applied whencoreService.globalConfigSignal().featureState.sidebarVisible
active: applied whencomponentConfig.uiState.addCommentModevelt-tool--action-btn-disabled: applied when!componentConfig.uiState.commentToolEnabled
mobile: applied whencomponentConfig.isPhonevisible: applied when!!componentConfig.commentAnnotation
bottom-sheet: applied whencomponentConfig.uiState?.bottomSheetModebottom-sheet: applied whencomponentConfigSignal()?.uiState?.bottomSheetModedialog: applied when!isSidebarMode()dialog: applied whencomponentConfig.featureState?.dialogModedialog: applied whencomponentConfigSignal()?.featureState?.dialogModeinbox: applied whencomponentConfig.featureState?.inboxModeinbox: applied whencomponentConfigSignal()?.featureState?.inboxModeinline-comment-mode: applied whencomponentConfig.featureState?.inlineCommentMode && !componentConfig.featureState?.isInsidePdfViewerinline-comment-mode: applied whencomponentConfig.featureState?.inlineCommentModeinline-comment-mode: applied whencomponentConfigSignal()?.featureState?.inlineCommentMode && !componentConfigSignal()?.featureState?.isInsidePdfViewerno-comments: applied when!componentConfig.data?.annotation?.comments?.lengthno-comments: applied when!componentConfigSignal()?.data?.annotation?.comments?.lengthprivate-comment: applied whencomponentConfig.uiState?.isPrivateCommentprivate-comment: applied whencomponentConfigSignal()?.uiState?.isPrivateCommentreadonly: applied when(componentConfig.appState?.user?.isReadOnly || componentConfig.appState?.user?.isAnonymous)readonly: applied when(componentConfigSignal()?.appState?.user?.isReadOnly || componentConfigSignal()?.appState?.user?.isAnonymous)s-ghost-comment-annotation: applied whencomponentConfig.uiState?.showGhostCommentMessages-ghost-comment-annotation: applied whencomponentConfigSignal()?.uiState?.showGhostCommentMessagescreen-recording: applied whencomponentConfig.uiState?.recorderInitConfig?.type === 'screen'screen-recording: applied whencomponentConfigSignal()?.uiState?.recorderInitConfig?.type === 'screen'selected: applied whenlocalUIStateSignal()?.commentDialogSelectedselected: applied whenlocalUIStateSignal().commentDialogSelectedsidebar: applied whenisSidebarMode()sidebar: applied whenlocalUIStateSignal()?.sidebarModesidebar: applied whenlocalUIStateSignal().sidebarModevelt-comment-dialog--bottom-sheet: applied whencomponentConfig.uiState?.bottomSheetModevelt-comment-dialog--bottom-sheet: applied whencomponentConfigSignal()?.uiState?.bottomSheetModevelt-comment-dialog--comment-composer-mode: applied whencomponentConfig.uiState?.commentComposerModevelt-comment-dialog--comment-composer-mode: applied whencomponentConfigSignal()?.uiState?.commentComposerModevelt-comment-dialog--dialog-mode: applied when!isSidebarMode()velt-comment-dialog--dialog-mode: applied whencomponentConfig.featureState?.dialogModevelt-comment-dialog--dialog-mode: applied whencomponentConfigSignal()?.featureState?.dialogModevelt-comment-dialog--focused-thread-mode: applied whenlocalUIStateSignal()?.focusedThreadModevelt-comment-dialog--ghost-comment-annotation: applied whencomponentConfig.uiState?.showGhostCommentMessagevelt-comment-dialog--ghost-comment-annotation: applied whencomponentConfigSignal()?.uiState?.showGhostCommentMessagevelt-comment-dialog--hide: applied whenshowDefault()velt-comment-dialog--inbox-mode: applied whencomponentConfig.featureState?.inboxModevelt-comment-dialog--inbox-mode: applied whencomponentConfigSignal()?.featureState?.inboxModevelt-comment-dialog--inline-comment-mode: applied whencomponentConfig.featureState?.inlineCommentMode && !componentConfig.featureState?.isInsidePdfViewervelt-comment-dialog--inline-comment-mode: applied whencomponentConfigSignal()?.featureState?.inlineCommentMode && !componentConfigSignal()?.featureState?.isInsidePdfViewervelt-comment-dialog--inline-comment-section-mode: applied whenlocalUIStateSignal()?.inlineCommentSectionModevelt-comment-dialog--multi-thread-mode: applied whencomponentConfig.uiState?.multiThreadAnnotationIdvelt-comment-dialog--multi-thread-mode: applied whencomponentConfigSignal()?.uiState?.multiThreadAnnotationIdvelt-comment-dialog--no-comments: applied when!componentConfig.data?.annotation?.comments?.lengthvelt-comment-dialog--no-comments: applied when!componentConfigSignal()?.data?.annotation?.comments?.lengthvelt-comment-dialog--page-comment: applied whencomponentConfig.data?.annotation?.isPageAnnotationvelt-comment-dialog--page-comment: applied whencomponentConfigSignal()?.data?.annotation?.isPageAnnotationvelt-comment-dialog--page-mode-composer: applied whenlocalUIStateSignal()?.pageModeComposervelt-comment-dialog--private-comment: applied whencomponentConfig.uiState?.isPrivateCommentvelt-comment-dialog--private-comment: applied whencomponentConfigSignal()?.uiState?.isPrivateCommentvelt-comment-dialog--read-only: applied whenlocalUIStateSignal()?.readOnlyvelt-comment-dialog--readonly: applied when(componentConfig.appState?.user?.isReadOnly || componentConfig.appState?.user?.isAnonymous)velt-comment-dialog--readonly: applied when(componentConfigSignal()?.appState?.user?.isReadOnly || componentConfigSignal()?.appState?.user?.isAnonymous)velt-comment-dialog--screen-recording: applied whencomponentConfig.uiState?.recorderInitConfig?.type === 'screen'velt-comment-dialog--screen-recording: applied whencomponentConfigSignal()?.uiState?.recorderInitConfig?.type === 'screen'velt-comment-dialog--selected: applied whenlocalUIStateSignal()?.commentDialogSelectedvelt-comment-dialog--selected: applied whenlocalUIStateSignal().commentDialogSelectedvelt-comment-dialog--sidebar-mode: applied whenisSidebarMode()velt-comment-dialog--sidebar-mode: applied whenlocalUIStateSignal()?.sidebarModevelt-comment-dialog--sidebar-mode: applied whenlocalUIStateSignal().sidebarMode
velt-thread-card--draft: applied whencomment()?.isDraft || hasEditDraft()velt-thread-card--edit-draft: applied whenhasEditDraft()velt-thread-card--inline-mode: applied whencomponentConfig?.featureState?.inlineCommentSectionModevelt-thread-card--message-truncated: applied whenisTruncationActive() && !isExpanded()
s-emoji-block-no-margin: applied whenhasAttachmentsOrRecorders()
dark: applied whencomponentConfig?.uiState?.darkMode
velt-thread-card--edit-draft-badge: applied whenhasEditDraft()
velt-thread-card--edit-mode: applied whenisInEditMode()velt-thread-card--show-actions: applied whenshowActions()
dark: applied whencomponentConfig?.uiState?.darkMode
velt-comment-dialog-seen-dropdown--trigger-open: applied whenisDropdownOpen()
velt-comment-dialog-seen-dropdown--content-item-name-dark: applied whencomponentConfig?.uiState?.darkMode
velt-comment-dialog-seen-dropdown--content-item-time-dark: applied whencomponentConfig?.uiState?.darkMode
velt-comment-dialog-seen-dropdown--content-title-dark: applied whencomponentConfig?.uiState?.darkMode
velt-agent-suggestion--sidebar: applied whenlocalUIStateSignal().sidebarMode
velt-agent-suggestion-body__text--clamped: applied whenisSidebar()
velt-agent-suggestion__menu-item--danger: applied whenisDanger()
velt-agent-suggestion-banner__badge--accepted: applied whenglyph() === 'check'velt-agent-suggestion-banner__badge--rejected: applied whenglyph() === 'cross'
velt-agent-suggestion-banner--accepted: applied whenisAccepted()velt-agent-suggestion-banner--has-visibility-banner: applied whenhasVisibilityBanner()velt-agent-suggestion-banner--private-comment-mode: applied whenisPrivateComment()velt-agent-suggestion-banner--rejected: applied whenisRejected()
s-dark: applied whendarkModevelt-assign-dropdown--checkbox-icon-selected: applied whenisAssignedCheckboxvelt-assign-dropdown--checkbox: applied whenassignToType === 'checkbox'velt-assign-dropdown--item-dark: applied whendarkMode
velt-assign-menu-inline-panel--dark: applied when!!componentConfigSignal()?.uiState?.darkMode
no-selected: applied when!hasSelection()
multi-selected: applied whencustomListItems.length > 1
velt-custom-annotation-dropdown--content-item-text-dark: applied whenisDarkMode()
selected: applied whenisSelected()
velt-comment-dialog-composer--inline: applied whenlocalUIStateSignal()?.inlineCommentSectionModevelt-comment-dialog-composer--no-comments: applied when!componentConfigSignal()?.data?.annotation?.comments?.lengthvelt-comment-dialog-composer--recording: applied whenisRecordingActive()velt-comment-dialog-composer--top: applied whencomponentConfigSignal()?.uiState?.composerPosition === 'top'velt-composer--comment-composer-mode: applied whencomponentConfig?.uiState?.commentComposerModevelt-composer--inline-comment-section-mode: applied whenlocalUIStateSignal()?.inlineCommentSectionModevelt-composer--multi-thread-mode: applied whencomponentConfig?.uiState?.multiThreadAnnotationIdvelt-composer-edit-mode: applied wheneditMode()velt-composer-input-focused: applied whencomponentConfigSignal()?.uiState?.isInputFocusedvelt-composer-open: applied whenlocalUIStateSignal()?.composerInOpenState
velt-composer-action-button--selected: applied whencomponentConfig.uiState?.formatToolbarOpen
velt-composer-attachment--loading: applied whenisLoading()
velt-composer-attachment--loading: applied whenisLoading()
velt-comment-dialog-body--closed: applied when!isDialogSelected() && componentConfig.data?.annotation?.comments?.lengthvelt-comment-dialog-body--focused-thread-mode: applied whenlocalUIStateSignal()?.focusedThreadModevelt-comment-dialog-body--inline-comment-section-mode: applied whenlocalUIStateSignal()?.inlineCommentSectionModevelt-comment-dialog-body--reply-avatars-inline-mode: applied whencomponentConfig.featureState?.inlineCommentSectionMode
velt-visibility-banner-clickable: applied whenisSelectedPeopleVisibility()
velt-trigger-open: applied whenisAnyDropdownOpen()
velt-trigger-icon-open: applied whenisAnyDropdownOpen()
velt-org-picker-overlay--dark: applied whendarkMode
selected: applied whenisSelected()
velt-user-picker-overlay--dark: applied whendarkModevelt-user-picker-overlay--readonly: applied whenisReadOnly()
velt-comment-suggestion-status--accepted: applied wheneffectiveStatus()?.id === componentConfig?.featureState?.commentAcceptedStatus?.idvelt-comment-suggestion-status--rejected: applied wheneffectiveStatus()?.id === componentConfig?.featureState?.commentRejectedStatus?.id
velt-status-dropdown-content-item--dark: applied whencomponentConfig?.uiState?.darkMode
velt-priority-dropdown-content-item-tick--dark: applied whencomponentConfig?.uiState?.darkMode
velt-priority-dropdown-content-item-name--dark: applied whencomponentConfig?.uiState?.darkMode
selected: applied whenisSelected()
velt-toggle-reply--button-inline-mode: applied whencomponentConfig.featureState.inlineCommentSectionModevelt-toggle-reply--button-reply-avatars: applied whencomponentConfig?.featureState?.replyAvatarsvelt-toggle-reply--button: applied when!componentConfig.featureState.inlineCommentSectionModevelt-toggle-reply--readonly: applied whencomponentConfig?.uiState?.readOnly
velt-comment-dialog-options-dropdown-content-item--dark: applied whencomponentConfig?.uiState?.darkMode
private-comment: applied whencomponentConfig.uiState?.isPrivateCommentvelt-assignee-banner--has-visibility-banner: applied whenhasVisibilityBanner()velt-assignee-banner--private-comment-mode: applied whencomponentConfig.uiState?.isPrivateComment
has-assignee-banner: applied whencomponentConfig.data?.annotation?.assignedTo && !componentConfig.featureState?.inlineCommentModeprivate-comment: applied whencomponentConfig.uiState?.isPrivateComment
v-unread-comment: applied when!componentConfig.user?.isGuest && !componentConfig.user?.isAnonymous && componentConfig.unreadCommentsMap?.[data?.value?.annotation?.annotationId!]velt-comments-minimap-container--target-scrollable-element: applied when!!componentConfig.targetScrollableElementIdvelt-comments-minimap-position--left: applied whencomponentConfig.position === 'left'
ghost-comment: applied whenghostCommentselected: applied when!!selectedAnnotationsMap[commentAnnotations[0]?.annotationId!]
velt-comment-bubble-hover: applied whenlocalUIStateSignal().commentBubbleTargetPinHovervelt-comment-bubble-open: applied when!!componentConfig.uiState.selectedAnnotationsMap[componentConfig.data.annotation?.annotationId!]
pin-dragging: applied whencomponentConfig.annotationDragging
agent-comment: applied whencomponentConfig.commentPinAnnotation?.sourceType === 'agent'index-3-digit: applied whencomponentConfig.commentPinAnnotation?.annotationNumber?.toString()?.length === 3inline-comment-mode: applied when(componentConfig.inlineCommentMode && !componentConfig.isInsidePdfViewer)selected: applied whencomponentConfig.commentPinHover || componentConfig.commentPinSelected
velt-multi-thread-comment-dialog-container--inbox-mode: applied whencomponentConfigSignal().uiState.inboxMode
velt-multi-thread-comment-dialog-minimal-filter-content-item-selected-icon--selected: applied whenisSelected
velt-multi-thread-comment-dialog-minimal-actions-dropdown-trigger-open: applied whencomponentConfig.uiState.minimalActionsDropdownOpen
velt-multi-thread-comment-dialog-minimal-filter-dropdown-trigger--filter-selected: applied whencomponentConfig.uiState.selectedMinimalFilterDropdownOption.filter !== 'all' && componentConfig.uiState.selectedMinimalFilterDropdownOption.filter !== nullvelt-multi-thread-comment-dialog-minimal-filter-dropdown-trigger-open: applied whencomponentConfig.uiState.minimalFilterDropdownOpen
dark: applied whenconfig.uiState.darkModeembed: applied whenlocalUIStateSignal().embedModefloating: applied whenlocalUIStateSignal().floatingModepage: applied whenlocalUIStateSignal().pageModevelt-comment-sidebar--read-only: applied whenlocalUIStateSignal().readOnlyvelt-sidebar-container--fullscreen: applied whenconfig.uiState.fullScreenvisible: applied when!defaultCondition() || config.uiState.sidebarVisible || localUIStateSignal().embedMode || localUIStateSignal().floatingMode
velt-sidebar-filter-panel--bottom-sheet: applied whenpanelLayout() !== 'menu'velt-sidebar-filter-panel--menu: applied whenpanelLayout() === 'menu'velt-sidebar-filter-panel-overlay--menu: applied whenpanelLayout() === 'menu'
velt-filter-select-control--open: applied whenexpanded
velt-filter-select-chevron--up: applied whenup()
velt-sidebar-filter-list-item--selected: applied whenisSelected()
velt-sidebar-filter-trigger--filter-selected: applied whenisActive()
velt-comment-sidebar-panel--more-filters-visible: applied whencomponentConfig.uiState.moreFiltersVisible
velt-sidebar-main-filter-button--filter-selected: applied whenisFilterActive()
velt-sidebar-group-chevron--collapsed: applied when!group()?.isExpanded
private-comment-mode: applied whencomponentConfig.privateCommentModeEnabled
velt-status-dropdown-trigger--default: applied when!componentConfig?.featureState?.customStatusesShown && currentStatus()?.type === 'default'velt-status-dropdown-trigger--ongoing: applied when!componentConfig?.featureState?.customStatusesShown && currentStatus()?.type === 'ongoing'velt-status-dropdown-trigger--rejected: applied whencurrentStatus()?.id === constants?.CommentRejectStatus?.idvelt-status-dropdown-trigger--terminal: applied when!componentConfig?.featureState?.customStatusesShown && currentStatus()?.type === 'terminal'
velt-comment-dialog-composer-attachments--selected: applied whenfiles() && files()!.length > 0
velt-inline-comments-section-filter-dropdown-content-list-item-checkbox--checked: applied whenfilter?.isSelected
velt-thread-card--name--unread: applied whenshouldShow()(unread indicator rendered)velt-thread-card--name--unread--verbose: applied whencomponentConfig?.unreadIndicatorMode === unreadIndicatorModeEnum.VERBOSE
reaction
reaction-pinactive: applied whencomponentConfig?.isReactionSelectedByCurrentUservelt-reaction-pin--default: applied when!templatevelt-reaction-pin--no-reactions: applied when!componentConfig?.annotation?.reactions?.length
dark: applied whendarkModevelt-reactions-panel--default: applied when!templatevelt-reactions-panel--inline-section-mode: applied whenisInlineSectionMode
active: applied whentooltipVisibleno-padding: applied whennoPaddingvelt-reaction-btn-container--inline-section-mode: applied whenisInlineSectionMode
notification
notifications-toolactive: applied whencomponentConfig.uiState.notificationsPanelVisiblevelt-notification-tool-open: applied whencomponentConfig.uiState.notificationsPanelVisible
bottom-sheet: applied whenbottomSheetModevelt-notifications-panel--sidebar-panel: applied whencomponentConfig.uiState.panelOpenMode === 'sidebar'
selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.Peoplevelt-notifications-panel--tab-selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.People
selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.Allvelt-notifications-panel--tab-selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.All
selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.ForYouvelt-notifications-panel--tab-selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.ForYou
selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.Documentsvelt-notifications-panel--tab-selected: applied whencomponentConfig.uiState.selectedTab === componentConfig.uiState.TABS.Documents
velt-notification-panel--settings-mute-all-toggle-container-muted: applied whencomponentConfig.uiState.settingsMutedAll
velt-notification-panel--settings-accordion-content-item-label-container-selected: applied whencomponentConfig.data.settingsSelectedOption[resolvedAccordionConfig()?.id]?.id === resolvedOption()?.id
velt-notification-panel--settings-accordion-content-item-container-selected: applied whencomponentConfig.data.settingsSelectedOption[resolvedAccordionConfig()?.id]?.id === resolvedOption()?.id
velt-notification-panel--settings-accordion-content-item-icon-container-selected: applied whencomponentConfig.data.settingsSelectedOption[resolvedAccordionConfig()?.id]?.id === resolvedOption()?.id
velt-notification-panel--settings-accordion-open: applied whencomponentConfig.uiState.settingsAccordionExpanded[resolvedAccordionConfig()?.id]
velt-notification-panel--settings-accordion-container-expanded: applied whencomponentConfig.uiState.settingsAccordionExpanded[resolvedAccordionConfig()?.id]
velt-notifications-panel--documents-accordion-expanded: applied whencomponentConfig.uiState.documentExpanded[document?.documentId!]
velt-notifications-panel-content--sidebar-panel: applied whencomponentConfig.uiState.panelOpenMode === 'sidebar'
velt-notifications-panel--unread-is-default: applied whenisDefault
velt-notifications-panel--unread-is-default: applied whenisDefault
unread: applied whenresolvedNotification()?.isUnread
velt-notifications-panel-content--sidebar-panel: applied whencomponentConfig.uiState.panelOpenMode === 'sidebar'
velt-notifications-panel-content--sidebar-panel: applied whencomponentConfig.uiState.panelOpenMode === 'sidebar'
velt-notifications-panel--people-accordion-expanded: applied whencomponentConfig.uiState.usersExpanded[data?.key!]
presence
presence-tooltip-avataraway: applied whencomponentConfig.presenceUser.onlineStatus === constants.PRESENCE_STATUS_AWAYvelt-presence-avatar--away: applied whencomponentConfig.presenceUser.onlineStatus === constants.PRESENCE_STATUS_AWAY
away: applied whenpresenceUser.onlineStatus === constants.PRESENCE_STATUS_AWAYvelt-presence-avatar--away: applied whenpresenceUser.onlineStatus === constants.PRESENCE_STATUS_AWAY
cursor
cursor-pointer-avataruser-presence-text-container-comment-border: applied whencomponentConfig.cursorUser?.commentvelt-cursor-pointer-avatar-container-comment-border: applied whencomponentConfig.cursorUser?.comment
no-transition: applied whencomponentConfig.selfCursorPointer
flip: applied whencomponentConfig.selfCursorPointer
user-presence-text-container-comment-border: applied whencomponentConfig.cursorUser?.commentvelt-cursor-pointer-default-container-comment-border: applied whencomponentConfig.cursorUser?.comment
huddle
screen-sharing-huddleselected: applied whencomponentConfig.viewportSize === 'large'selected: applied whencomponentConfig.viewportSize === 'medium'selected: applied whencomponentConfig.viewportSize === 'small'
active: applied whenallMenuTrigger?.menuOpen
flip: applied when!componentConfig.isRemoteStreamlocal-stream: applied when!componentConfig.isRemoteStreamselected: applied whenselectedspeaking: applied whencomponentConfig.audioStatevideo-off: applied when!componentConfig.videoState
mobile: applied whencomponentConfig.isPhonevisible: applied whencomponentConfig.messagesPanelVisible
s-current-user: applied whencomponentConfig.user?.userSnippylyId === attendee?.userSnippylyId
recorder
recorder-player-video-containervelt-recorder-player-video--embed-mode: applied whencomponentConfig?.variant === 'embed'velt-recorder-player-video--thread-mode: applied whencomponentConfig.mode === 'thread'
velt-recorder-player--full-screen-button-hovered: applied whencomponentConfig.videoContainerHovered
active: applied whencomponentConfig.showSubtitles
velt-recorder-player--time: applied whencomponentConfig.recordingType === componentConfig.recorderModes.AUDIO
velt-recorder-player-audio--embed-mode: applied whencomponentConfig?.variant === 'embed'velt-recorder-player-audio--thread-mode: applied whencomponentConfig.mode === 'thread'
velt-recorder-player--hovered: applied whencomponentConfig.videoContainerHovered
flip: applied whencomponentConfig.recordingType === componentConfig.recorderModes.VIDEO
velt-recorder-player--name-embed-mode: applied whencomponentConfig?.variant === 'embed'
disabled: applied when!componentConfig.annotation?.transcription?.transcriptedText
disabled: applied when!componentConfig.annotation?.transcription?.transcriptedText
active: applied whenvalue === componentConfig.activeSpeed
flip: applied whencomponentConfig.annotation?.recordingType === 'video'
hide: applied whensubtitlesRef?.componentConfigSignal()?.highlightedTextIndex! < 0
pin-dragging: applied whencomponentConfig.annotationDragging
velt-recorder-all-tool-container--active: applied whenallMenuTrigger?.menuOpenvelt-recorder-all-tool-container--disabled: applied whencomponentConfig.recordingInProgress
disabled: applied whencomponentConfig.recordingInProgress
disabled: applied whencomponentConfig.recordingInProgress
disabled: applied whencomponentConfig.recordingInProgress
pin-dragging: applied whencomponentConfig.annotationDraging && componentConfig.dragAnnotation?.annotationId === recorder?.annotationId
velt-recorder-control-panel-floating--container-collapsed: applied whencomponentConfig.collapsedModevelt-recorder-control-panel-floating--video: applied whencomponentConfig.recorderInitData?.type === 'video'
pin-dragging: applied whencomponentConfig.annotationDragingvelt-recorder-control-panel-floating-screen: applied whencomponentConfig.recorderInitData?.type === 'screen'velt-recorder-saving: applied whencomponentConfig.loading
with-pip: applied whenisPipEnabled
velt-video-screen: applied whencomponentConfig.recorderInitData?.type === 'screen'
velt-recorder-control-panel-action-bar-pip-button-active: applied whenisPipActive
is-floating: applied whencomponentConfig.mode !== 'thread'velt-recorder-control-panel-action-bar--screen: applied whencomponentConfig.recorderInitData.type === 'screen'
pin-dragging: applied whencomponentConfig.annotationDraging
velt-recorder-control-panel-action-bar--thread-mode: applied whencomponentConfig.mode === 'thread' && componentConfig.recorderInitData.type !== 'screen'velt-recorder-control-panel-action-bar--floating-mode: applied when!(componentConfig.mode === 'thread' && componentConfig.recorderInitData.type !== 'screen')
velt-recorder-control-panel-loading--thread-mode: applied whencomponentConfig.mode === 'thread'velt-recorder-control-panel-loading--floating-mode: applied whencomponentConfig.mode !== 'thread'
velt-media-source-settings-audio--active: applied whencomponentConfig.isAudioPermissionOpen
velt-media-source-settings-video--active: applied whencomponentConfig.isVideoPermissionOpen
velt-media-source-settings-options--current-selected: applied whendevice.deviceId === (type === 'audio' ? componentConfig.selectedAudioDevice?.deviceId : componentConfig.selectedVideoDevice?.deviceId)velt-media-source-settings-options--label-selected: applied whendevice.deviceId === (type === 'audio' ? componentConfig.selectedAudioDevice?.deviceId : componentConfig.selectedVideoDevice?.deviceId)
velt-recording-preview--icon-button-off: applied when!componentConfig.mediaConfig.audio?.enabledvelt-recording-preview--recording-started: applied whencomponentConfig.countdownStartedvelt-recording-preview--settings-button-open: applied whencomponentConfig.isSettingsOpen
velt-video-editor-player--add-zoom-disabled-control: applied whencomponentConfig.isCurrentTimeInZoomSection || !componentConfig.canVideoSupportZoomvelt-video-editor-player--apply-disabled-control: applied whencomponentConfig.isLoading || componentConfig.timelineData.trim.sections.length === 0velt-video-editor-player--close-disabled-control: applied whencomponentConfig.isLoadingvelt-video-editor-player--delete-disabled-control: applied whencomponentConfig.timelineData.trim.selectedSectionIndex === -1 && componentConfig.timelineData.scale.selectedSectionIndex === -1velt-video-editor-player--download-disabled-control: applied whencomponentConfig.isDownloadingvelt-video-editor-player--preview-trim-button-active: applied whencomponentConfig.isPlayingTrimPreviewvelt-video-editor-player--preview-trim-button-has-scale: applied whencomponentConfig.timelineData.scale.sections.length > 0velt-video-editor-player--trim-disabled-control: applied whencomponentConfig.timelineData.trim.selectedSectionIndex === -1 && componentConfig.timelineData.scale.selectedSectionIndex === -1
velt-video-editor-player-timeline-trim-section-container--image-preview: applied whencomponentConfig.annotation?.attachments?.[0]?.previewImages?.length
velt-video-editor-player-zoom-button--active: applied whencomponentConfig.showZoomDropdown[index]
velt-video-editor-player-zoom-button-options-list-item--selected: applied whenoption.value === componentConfig.timelineData.scale.sections[index].zoomFactor
transcription
subtitles-dialogdisabled: applied whentranscription && !transcription?.transcriptedText
velt-transcription-content--item-time-selected: applied whenselected
velt-transcription-content-item--selected: applied whencomponentConfig.highlightedTextIndex === index
velt-transcription-button--default: applied whencomponentConfig.showDefaultBtnvelt-transcription-button--disabled: applied whencomponentConfig.transcription && !componentConfig.transcription?.transcriptedText
velt-transcription-floating-mode: applied whencomponentConfig.mode === 'floating'
summary-mode: applied whencomponentConfig.mode === 'summaryMode'velt-transcription-summary-mode: applied whencomponentConfig.mode === 'summaryMode'
summary-mode: applied whencomponentConfig.mode === 'summaryMode'velt-transcription-summary-mode: applied whencomponentConfig.mode === 'summaryMode'
velt-subtitles-button--default: applied whencomponentConfig.showDefaultBtnvelt-subtitles-button--disabled: applied whencomponentConfig.transcription && !componentConfig.transcription?.transcriptedText
activity-log
activity-log-header-filter-content-itemvelt-activity-log-header-filter-content-item--active: applied whenisActive
tag
tag-dialogedit-mode: applied wheneditMode
pin-dragging: applied whenannotationDraging
arrow
arrow-pin-portalpin-dragging: applied whencomponentConfig.annotationDragging
active: applied whenaddArrowMode
s-arrow-annotation-draggable: applied whenisEditables-arrow-annotation-handle-dragging: applied whenisResizings-arrow-annotation-selected: applied whenarrowPinSelected
area
area-toolactive: applied whenaddAreaMode
drag-disabled: applied when!componentConfig.pinDragEnabled || componentConfig.areaPinAnnotation?.from?.userId !== user?.userId
autocomplete
autocomplete-panels-comment-autocomplete-panel-dark: applied whendarkModevelt-autocomplete-inline-option--disabled: applied whenitem?.disabledvelt-group-member-option: applied whenitem.isGroupMembervelt-group-option: applied whenitem.isGroupHeader
velt-autocomplete-empty--error: applied whennewUserContactError(add-contact lookup failed)
velt-autocomplete-option-description--secondary: applied whenuserContact.name?.length! > 0
velt-autocomplete-option--multi-select: applied whenmultiSelectvelt-autocomplete-option--selected: applied whenisSelected
current-user-chip: applied whencomponentConfig?.user?.userId && componentConfig?.contact?.userId === componentConfig?.user?.userIdvelt-autocomplete--contact-chip-current-user: applied whencomponentConfig?.user?.userId && componentConfig?.contact?.userId === componentConfig?.user?.userId
view
view-analyticsactive: applied whencomponentConfig.treadsVisible
bottom-sheet: applied whencomponentConfig.bottomSheetMode
rewriter
rewriter-dialogbottom-sheet: applied whencomponentConfig.bottomSheetModedisabled: applied when!prompt?.lengthdisabled: applied whencomponentConfig.loading || componentConfig.searchCount >= 3disabled: applied whencomponentConfig.selectedOptionIndex < 0s-selected: applied whencomponentConfig.selectedOptionIndex === index
Structural root classes (in-scope, always-on)
These are always-renderedvelt-* element classes for the in-scope comment & notification surfaces: present whenever the element renders, with no state condition. Target them to restructure/skin a surface independently of its conditional state classes. (Verified verbatim against the SDK component templates.)
comment dialog / pin / composer
velt-comment-dialog: comment dialog root (structural)velt-comment-pin: comment pin root (structural)velt-composer: composer root (structural); mode variantsvelt-composer--comment-composer-mode,velt-composer--inline-comment-section-mode,velt-composer--multi-thread-modevelt-composer--submit-button: composer send/submit button (structural)velt-composer--input-text-wrap: composer input wrapper (structural)
velt-comment-attachment: attachment root, file/“other” attachment (structural)velt-comment-attachment--image: image attachment root (structural)velt-comment-attachment--icon: attachment file-type icon (structural)velt-comment-attachment--details: attachment details container (structural)velt-comment-attachment--actions: attachment actions container (structural)velt-attachment-preview-image: image attachment preview (structural)
velt-comment-sidebar-filter: filter panel root, v1 (structural)velt-comment-sidebar-filter-button: filter trigger button, v1 (structural)velt-comment-sidebar-filter-item: filter list item root, v1 (structural)velt-comment-sidebar-filter-search: filter search container, v1 (structural)velt-comment-sidebar-filter-container-v2: filter container/panel root, v2 (structural)velt-comment-sidebar-filter-dropdown-v2: filter dropdown root, v2 (structural)velt-comment-sidebar-filter-dropdown-trigger-v2: filter dropdown trigger root, v2 (structural)velt-comment-sidebar-filter-button-v2: filter button root, v2 (structural)
velt-notifications-panel: notifications panel root (structural)velt-notification-panel--settings: settings panel root (structural)velt-notification-panel--settings-accordion: settings accordion root (structural)velt-notification-panel--settings-accordion-container: accordion container (structural)velt-notification-panel--settings-accordion-trigger: accordion trigger root (structural)velt-notification-panel--settings-accordion-content: accordion content root (structural)velt-notification-panel--settings-accordion-trigger-selected: selected-value wrapper inside the trigger (structural, always-on, not a state class; for the open/expanded state usevelt-notification-panel--settings-accordion-open)velt-notification-panel--settings-mute-all-toggle: mute-all toggle root (structural)velt-notification-panel--settings-mute-all-toggle-container: mute-all toggle container (structural)
velt-reactions-panel: reactions panel root (structural)
Additional stateful classes & corrections (in-scope)
Newly verified conditional classes plus corrections to commonly-misremembered names. Document absences: three names that are often assumed to be classes are not runtime classes.velt-comment-pin-open: applied to the comment pin when selected (componentConfig.uiState.commentPinSelected && !annotationDragging). There is novelt-comment-pin-active:velt-comment-pin-openis the real state class (also listed under comment-pin above).velt-reaction-tool-open: toggled on the reaction tool host when the reaction picker/tooltip is open (tooltipVisible); removed when closed.velt-notification-panel--settings-accordion-open: applied to a settings accordion when expanded (componentConfig.uiState.settingsAccordionExpanded[id]). Companion modifiers in the same subtree:velt-notification-panel--settings-accordion-container-expanded,...-content-item-container-selected.velt-comment-sidebar-minimal-filter-content-item--filter-resolved/--filter-unread/--sort-unread: structural modifiers applied per dropdown item (one per item, always-on, not condition-toggled). Multi-thread twins:velt-multi-thread-comment-dialog-minimal-filter-content-item--filter-resolved/--filter-unread/--sort-unread.- Absence, not CSS classes:
velt-comment-disabledandvelt-area-pin-activedo not exist as classes; they are the data attributesdata-velt-comment-disabled="true"anddata-velt-area-pin-active="true". Style them via the attribute selector (e.g.[data-velt-area-pin-active="true"]), not a.velt-…class.
base element selectors (always-on, confirmed by live-DOM inspection)
The classes above are mostly stateful (applied under a condition). These are the stable, always-rendered Velt element classes to use for per-element measurement. They are curated into the manifest’scssClasses so verification has a design-agnostic selector for each measured leaf, independent of whatever class names you use for .hw-* wrappers. They carry no state condition; they are present whenever the element renders. Confirmed against the live DOM (shadowDom={false}).
thread-card
velt-thread-card--name: applied when the thread card renders the author namevelt-thread-card--time: applied when the thread card renders the timestampvelt-thread-card--message: applied when the thread card renders the comment textvelt-mention: applied when the message text contains an @mention (scope mention CSS to.velt-thread-card--message .velt-mention, never the author name: R23)
velt-composer-input--message: applied when the composer input rendersvelt-composer--submit-button: applied when the composer renders its send/submit button
s-user-avatar-container: applied when a user avatar renders (the shared avatar primitive, used by thread cards and the composer)

