/* SPDX-License-Identifier: AGPL-3.0-or-later */ :global(.lk-grid-layout) { --lk-col-count: 1; --lk-row-count: 1; --grid-gap: 0.75rem; display: grid; grid-template-columns: repeat(var(--lk-col-count), 1fr); gap: var(--grid-gap); width: 100%; height: 100%; max-width: 100%; max-height: 100%; padding: 0; place-items: center; align-content: center; position: relative; } :global(.lk-grid-layout[data-lk-pagination='true']) { padding-bottom: calc(var(--grid-gap) * 2); } :global(:root) { --voice-surface-0: #0d0d0f; --voice-surface-1: #151517; --voice-surface-2: #1c1c1e; --voice-surface-3: #232326; --voice-surface-4: #2a2a2d; --voice-surface-5: #353539; --voice-overlay-base: #000; --voice-overlay-strong: rgba(0, 0, 0, 0.78); --voice-overlay: rgba(0, 0, 0, 0.62); --voice-overlay-soft: rgba(0, 0, 0, 0.46); --voice-overlay-subtle: rgba(0, 0, 0, 0.32); --voice-overlay-light: rgba(255, 255, 255, 0.12); --voice-overlay-light-strong: rgba(255, 255, 255, 0.2); --voice-overlay-light-bold: rgba(255, 255, 255, 0.48); --voice-text-strong: #fff; --voice-text-muted: rgba(255, 255, 255, 0.72); --voice-text-subtle: rgba(255, 255, 255, 0.52); --voice-shadow-base: #000; --voice-shadow-strong: color-mix(in srgb, var(--voice-shadow-base) 40%, transparent); --voice-shadow-medium: color-mix(in srgb, var(--voice-shadow-base) 30%, transparent); --voice-shadow-soft: color-mix(in srgb, var(--voice-shadow-base) 20%, transparent); --voice-status-success: var(--status-online); --voice-status-success-bg: color-mix(in srgb, var(--voice-status-success) 20%, transparent); --voice-status-success-bg-solid: color-mix(in srgb, var(--voice-status-success) 20%, var(--voice-surface-2)); --voice-status-success-bg-strong: color-mix(in srgb, var(--voice-status-success) 30%, transparent); --voice-status-success-bg-strong-solid: color-mix(in srgb, var(--voice-status-success) 30%, var(--voice-surface-2)); --voice-status-warning: var(--status-warning); --voice-status-warning-alt: var(--status-idle); --voice-status-caution: var(--alert-caution-color); --voice-status-warning-bg: color-mix(in srgb, var(--voice-status-warning-alt) 20%, transparent); --voice-status-danger: var(--status-danger); --voice-status-danger-bg: color-mix(in srgb, var(--voice-status-danger) 20%, transparent); --voice-status-danger-bg-solid: color-mix(in srgb, var(--voice-status-danger) 20%, var(--voice-surface-2)); --voice-status-danger-bg-strong: color-mix(in srgb, var(--voice-status-danger) 30%, transparent); --voice-status-danger-bg-strong-solid: color-mix(in srgb, var(--voice-status-danger) 30%, var(--voice-surface-2)); --voice-hud-material-top: #000; --voice-hud-material-bottom: #000; --voice-hud-material-highlight: transparent; --voice-hud-material-border: rgba(255, 255, 255, 0.1); --voice-hud-material-shadow: 0 0.125rem 0.375rem rgba(0, 0, 0, 0.24); --voice-hud-material-blur: none; --voice-hud-button-bg: #000; --voice-hud-button-bg-hover: #111; --voice-edge-gradient-extension: 2.5rem; --voice-edge-gradient-base: rgba(0, 0, 0, 0.84); --voice-edge-gradient-mid: rgba(0, 0, 0, 0.58); --voice-edge-gradient-feather: rgba(0, 0, 0, 0.24); --voice-header-gradient: linear-gradient( to bottom, var(--voice-edge-gradient-base) 0%, var(--voice-edge-gradient-mid) 38%, var(--voice-edge-gradient-feather) 70%, transparent 100% ); --voice-footer-gradient: linear-gradient( to top, var(--voice-edge-gradient-base) 0%, var(--voice-edge-gradient-mid) 38%, var(--voice-edge-gradient-feather) 70%, transparent 100% ); } .lkParticipantTile { --speaking-indicator-width: 0.21875rem; position: relative; display: flex; flex-direction: column; container-type: size; overflow: hidden; border-radius: 0.75rem; background-color: var(--voice-surface-2); width: 100%; aspect-ratio: 16 / 9; max-width: 100%; } .lkParticipantTile::after { content: ''; position: absolute; inset: 0; border-radius: var(--radius-lg); border: 0 solid var(--voice-status-success); transition-property: border; transition-delay: 0.1s; transition-duration: 0.2s; pointer-events: none; } .pinnedParticipant::after { border-width: 0 !important; } .lkParticipantTile[data-speaking='true']::after { transition-delay: 0s; transition-duration: 0.2s; border-width: var(--speaking-indicator-width); } .lkParticipantTile video { width: 100%; height: 100%; object-fit: contain; background-color: var(--voice-surface-0); border-radius: var(--radius-lg); } .lkParticipantTile[data-source='screen_share'] { background-color: var(--voice-surface-0); } .lkParticipantTile[data-source='screen_share'] video { object-fit: contain; } .lkParticipantPlaceholder { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background-color: var(--voice-surface-3); opacity: 0; transition: none; pointer-events: none; border-radius: var(--radius-lg); } .lkParticipantTile[data-video-muted='true'] .lkParticipantPlaceholder { opacity: 1; } .lkParticipantPlaceholder .avatar { font-size: 3rem; font-weight: 600; color: var(--text-primary); } .lkParticipantMetadata { position: absolute; inset: 0.375rem; display: block; line-height: 1.2; z-index: 10; min-width: 0; pointer-events: none; } .participantMetadataLabel { --participant-metadata-max-width: min(34ch, calc(100cqw - 1rem)); display: inline-flex; align-items: center; gap: 0.1875rem; overflow: hidden; white-space: nowrap; max-width: var(--participant-metadata-max-width); margin-left: 0; line-height: 1.2; } .participantName { margin-left: 0.1875rem; line-height: 1.2; } .participantConn { margin-left: 0; line-height: 1.2; } .lkParticipantMetadataItem { display: inline-flex; align-items: center; gap: 0; padding: 0.1875rem 0.375rem; border: 0.0625rem solid var(--voice-hud-material-border); border-radius: 0.5625rem; background: #000; box-shadow: 0 0.125rem 0.375rem rgba(0, 0, 0, 0.18); color: var(--voice-text-strong); font-size: 0.75rem; font-weight: 500; line-height: 1.2; min-width: 0; pointer-events: auto; } .lkParticipantIcons { display: inline-flex; align-items: center; gap: 0.375rem; } .participantMetadataMenuButton { display: inline-flex; align-items: center; justify-content: center; width: 1.25rem; height: 1.25rem; margin: -0.125rem 0.1875rem -0.125rem -0.1875rem; border-radius: 0.4375rem; color: rgba(255, 255, 255, 0.78); cursor: pointer; pointer-events: auto; transition: background-color 80ms linear, color 80ms linear; } .participantMetadataMenuButton:hover, .participantMetadataMenuButton:focus-visible, .participantMetadataMenuButton[data-context-menu-open='true'] { background-color: #111; color: #fff; } .participantMetadataMenuButton svg { width: 0.9375rem; height: 0.9375rem; } .lkParticipantMetadataItem > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } .lkParticipantMetadataItem:first-child { position: absolute; left: 0; bottom: 0; flex: 0 1 auto; min-width: 0; max-width: min(100%, calc(100cqw - 0.75rem)); } .tileControlPill { position: absolute; top: 0.375rem; left: 0.375rem; display: inline-flex; align-items: stretch; height: 1.5rem; background: #000; border-radius: 0.5rem; color: var(--voice-text-strong); opacity: 0; border: 0.0625rem solid var(--voice-hud-material-border); box-shadow: var(--voice-hud-material-shadow); overflow: hidden; z-index: 10; pointer-events: none; transition: opacity 80ms linear, background-color 80ms linear; } .tileControlPill.tileControlPillPersistent { opacity: 1; pointer-events: auto; } .tileControlPillSlot { display: inline-flex; align-items: center; justify-content: center; min-width: 1.5rem; height: 100%; padding: 0; background: transparent; color: inherit; cursor: pointer; transition: background-color 80ms linear; } .tileControlPillSlot + .tileControlPillSlot { border-left: 0.0625rem solid var(--voice-hud-material-border); } .tileControlPillSlot:hover { background: linear-gradient(180deg, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.08) 100%); } .tileControlPillViewerSlot { gap: 0.1875rem; padding: 0 0.375rem; cursor: pointer; font-size: 0.625rem; font-weight: 600; font-variant-numeric: tabular-nums; } .tileControlPillViewerSlot:hover { background: linear-gradient(180deg, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.08) 100%); } .lkParticipantTile:hover .tileControlPill, .lkParticipantTile:focus-within .tileControlPill { opacity: 1; pointer-events: auto; } .gridLayoutWrapper { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 100%; height: 100%; overflow: visible; padding: 1rem 0; box-sizing: border-box; } .gridLayoutWrapperCompact { padding: max(clamp(0.25rem, 1.6cqh, 0.4rem), var(--compact-call-content-safe-top, 0px)) 0 max(clamp(0.35rem, 2cqh, 0.65rem), var(--compact-call-content-safe-bottom, 0px)); } .focusLayoutContainer { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; } .focusLayoutScroller { flex: 1 1 auto; display: flex; width: 100%; min-width: 0; min-height: 0; } .focusLayoutScrollerContent { width: 100%; min-width: 0; min-height: 0; } .gridLayoutScroller { display: flex; width: 100%; height: 100%; min-width: 0; min-height: 0; } .gridLayoutStaticViewport { overflow: hidden; } .gridLayoutScrollerContent { width: 100%; min-width: 0; min-height: 0; display: flex; flex-direction: column; } .gridLayoutScrollBody { min-height: 100%; height: 100%; flex: 1 0 auto; display: flex; flex-direction: column; justify-content: center; width: 100%; } .gridLayoutScrollBodyCompact { min-height: 100%; } .focusLayoutScrollBody { min-height: 100%; display: flex; flex-direction: column; align-items: stretch; width: 100%; gap: 1rem; padding-bottom: 0; } .focusExpandedScrollBody { --focus-expanded-mini-columns: 1; --focus-expanded-mini-grid-gap: var(--focus-mini-grid-gap, 0.75rem); --focus-expanded-mini-tile-max-width: var(--focus-mini-tile-max-width, 23.75rem); --focus-expanded-mini-section-width: min(96cqw, 105rem); --focus-expanded-mini-section-padding-inline: clamp(0.5rem, 1.2vw, 1.25rem); --focus-expanded-mini-content-width: max( 0px, calc(var(--focus-expanded-mini-section-width) - (2 * var(--focus-expanded-mini-section-padding-inline))) ); --focus-expanded-mini-column-width: max( 0px, calc( ( var(--focus-expanded-mini-content-width) - ((var(--focus-expanded-mini-columns) - 1) * var(--focus-expanded-mini-grid-gap)) ) / var(--focus-expanded-mini-columns) ) ); --focus-expanded-mini-row-height: calc( min(var(--focus-expanded-mini-tile-max-width), var(--focus-expanded-mini-column-width)) * 9 / 16 ); --focus-expanded-reserved-bottom-height: calc(44px + 2.5rem + var(--focus-expanded-mini-row-height)); --focus-expanded-main-max-height: max(180px, calc(100cqh - var(--focus-expanded-reserved-bottom-height))); min-height: 100%; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; width: 100%; gap: 0.75rem; padding-bottom: 1rem; } .focusExpandedMainSection { width: 100%; display: flex; justify-content: center; padding-top: 0.125rem; flex: 0 0 auto; } .focusExpandedMainGridViewport { width: min(100%, calc(var(--focus-expanded-main-max-height) * 16 / 9)); max-width: 95rem; aspect-ratio: 16 / 9; min-height: min(180px, var(--focus-expanded-main-max-height)); max-height: var(--focus-expanded-main-max-height); overflow: hidden; } .focusExpandedMainGridViewport > * { width: 100%; height: 100%; } .focusExpandedToggleRow { width: min(96%, 105rem); max-width: 105rem; margin-inline: auto; display: flex; justify-content: center; padding-top: 0.125rem; padding-bottom: 0.25rem; flex: 0 0 auto; } .carouselToggleWrap { position: absolute; left: 50%; bottom: var(--voice-participants-toggle-bottom, 0.5rem); transform: translateX(-50%); width: auto; display: flex; align-items: center; justify-content: center; margin: 0; padding: 0; z-index: 60; } .carouselToggle { width: 2.5rem; height: 2.5rem; min-width: 2.5rem; min-height: 2.5rem; padding: 0; position: relative; display: inline-flex; align-items: center; justify-content: center; background: #000; color: var(--text-primary); border-radius: 0.9375rem; cursor: pointer; border: 0.0625rem solid var(--voice-hud-material-border); box-shadow: var(--voice-hud-material-shadow); z-index: 1; transition: background-color 80ms linear; } .carouselToggle:hover { background: #111; } .focusLayoutMainWrapper { position: relative; flex: 1 1 auto; min-height: 0; width: 100%; max-width: 100%; display: flex; align-items: center; justify-content: center; } .focusLayoutMembersRow { position: absolute; left: 0; right: 0; bottom: var(--voice-focus-members-row-bottom, 0px); width: 100%; height: var(--voice-focus-members-row-height, 7.25rem); display: flex; align-items: center; justify-content: flex-start; gap: 0.5rem; padding: 0.375rem clamp(0.75rem, 2vw, 1.5rem); box-sizing: border-box; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; -ms-overflow-style: none; z-index: 2; pointer-events: auto; } .focusLayoutMembersRow::-webkit-scrollbar { display: none; width: 0; height: 0; } .focusLayoutMembersRowInner { display: flex; flex: 0 0 auto; flex-direction: row; align-items: center; gap: 0.5rem; min-width: max-content; margin-inline: auto; } .focusLayoutMembersRowTile { flex: 0 0 auto; width: min(clamp(7rem, 10vw, 9.75rem), calc((var(--voice-focus-members-row-height, 7rem) - 0.75rem) * 16 / 9)); aspect-ratio: 16 / 9; } .focusLayoutMembersRowTile .lkParticipantTile { width: 100%; height: 100%; aspect-ratio: 16 / 9; border-radius: 0.5rem; } .focusMembersToggleWrap { position: absolute; left: 50%; bottom: var(--voice-focus-members-toggle-bottom, var(--voice-focus-control-clearance, 4.5rem)); transform: translateX(-50%); display: flex; align-items: center; justify-content: center; pointer-events: auto; z-index: 40; } .focusLayoutContentFullscreenMembersVisible .focusMembersToggleWrap { --voice-focus-members-toggle-bottom: calc( var(--voice-focus-control-clearance, 4.5rem) + var(--voice-focus-members-row-height, 7.25rem) + 0.5rem ); } .focusMembersToggle { display: inline-flex; align-items: center; justify-content: center; gap: 0.375rem; height: 2rem; padding: 0 0.75rem; border-radius: 62.4375rem; border: 0.0625rem solid var(--voice-hud-material-border); background: #000; color: var(--voice-text-strong); cursor: pointer; box-shadow: var(--voice-hud-material-shadow); transition: background-color 80ms linear; } .focusMembersToggle:hover { background: #111; } .focusMembersToggleIcon { width: 1rem; height: 1rem; } .focusMembersToggleFocusRing { border-radius: 624.9375rem; } .focusMiniGridSection { width: min(96%, 105rem); max-width: 105rem; margin-inline: auto; padding: 0 var(--focus-expanded-mini-section-padding-inline, clamp(0.5rem, 1.2vw, 1.25rem)) 1rem; box-sizing: border-box; flex: 0 0 auto; } .focusMiniGrid { --focus-mini-columns: 1; --focus-mini-grid-gap: 0.75rem; --focus-mini-tile-max-width: 23.75rem; display: flex; flex-wrap: wrap; justify-content: center; align-content: flex-start; width: 100%; gap: var(--focus-mini-grid-gap); } .focusMiniGridTile { width: min( calc((100% - (var(--focus-mini-columns) - 1) * var(--focus-mini-grid-gap)) / var(--focus-mini-columns)), var(--focus-mini-tile-max-width) ); max-width: min( calc((100% - (var(--focus-mini-columns) - 1) * var(--focus-mini-grid-gap)) / var(--focus-mini-columns)), var(--focus-mini-tile-max-width) ); min-width: 0; flex: 0 0 auto; flex-shrink: 0; } .focusMiniGridTile .lkParticipantTile { width: 100%; height: auto; aspect-ratio: 16 / 9; } .focusLayoutMain { position: relative; --focus-main-aspect-ratio-value: 1.7777777778; width: 100%; max-width: min(100%, calc(min(76dvh, calc(100cqh - 3rem)) * var(--focus-main-aspect-ratio-value))); height: auto; max-height: min(76dvh, calc(100cqh - 3rem)); aspect-ratio: var(--focus-main-aspect-ratio-value); overflow: hidden; z-index: 1; margin-inline: auto; } .focusLayoutMain .lkParticipantTile { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 0; } .focusLayoutMain .lkParticipantTile[data-source='screen_share'] { border-radius: 0; } .focusLayoutMain .lkParticipantTile::after { border-radius: 0; } .focusLayoutMain .lkParticipantTile[data-source='screen_share']::after { border-radius: 0; } .focusLayoutMain .lkParticipantTile video { border-radius: 0; object-fit: contain; width: 100%; height: 100%; } .focusLayoutMain .lkParticipantTile[data-source='screen_share'] video { border-radius: 0; object-fit: contain; } .focusLayoutMain .lkParticipantPlaceholder { border-radius: 0; } .focusLayoutMain .lkParticipantTile[data-source='screen_share'] .lkParticipantPlaceholder { border-radius: 0; } .lkParticipantTile[data-source='screen_share'] .lkParticipantPlaceholder { background-color: var(--voice-surface-0) !important; } .focusLayoutContent { position: relative; width: 100%; height: 100%; max-height: 100%; padding: 1rem 0; overflow: hidden; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 0; box-sizing: border-box; container-type: size; --content-padding: 2rem; } .focusLayoutContentCompact { padding: 0; --content-padding: clamp(0.25rem, 1.6cqh, 0.5rem); } .focusLayoutContentCompact .focusLayoutScrollBody { gap: clamp(0.25rem, 1.6cqh, 0.5rem); } .focusLayoutContentCompact .focusLayoutMainWrapper { padding-inline: 0; } .focusLayoutContentCompact .focusLayoutMain { width: 100%; max-width: min(100%, calc(min(90dvh, calc(100cqh - 0.5rem)) * var(--focus-main-aspect-ratio-value))); max-height: min(90dvh, calc(100cqh - 0.5rem)); border-radius: 0; } .focusLayoutContentCompact .focusLayoutMain .lkParticipantTile, .focusLayoutContentCompact .focusLayoutMain .lkParticipantTile::after, .focusLayoutContentCompact .focusLayoutMain .lkParticipantPlaceholder, .focusLayoutContentCompact .focusLayoutMain .lkParticipantTile video { border-radius: 0; } .focusLayoutContentCompact .focusMiniGrid { --focus-mini-grid-gap: clamp(0.25rem, 1.6cqh, 0.5rem); --focus-mini-tile-max-width: clamp(9rem, 58cqh, 13.25rem); } .focusLayoutContentCompact .focusMiniGridSection { width: 100%; padding: 0 var(--content-padding) var(--content-padding); } .focusLayoutContentNoParticipants { overflow: hidden; } .focusLayoutContentNoParticipants .focusLayoutScrollBody { height: 100%; } .focusLayoutContentNoParticipants .focusLayoutMain { max-height: 100%; } .focusLayoutContentCompact.focusLayoutContentNoParticipants .focusLayoutMain { max-height: 100%; } .focusLayoutParticipantsExpanded .focusLayoutMain { max-height: min(68dvh, calc(100cqh - 8rem)); } .focusLayoutParticipantsExpanded .focusLayoutScroller { min-height: 0; } .focusLayoutContentFullscreen { padding: 0; --content-padding: 0px; --voice-focus-control-clearance: 0px; --voice-focus-members-row-height: 0px; --voice-focus-members-row-bottom: 0px; } .focusLayoutContentFullscreen .focusLayoutMainWrapper { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; max-width: none; width: 100%; height: 100%; min-height: 0; } .focusLayoutContentFullscreen .focusLayoutMain { position: relative; inset: auto; width: min(100%, calc(100cqh * var(--focus-main-aspect-ratio-value))); height: auto; max-width: none; max-height: 100%; aspect-ratio: var(--focus-main-aspect-ratio-value); margin-inline: 0; box-sizing: border-box; padding-top: 0; padding-bottom: 0; background-color: var(--voice-surface-0); } .focusLayoutContentFullscreen .focusLayoutMain .lkParticipantTile { position: relative; inset: auto; width: 100%; height: 100%; background-color: transparent; } .focusLayoutContentFullscreen .focusLayoutScrollBody { height: 100%; min-height: 0; gap: 0; padding-bottom: 0; justify-content: stretch; flex: 1 1 auto; } .focusLayoutContentAppFullscreen { --voice-focus-control-clearance: calc(4.5rem + env(safe-area-inset-bottom, 0px)); --voice-focus-members-row-height: clamp(5.375rem, 13cqh, 7rem); --voice-focus-members-row-bottom: var(--voice-focus-control-clearance); --voice-focus-members-toggle-bottom: calc(var(--voice-focus-control-clearance) + 0.5rem); } .focusLayoutContentAppFullscreen .focusLayoutMain { padding-top: 0; padding-bottom: 0; } .focusLayoutContentAppFullscreen.focusLayoutContentFullscreenMembersVisible { --voice-focus-safe-bottom: calc( var(--voice-focus-members-row-height, 7.25rem) + var(--voice-focus-control-clearance) ); } .focusLayoutContentFullscreenMembersVisible::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: calc(var(--voice-focus-members-row-bottom, 0px) + var(--voice-focus-members-row-height, 7.25rem) + 2.5rem); z-index: 1; pointer-events: none; background: linear-gradient(to top, rgb(0 0 0 / 0.7) 0%, rgb(0 0 0 / 0.55) 45%, rgb(0 0 0 / 0) 100%); } @container (min-width: 620px) { .focusExpandedScrollBody { --focus-expanded-mini-columns: 2; } .focusMiniGrid { --focus-mini-columns: 2; } } @container (min-width: 760px) { .focusExpandedScrollBody { --focus-expanded-mini-columns: 3; } .focusMiniGrid { --focus-mini-columns: 3; } } @container (min-width: 1040px) { .focusExpandedScrollBody { --focus-expanded-mini-columns: 4; } .focusMiniGrid { --focus-mini-columns: 4; } } .voiceCallFullscreen { position: fixed; inset: 0; width: 100%; height: 100%; box-sizing: border-box; margin: 0; border: 0; outline: 0; z-index: 39999; background-color: #000; } .voiceCallFullscreen::backdrop { background-color: #000; } :global(:root[data-voice-call-fullscreen='true']), :global(:root[data-voice-call-fullscreen='true'] body) { background-color: #000; } .voiceRoot { position: relative; --voice-hud-opacity: 0; --voice-hud-pointer-events: none; --voice-hud-transition-duration: 220ms; --voice-hud-transition-easing: cubic-bezier(0.2, 0, 0, 1); } .voiceRoot.forceHudVisible { --voice-hud-opacity: 1; --voice-hud-pointer-events: auto; } .voiceRoot.pointerActive, .voiceRoot:not(.voiceCallFullscreen):focus-within, .voiceRoot.contextMenuActive, .voiceRoot.keyboardModeActive, .voiceRoot.containerResizing, .voiceRoot.interactionActive { --voice-hud-opacity: 1; --voice-hud-pointer-events: auto; } .voiceRoot :where( .voiceChrome, .carouselToggleWrap, .focusMembersToggleWrap, .lkParticipantMetadata, .lkParticipantTile .tileControlPill ) { opacity: var(--voice-hud-opacity); pointer-events: var(--voice-hud-pointer-events); transition: opacity var(--voice-hud-transition-duration) var(--voice-hud-transition-easing); } .voiceRoot .lkParticipantMetadata { pointer-events: none; } .lkParticipantTile[data-tile-presentation='focus-main'] .lkParticipantMetadataItem, .lkParticipantTile[data-tile-presentation='focus-secondary'] .lkParticipantMetadataItem { pointer-events: none; } .voiceRoot .lkParticipantTile .tileControlPill.tileControlPillPersistent { opacity: 1; pointer-events: auto; } .voiceRoot .lkParticipantTile:is(:hover, :focus-within) .tileControlPill { opacity: var(--voice-hud-opacity); pointer-events: var(--voice-hud-pointer-events); } .tileContextMenuActive { --voice-hud-opacity: 1; --voice-hud-pointer-events: auto; } @container (max-width: 280px) { .lkParticipantMetadata { inset: 0.3125rem; } .lkParticipantMetadataItem { padding: 0.125rem 0.3125rem; border-radius: 0.5rem; font-size: 0.6875rem; } .participantMetadataMenuButton { width: 1.125rem; height: 1.125rem; margin-right: 0.125rem; } .tileControlPill { top: 0.3125rem; left: 0.3125rem; height: 1.375rem; border-radius: 0.4375rem; } .tileControlPillSlot { min-width: 1.375rem; } } @container (max-width: 220px) { .participantMetadataMenuButton { display: none; } .lkParticipantIcons { gap: 0.25rem; } } .voiceHeader { grid-area: header; z-index: 25; --channel-header-text-primary: #fff; --channel-header-text-muted: #fff; --channel-header-text-tertiary: #fff; --channel-header-divider-color: #fff; --channel-header-hover-background: rgb(255 255 255 / 0.16); --channel-header-update-icon-color: #fff; --voice-call-header-text: #fff; background: transparent !important; border-bottom: none !important; box-shadow: none !important; color: var(--channel-header-text-primary); position: relative; isolation: isolate; } .voiceEdgeFadeTop, .voiceEdgeFadeBottom { isolation: isolate; } .voiceEdgeFadeTop::before, .voiceEdgeFadeBottom::before { content: ''; position: absolute; left: 0; right: 0; background: var(--voice-edge-gradient); pointer-events: none; } .voiceEdgeFadeTop::before { --voice-edge-gradient: var(--voice-header-gradient); top: 0; bottom: calc(0px - var(--voice-edge-gradient-extension)); z-index: -1; } .voiceEdgeFadeBottom::before { --voice-edge-gradient: var(--voice-footer-gradient); bottom: 0; height: calc(100% + var(--voice-edge-gradient-extension)); z-index: 0; } .voiceEdgeFadeBottom > * { position: relative; z-index: 1; pointer-events: auto; } .mobileFocusMembersVisible .voiceEdgeFadeBottom::before { height: calc(100% + clamp(8.25rem, 20dvh, 13.75rem)); } .voiceHeaderBackButton, .voiceHeaderIconButton { width: 2.125rem; height: 2.125rem; border: 0.0625rem solid rgba(255, 255, 255, 0.08); border-radius: 0.8125rem; background-color: var(--voice-hud-button-bg); box-shadow: inset 0 0.0625rem 0 rgba(255, 255, 255, 0.055); color: rgba(255, 255, 255, 0.84); transition: background-color 80ms linear, border-color 80ms linear, color 80ms linear; } .voiceHeaderBackButton:hover, .voiceHeaderIconButton:hover, .voiceHeaderIconButton[aria-pressed='true'], .voiceHeaderIconButton[aria-expanded='true'] { border-color: rgba(255, 255, 255, 0.14); background-color: var(--voice-hud-button-bg-hover); color: #fff; } .voiceHeaderBackButton > svg, .voiceHeaderIconButton > svg { width: 1.25rem; height: 1.25rem; } :global(.lk-pagination-indicator) { position: absolute; left: 50%; bottom: 0.75rem; transform: translateX(-50%); display: flex; gap: 0.375rem; border: 0.0625rem solid var(--voice-hud-material-border); border-radius: 62.4375rem; background: #000; box-shadow: 0 0.125rem 0.375rem rgba(0, 0, 0, 0.18); padding: 0.25rem 0.5rem; } :global(.lk-pagination-indicator > span) { width: 0.375rem; height: 0.375rem; border-radius: 624.9375rem; background: var(--voice-overlay-light-bold); } :global(.lk-pagination-indicator > span[data-lk-active]) { background: var(--voice-text-strong); } :global(.lk-pagination-control) { position: absolute; left: 50%; bottom: 0.75rem; transform: translateX(-50%); border: 0.0625rem solid var(--voice-hud-material-border); border-radius: 62.4375rem; background: #000; box-shadow: 0 0.125rem 0.375rem rgba(0, 0, 0, 0.18); padding: 0.25rem 0.5rem; display: flex; align-items: center; gap: 0.5rem; color: var(--voice-text-strong); pointer-events: auto; } :global(.lk-pagination-control .lk-pagination-count) { display: none; } @media (max-width: 768px) { .mainContent { --voice-call-horizontal-padding: 1rem; padding-left: 1rem; padding-right: 1rem; justify-content: flex-start; align-items: stretch; gap: 0.5rem; } .focusLayoutMain { padding-top: 0; padding-bottom: 0; } .focusLayoutMain .lkParticipantTile { max-width: 100%; } .focusMiniGrid { --focus-mini-tile-size: clamp(var(--focus-mini-tile-min-width), 24vw, var(--focus-mini-tile-max-width)); --focus-mini-grid-gap: 0.5rem; } .focusMiniGridTile { max-width: var(--focus-mini-tile-max-width); } .gridLayoutWrapper { padding-top: 0; padding-bottom: 0; } .focusLayoutContent { --content-padding: 1.5rem; } .carouselToggleWrap { margin-top: 0.5rem; } .voiceRoot { --voice-hud-opacity: 1; --voice-hud-pointer-events: auto; } .controlBarContainer { --voice-control-horizontal-padding: 1rem; --voice-control-top-padding: 0.5rem; --voice-control-bottom-padding: calc(0.75rem + env(safe-area-inset-bottom, 0px)); } .fullscreenButtonWrap { bottom: calc(0.75rem + env(safe-area-inset-bottom, 0px)); right: 1rem; } } .screenshareGridLayout { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; } .screenshareGridLayout .lkParticipantTile { width: 100%; height: 100%; aspect-ratio: 16 / 9; } .root { position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; grid-template-areas: 'header' 'main' 'footer'; height: 100%; width: 100%; background-color: #000; --voice-focus-safe-top: 4rem; --voice-focus-safe-bottom: calc(4.5rem + env(safe-area-inset-bottom, 0px)); } .rootFocused .mainContent { grid-row: 1 / -1; grid-column: 1 / -1; z-index: 1; } .rootFocused .voiceHeader { grid-area: header; grid-column: 1 / -1; grid-row: 1; z-index: 25; } .rootFocused .controlBarContainer { grid-row: 3; z-index: 30; } .connectionStatusContainer { display: flex; align-items: center; gap: 0.5rem; border-radius: 62.4375rem; padding-left: 0.75rem; padding-right: 0.75rem; padding-top: 0.25rem; padding-bottom: 0.25rem; border: 0.0625rem solid color-mix(in srgb, currentColor 18%, transparent); background: #000; box-shadow: inset 0 0.0625rem 0 rgba(255, 255, 255, 0.06); font-weight: 600; font-size: 0.75rem; line-height: 1rem; } .statusConnecting { background-color: #000; color: var(--voice-status-warning); } .statusReconnecting { background-color: #000; color: var(--voice-status-warning); } .statusDisconnected { background-color: #000; color: var(--voice-status-danger); } .statusConnected { background-color: #000; color: var(--voice-status-success); } .connectionStatusDot { height: 0.5rem; width: 0.5rem; border-radius: 624.9375rem; background-color: currentColor; animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .mainContent { grid-area: main; position: relative; display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100%; overflow-x: hidden; overflow-y: hidden; --voice-call-horizontal-padding: clamp(1rem, 8vw, 14rem); --voice-call-safe-top-padding: max( clamp(1.25rem, 3.5dvh, 2.25rem), calc(var(--voice-edge-gradient-extension) + 0.5rem) ); --voice-call-safe-bottom-padding: max( clamp(1.25rem, 3.5dvh, 2.25rem), calc(var(--voice-edge-gradient-extension) + 0.5rem) ); padding-left: var(--voice-call-horizontal-padding); padding-right: var(--voice-call-horizontal-padding); padding-top: var(--voice-call-safe-top-padding); padding-bottom: var(--voice-call-safe-bottom-padding); min-height: 0; min-width: 0; box-sizing: border-box; container-type: size; } .mainContentGrid { --voice-call-horizontal-padding: 0px; } .mainContentFocusFullscreen { --voice-call-horizontal-padding: 0px; --voice-call-safe-top-padding: 0px; --voice-call-safe-bottom-padding: 0px; position: relative; inset: auto; height: 100%; z-index: 1; } .audioAvatarFallback { flex: 1 1 auto; min-height: 0; width: 100%; display: flex; align-items: center; justify-content: center; padding: 0 clamp(1rem, 6vw, 4rem); box-sizing: border-box; } .audioAvatarFallbackList { --avatar-voice-indicator-cutout-surface: #000; max-width: 56rem; } .voiceCallPendingMain { grid-area: main; position: relative; display: flex; align-items: center; justify-content: center; min-width: 0; min-height: 0; background: #000; overflow: hidden; } .controlBarContainer { grid-area: footer; position: relative; z-index: 30; display: flex; justify-content: center; background: transparent; --voice-control-horizontal-padding: 1.5rem; --voice-control-top-padding: 0.5rem; --voice-control-bottom-padding: calc(0.75rem + env(safe-area-inset-bottom, 0px)); padding-left: var(--voice-control-horizontal-padding); padding-right: var(--voice-control-horizontal-padding); padding-top: var(--voice-control-top-padding); padding-bottom: var(--voice-control-bottom-padding); pointer-events: none; } .fullscreenButtonWrap { position: absolute; right: clamp(1rem, 2vw, 2rem); bottom: calc(0.75rem + env(safe-area-inset-bottom, 0px)); z-index: 35; display: flex; align-items: center; justify-content: center; gap: var(--spacing-2); pointer-events: auto; } .fullscreenButtonWrap button, .fullscreenButtonWrap button:hover, .fullscreenButtonWrap button[aria-pressed='true'], .fullscreenButtonWrap button[aria-expanded='true'] { width: 2.625rem; height: 2.625rem; border: 0.0625rem solid rgba(255, 255, 255, 0.12); border-radius: 0.875rem; background-color: #000; box-shadow: 0 0.1875rem 0.625rem rgba(0, 0, 0, 0.26), inset 0 0.0625rem 0 rgba(255, 255, 255, 0.08); color: var(--voice-text-strong); transform: none; transition: background-color 140ms linear, border-color 140ms linear, color 140ms linear; } .fullscreenButtonWrap button > svg { width: 1.3rem; height: 1.3rem; } .fullscreenButtonWrap button:hover { border-color: rgba(255, 255, 255, 0.2); background-color: #111; color: #fff; } .srOnly { position: absolute; width: 0.0625rem; height: 0.0625rem; padding: 0; margin: -0.0625rem; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .iconMedium { height: 1.25rem; width: 1.25rem; } .carouselToggleFocusRing { border-radius: 624.9375rem; } .voiceCallSheetContent { display: flex; flex-direction: column; gap: 1rem; } .voiceCallSheetCompact { width: 100%; min-height: 0; border-radius: var(--radius-lg); overflow: hidden; } .streamFocusInfo { display: flex; align-items: center; gap: 0.5rem; height: 2rem; min-width: 0; flex-shrink: 1; overflow: hidden; -webkit-app-region: no-drag; } .streamFocusStreamer { display: flex; align-items: center; gap: 0.375rem; height: 100%; min-width: 0; flex-shrink: 1; overflow: hidden; -webkit-app-region: no-drag; } .streamFocusStreamerName { font-size: 0.875rem; line-height: 1.25rem; font-weight: 500; color: var(--voice-call-header-text, var(--text-primary)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .streamFocusTrackInfo { flex-shrink: 0; transform: scale(0.92); transform-origin: left center; } .streamFocusSpectators { display: flex; align-items: center; gap: 0.25rem; height: 2rem; flex-shrink: 0; cursor: pointer; -webkit-app-region: no-drag; } .streamFocusSpectators [data-flx='ui.avatars.avatar-stack.container'] { height: calc(var(--avatar-size) + (2 * var(--avatar-outline, 0.125rem))); padding-block: var(--avatar-outline, 0.125rem); -webkit-app-region: no-drag; } .headerStreamInfo { display: flex; align-items: center; gap: 0.5rem; flex-shrink: 0; margin-right: 0.25rem; } :global([data-voice-popout-window='true']) .voiceRoot { --voice-hud-opacity: 1; --voice-hud-pointer-events: auto; } :global([data-voice-popout-window='true']) .lkParticipantTile .tileControlPill { opacity: 1; pointer-events: auto; }