Files
fluxer/fluxer_app/src/features/app/components/layout/GuildsLayout.module.css
T

907 lines
19 KiB
CSS

/* SPDX-License-Identifier: AGPL-3.0-or-later */
.guildsLayoutContainer {
--layout-user-area-overlay-height: 0px;
--layout-user-area-reserved-height: 0px;
--layout-mobile-bottom-nav-reserved-height: 0px;
position: relative;
display: grid;
grid-template-columns: var(--layout-guild-list-width) minmax(0, 1fr);
grid-template-rows: minmax(0, 1fr);
grid-auto-rows: minmax(0, 1fr);
height: 100%;
min-height: 0;
max-height: 100%;
width: 100%;
min-width: 0;
max-width: 100%;
background-color: var(--background-secondary);
}
.guildsLayoutReserveSpace {
--layout-user-area-overlay-height: calc(var(--layout-user-area-height) + var(--layout-voice-connection-height, 0px));
}
.guildsLayoutReserveMobileBottomNav {
--layout-mobile-bottom-nav-reserved-height: var(--mobile-bottom-nav-height);
}
.guildsLayoutContainerMobile {
composes: guildsLayoutContainer;
grid-template-columns: 1fr;
background-color: var(--background-secondary);
}
.guildsLayoutFullscreen {
grid-template-columns: minmax(0, 1fr);
background-color: #000;
}
.guildListScrollerWrapper {
--scroller-track-block-end-inset: var(
--layout-user-area-overlay-height,
var(--layout-user-area-reserved-height, 0px)
);
grid-column: 1;
grid-row: 1;
min-height: 0;
height: calc(
100% -
var(--layout-user-area-reserved-height, 0px) -
var(--layout-mobile-bottom-nav-reserved-height, 0px)
);
width: var(--layout-guild-list-width);
min-width: 0;
background-color: var(--background-secondary);
position: relative;
z-index: var(--z-index-elevated-1);
}
.guildListScrollContainer {
height: 100%;
width: 100%;
min-width: 0;
background-color: var(--background-secondary);
--guild-badge-surface: var(--background-secondary);
padding-top: var(--spacing-1);
padding-bottom: var(--spacing-2);
}
.guildListContent {
--guild-list-item-size: var(--guild-icon-size);
--guild-list-item-box-size: 3rem;
--guild-list-item-gap: 0.375rem;
--guild-list-item-inset: calc((var(--guild-list-item-box-size) - var(--guild-list-item-size)) / 2);
--guild-folder-expanded-surface-size: var(--guild-list-item-box-size);
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
min-width: 0;
padding-bottom: calc(
var(--layout-user-area-overlay-height, var(--layout-user-area-reserved-height, 0px)) +
var(--spacing-2)
);
}
.guildListTopSection,
.guildListGuildsSection {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.guildListTopSection {
gap: var(--guild-list-item-gap);
}
.guildListGuildsSection {
position: relative;
gap: var(--guild-list-item-gap);
}
.guildListItems {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
gap: 0;
}
.guildListItemSlot {
display: flex;
justify-content: center;
width: 100%;
}
.contentContainer {
grid-column: 2;
grid-row: 1;
display: grid;
grid-template-rows: minmax(0, 1fr);
min-height: 0;
min-width: 0;
background-color: var(--background-secondary);
position: relative;
height: 100%;
max-height: 100%;
width: 100%;
max-width: 100%;
}
.contentContainerRounded {
border-top-left-radius: clamp(0.75rem, 1.6vw, 1.125rem);
background-clip: padding-box;
overflow: hidden;
}
.contentContainerMobile {
grid-column: 1 / -1;
}
.contentContainerFullscreen {
grid-column: 1 / -1;
background-color: #000;
}
.contentInner {
height: 100%;
min-height: 0;
max-height: 100%;
width: 100%;
min-width: 0;
background-color: var(--background-secondary);
}
.contentInnerFullscreen {
background-color: #000;
}
.nagbarStack {
display: flex;
flex-direction: column;
gap: 0;
}
.userAreaWrapper {
position: absolute;
bottom: 0;
left: 0;
width: calc(var(--layout-guild-list-width) + var(--layout-sidebar-width) + 0.0625rem);
display: flex;
align-items: flex-end;
padding: 0;
pointer-events: none;
z-index: var(--z-index-elevated-1);
}
.userAreaWrapper > * {
pointer-events: auto;
}
.guildListItem {
position: relative;
display: flex;
height: var(--guild-list-item-box-size);
width: 100%;
align-items: center;
justify-content: center;
padding: var(--guild-list-item-inset);
box-sizing: border-box;
z-index: 0;
}
.guildListReorderTarget {
height: calc(var(--guild-list-item-box-size) + var(--guild-list-item-gap));
}
.guildIcon {
display: flex;
align-items: center;
justify-content: center;
height: var(--guild-icon-size);
width: var(--guild-icon-size);
flex-shrink: 0;
cursor: pointer;
border-radius: var(--radius-full);
background-color: transparent;
background-size: cover;
background-position: center;
font-weight: 600;
font-size: 1.25rem;
color: var(--text-primary);
overflow: hidden;
transition:
border-radius 70ms ease-out,
background-color 70ms ease-out,
color 70ms ease-out;
container-type: size;
--initials-font-size: clamp(0.85rem, 45cqi, 1.35rem);
--initials-letter-spacing: 0px;
--initials-scale: 1;
}
.guildIconSelected:not(.guildIconNoImage) {
border-radius: 30%;
}
@media (hover: hover) and (pointer: fine) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.guildListItem:hover
.guildIcon:not(.guildIconNoImage),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.guildIcon:hover:not(.guildIconNoImage),
.guildListItem.contextMenuHover .guildIcon:not(.guildIconNoImage) {
border-radius: 30%;
}
}
.guildIconNoImage {
transition-property: background-color, color, border-radius;
transition-duration: 70ms;
transition-timing-function: ease-out;
background-color: var(--guilds-layout-item-bg, var(--guild-list-foreground));
cursor: pointer;
}
.guildIconSelected.guildIconNoImage {
border-radius: 30%;
background-color: var(--brand-primary);
color: white;
}
@media (hover: hover) and (pointer: fine) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.guildListItem:hover
.guildIconNoImage,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.guildIconNoImage:hover,
.guildListItem.contextMenuHover .guildIconNoImage {
border-radius: 30%;
background-color: var(--brand-primary);
color: white;
}
}
.guildIconInitials {
white-space: nowrap;
display: inline-block;
text-align: center;
line-height: 1;
color: inherit;
font-weight: 600;
font-size: var(--initials-font-size);
letter-spacing: var(--initials-letter-spacing);
transform: scale(var(--initials-scale));
transform-origin: center;
}
.guildIcon[data-initials-length='medium'] .guildIconInitials {
--initials-font-size: clamp(0.85rem, 38cqi, 1.11rem);
--initials-letter-spacing: 0px;
--initials-scale: 0.92;
}
.guildIcon[data-initials-length='long'] .guildIconInitials {
--initials-font-size: clamp(0.85rem, 32cqi, 0.87rem);
--initials-letter-spacing: 0px;
--initials-scale: 0.78;
}
.guildIndicator {
position: absolute;
left: -0.15rem;
display: flex;
align-items: center;
justify-content: center;
height: var(--guild-icon-size);
width: 0.5rem;
pointer-events: none;
container-type: layout size;
z-index: 2;
}
.guildIndicatorBar {
display: block;
width: 0.35rem;
border-radius: 0 var(--radius-full) var(--radius-full) 0;
background-color: var(--text-primary);
}
.guildBadge {
position: absolute;
right: -0.25rem;
bottom: -0.25rem;
pointer-events: none;
border-radius: var(--radius-md);
}
.guildBadgeActive {
box-shadow: 0 0 0 0.1875rem var(--guild-badge-surface, var(--background-secondary));
}
.dmListSection {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--guild-list-item-gap);
min-height: 0;
width: 100%;
}
.guildVoiceBadge {
position: absolute;
right: -0.25rem;
top: -0.25rem;
pointer-events: none;
z-index: 2;
}
.guildVoiceBadgeInner {
display: flex;
align-items: center;
justify-content: center;
height: 1.25rem;
width: 1.25rem;
flex-shrink: 0;
border-radius: var(--radius-full);
background-color: var(--status-online);
box-shadow: 0 0 0 0.1875rem var(--guild-badge-surface, var(--background-secondary));
pointer-events: none;
color: white;
}
.guildErrorBadge {
position: absolute;
top: 0;
right: 0;
pointer-events: none;
}
.guildErrorBadgeInner {
display: flex;
align-items: center;
justify-content: center;
height: 1rem;
width: 1rem;
flex-shrink: 0;
border-radius: var(--radius-full);
background-color: white;
color: var(--status-danger);
box-shadow: 0 0 0 0.1875rem var(--guild-badge-surface, var(--background-secondary));
}
.dmListItem {
composes: guildListItem;
}
.dmListItemWrapper {
height: var(--guild-list-item-box-size);
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.dmIcon {
composes: guildIcon;
}
.fluxerButton {
composes: guildListItem;
}
.fluxerButtonIcon {
composes: guildIcon;
background-color: var(--guilds-layout-item-bg, var(--guild-list-foreground));
color: var(--text-primary);
transition-property: background-color, color, border-radius;
transition-duration: 70ms;
transition-timing-function: ease-out;
}
.fluxerButtonIconSelected {
background-color: var(--brand-primary);
color: white;
}
@media (hover: hover) and (pointer: fine) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.fluxerButton:hover
.fluxerButtonIcon,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.fluxerButtonIcon:hover,
.fluxerButton.contextMenuHover .fluxerButtonIcon {
background-color: var(--brand-primary);
color: white;
}
}
.addGuildButton {
composes: guildListItem;
}
.addGuildButtonIcon {
display: flex;
align-items: center;
justify-content: center;
height: var(--guild-icon-size);
width: var(--guild-icon-size);
flex-shrink: 0;
cursor: pointer;
border-radius: var(--radius-full);
border: 0.125rem dashed var(--background-modifier-accent);
background-color: transparent;
color: var(--text-primary);
transition-property: border-radius, border-color;
transition-duration: 70ms;
transition-timing-function: ease-out;
}
@media (hover: hover) and (pointer: fine) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.addGuildButton:hover
.addGuildButtonIcon,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.addGuildButtonIcon:hover,
.addGuildButton.contextMenuHover .addGuildButtonIcon {
border-color: var(--text-primary);
}
}
.guildDivider {
height: 0.125rem;
width: 2rem;
flex-shrink: 0;
margin-top: var(--guild-list-item-gap);
margin-bottom: var(--guild-list-item-gap);
border-radius: 0.0625rem;
background-color: var(--background-modifier-hover);
}
.dmUserAvatars {
display: flex;
align-items: center;
}
.dmUserAvatar {
height: 2rem;
width: 2rem;
border: 0.125rem solid var(--background-primary);
z-index: 1;
}
.dmUserAvatarImage {
height: 100%;
width: 100%;
}
.fluxerSymbolIcon {
height: 2.75rem;
width: 2.75rem;
color: currentColor;
}
.relative {
position: relative;
}
.favoritesIcon {
height: 1.75rem;
width: 1.75rem;
}
.unavailableContainer {
composes: guildListItem;
}
.unavailableBadge {
display: flex;
height: var(--guild-list-item-size);
width: var(--guild-list-item-size);
flex-shrink: 0;
cursor: pointer;
align-items: center;
justify-content: center;
border-radius: var(--radius-full);
border: 0.125rem solid var(--status-danger);
background-color: transparent;
color: var(--text-primary);
transition-property: color, background-color;
transition-timing-function: ease-out;
transition-duration: 150ms;
}
@media (hover: hover) and (pointer: fine) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.unavailableBadge:hover {
background-color: var(--status-danger);
color: white;
}
}
.unavailableIcon {
height: 2rem;
width: 2rem;
}
.guildTooltipContainer {
display: flex;
box-sizing: border-box;
min-width: min(13.75rem, calc(100vw - 4rem));
flex-direction: column;
align-items: flex-start;
gap: 0.375rem;
padding: 0.125rem 0;
}
.guildTooltipHeader {
display: flex;
min-width: 0;
align-items: center;
gap: 0.375rem;
}
.guildVerifiedIcon {
height: 1rem;
width: 1rem;
flex-shrink: 0;
color: var(--text-primary);
}
.guildTooltipName {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 1rem;
line-height: 1.4;
font-weight: 600;
color: var(--text-primary);
}
.guildTooltipMessage {
font-size: 0.875rem;
color: var(--text-primary-muted);
}
.guildTooltipError {
font-size: 0.875rem;
color: var(--status-danger);
}
.outlineFrame {
--outline-radius: 0px;
}
.outlineFrameFullscreen {
border: none;
border-radius: 0;
background: #000;
}
:global(html.platform-native:not(.platform-macos)) .guildsLayoutContainer {
padding-top: var(--native-titlebar-height);
}
:global(html.platform-native:not(.platform-macos)) .guildsLayoutFullscreen {
padding-top: 0;
}
:global(html.platform-native.platform-macos) .guildListScrollContainer {
padding-top: var(--native-titlebar-height);
}
:global(html:not(.platform-native)) .outlineFrame,
:global(html.platform-native.platform-macos) .outlineFrame {
border-top: none;
}
:global(html.platform-native:not(.platform-macos)) .outlineFrame {
border-top: 0.0625rem solid var(--user-area-divider-color);
--outline-radius: clamp(0.5rem, 1.2vw, 0.875rem);
}
:global(html:not(.platform-native)) .outlineFrameFullscreen,
:global(html.platform-native.platform-macos) .outlineFrameFullscreen,
:global(html.platform-native:not(.platform-macos)) .outlineFrameFullscreen {
border: none;
}
.guildMutedInfo {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 0.375rem;
}
.guildMutedIcon {
height: 0.875rem;
width: 0.875rem;
flex-shrink: 0;
color: var(--text-primary-muted);
}
.guildMutedText {
font-size: 0.8125rem;
font-weight: 400;
color: var(--text-primary-muted);
}
.guildTooltipStats {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.25rem 0.625rem;
margin-top: 0.125rem;
min-height: 1rem;
width: 100%;
}
.guildTooltipStat {
--guild-tooltip-count-skeleton-width: 2.125rem;
display: inline-flex;
align-items: center;
min-width: 0;
min-height: 1rem;
line-height: 1;
}
.guildTooltipStatOnline {
--guild-tooltip-count-skeleton-width: 2.125rem;
}
.guildTooltipStatMembers {
--guild-tooltip-count-skeleton-width: 2.5rem;
}
.guildTooltipStatDot {
margin-right: 0.3rem;
height: 0.5rem;
width: 0.5rem;
border-radius: 624.9375rem;
flex: 0 0 auto;
}
.guildTooltipStatDotOnline {
background-color: var(--status-online);
}
.guildTooltipStatDotMembers {
background-color: var(--text-tertiary-secondary);
}
.guildTooltipStatText {
display: inline-flex;
min-width: 0;
align-items: center;
gap: 0.25rem;
color: var(--text-primary-muted);
font-size: 0.8125rem;
font-variant-numeric: tabular-nums;
line-height: 1.2;
white-space: nowrap;
}
.guildTooltipStatSkeleton {
height: 0.6875rem;
width: var(--guild-tooltip-count-skeleton-width);
min-width: var(--guild-tooltip-count-skeleton-width);
border-radius: 62.4375rem;
background: color-mix(in srgb, var(--text-primary-muted) 22%, transparent);
animation: guild-tooltip-stat-skeleton-pulse 1.6s ease-in-out infinite;
}
:global(html.reduced-motion) .guildTooltipStatSkeleton {
animation: none;
opacity: 0.72;
}
@keyframes guild-tooltip-stat-skeleton-pulse {
0%,
100% {
opacity: 0.44;
}
50% {
opacity: 0.72;
}
}
.guildVoiceInfo {
display: flex;
align-items: center;
gap: 0.375rem;
min-height: 1.875rem;
padding-right: 0.25rem;
}
.guildVoiceIcon {
height: 1.75rem;
width: 1.75rem;
flex: 0 0 auto;
color: var(--text-primary-muted);
}
.guildVoiceAvatarStack {
--avatar-stack-extra-height: 0rem;
--avatar-stack-padding-block-end: var(--avatar-outline, 0.125rem);
--avatar-stack-outline-color: var(--settings-surface-background, var(--form-surface-background));
}
.guildVoiceBadgeIcon {
height: 0.75rem;
width: 0.75rem;
}
.guildErrorIcon {
height: 1rem;
width: 1rem;
}
.guildInvitesPausedBadge {
position: absolute;
right: calc(-0.25rem - 0.1875rem);
bottom: calc(-0.25rem - 0.1875rem);
pointer-events: none;
background-color: var(--guild-badge-surface, var(--background-secondary));
border-radius: var(--radius-full);
padding: 0.1875rem;
}
.guildInvitesPausedBadgeInner {
display: flex;
align-items: center;
justify-content: center;
height: 1.125rem;
width: 1.125rem;
flex-shrink: 0;
border-radius: var(--radius-full);
background-color: hsl(220, calc(8% * var(--saturation-factor)), 36%);
color: white;
}
.guildInvitesPausedIcon {
height: 0.75rem;
width: 0.75rem;
}
:global(.theme-light) .guildsLayoutContainer {
--guilds-layout-item-bg: color-mix(in srgb, var(--guild-list-foreground) 72%, var(--background-primary) 28%);
}
.roundedFull {
border-radius: var(--radius-full);
}
.dropIndicatorTop::before {
content: '';
position: absolute;
top: 0;
left: 50%;
width: var(--guild-list-item-box-size);
transform: translateX(-50%);
height: 0.125rem;
background: var(--brand-primary-light);
border-radius: 0.0625rem;
z-index: 1;
}
.dropIndicatorBottom::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: var(--guild-list-item-box-size);
transform: translateX(-50%);
height: 0.125rem;
background: var(--brand-primary-light);
border-radius: 0.0625rem;
z-index: 1;
}
.dropIndicatorCombine .guildIcon {
opacity: 0;
}
.combinePreview {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
z-index: 3;
}
.combinePreviewGrid {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
gap: 0.125rem;
height: var(--guild-icon-size);
width: var(--guild-icon-size);
padding: 0.25rem;
border-radius: 30%;
background-color: color-mix(in srgb, var(--background-secondary) 92%, var(--brand-primary-light) 8%);
outline: 0.125rem solid var(--brand-primary-light);
outline-offset: 0.0625rem;
}
.combinePreviewIcon {
width: 100%;
height: 100%;
border-radius: 30%;
background-size: cover;
background-position: center;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
font-size: 0.5rem;
font-weight: 600;
color: var(--text-primary);
line-height: 1;
}
.combinePreviewIconInitials {
background-color: var(--background-secondary);
}
.combinePreviewIconEmpty {
background-color: transparent;
}
.guildListDropZone {
position: absolute;
left: 0;
right: 0;
height: 1.5rem;
z-index: 10;
pointer-events: none;
}
.guildListDropZoneTop {
top: 0;
}
.guildListDropZoneBottom {
bottom: 0;
}
.guildListDropZoneEnabled {
pointer-events: auto;
}
.guildListDropZoneActive::after {
content: '';
position: absolute;
height: 0.125rem;
left: 50%;
width: var(--guild-list-item-box-size);
transform: translateX(-50%);
background: var(--brand-primary-light);
border-radius: 0.0625rem;
}
.guildListDropZoneTop.guildListDropZoneActive::after {
top: 0;
}
.guildListDropZoneBottom.guildListDropZoneActive::after {
bottom: 0;
}
:global(.theme-light) .dropIndicatorTop::before,
:global(.theme-light) .dropIndicatorBottom::after,
:global(.theme-light) .guildListDropZoneActive::after {
background: var(--brand-primary);
}
:global(.theme-light) .combinePreviewGrid {
background-color: color-mix(in srgb, var(--background-secondary) 92%, var(--brand-primary) 8%);
outline-color: var(--brand-primary);
}