Files
fluxer/fluxer_app/src/features/theme/styles/Message.module.css
T

1552 lines
38 KiB
CSS

/* SPDX-License-Identifier: AGPL-3.0-or-later */
:root {
--message-timestamp-color: var(--text-primary-muted);
--system-message-icon-opacity: 0.6;
--message-highlight-bar-width: 0.125rem;
--message-mention-color: rgb(234 197 50);
--message-mention-bg: rgb(234 197 50 / 0.1);
--message-mention-bg-hover: rgb(234 197 50 / 0.14);
--message-reply-color: rgb(59 130 246);
--message-reply-bg: rgb(59 130 246 / 0.1);
--message-sending-opacity: 0.5;
--message-sending-link-opacity: 0.7;
--message-failed-opacity: 0.5;
--message-replied-username-opacity: 0.64;
--message-unknown-warning-color: #ff9933;
--message-transition-highlight: 320ms cubic-bezier(0.32, 0.72, 0, 1);
}
.message {
text-align: left;
position: relative;
user-select: text;
-webkit-user-select: text;
touch-action: pan-y;
word-break: break-word;
-webkit-tap-highlight-color: transparent;
display: grid;
grid-template-columns: var(--chat-horizontal-padding, var(--chat-horizontal-padding-default)) var(
--message-avatar-size
) var(--message-gutter) minmax(0, 1fr);
grid-template-rows: auto auto auto;
grid-template-areas: '. . . reply' 'gutter-left avatar gutter-right content' '. . . container';
padding-block: var(--message-spacing-y);
padding-inline-end: var(--chat-horizontal-padding, var(--chat-horizontal-padding-default));
padding-inline-start: 0;
margin-inline: calc(-1 * var(--message-mobile-margin));
}
.messagePreviewSpacing {
margin-top: var(--message-group-spacing, 0px);
}
.messagePreview {
--message-media-max-width: 100%;
}
.messageHovered {
--message-hovered: 1;
}
.message::selection,
.messageCompact::selection,
.message *::selection,
.messageCompact *::selection {
background-color: var(--text-selection);
}
@media (min-width: 768px) {
.message {
margin-inline: calc(-1 * var(--chat-horizontal-padding, var(--chat-horizontal-padding-default)));
padding-inline-end: calc(
var(--chat-horizontal-padding, var(--chat-horizontal-padding-default)) +
var(--message-action-bar-offset)
);
}
.messagePreview {
margin-inline: 0;
padding-inline-end: var(--chat-horizontal-padding, var(--chat-horizontal-padding-default));
}
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageHovered:not(.messageMentioned):not(.messageReplying):not(.messageHighlight):not(.messagePreview),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageHovered:not(.messageMentioned):not(.messageReplying):not(.messageHighlight):not(
.messagePreview
) {
background-color: var(--background-modifier-hover);
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageMentioned.messageHovered,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageMentioned.messageHovered {
background-color: var(--message-mention-bg-hover);
}
:global(html.reduced-motion:where(.window-focused, .unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageMentioned.messageHovered,
:global(html.reduced-motion:where(.window-focused, .unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageMentioned.messageHovered {
background-color: var(--message-mention-bg);
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageReplying.messageHovered:not(.messageMentioned),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageHighlight.messageHovered:not(.messageMentioned),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageReplying.messageHovered:not(.messageMentioned),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageHighlight.messageHovered:not(.messageMentioned) {
background-color: var(--message-reply-bg);
}
.message.messageNoHover.messageHovered:not(.messageMentioned):not(.messageReplying):not(.messageHighlight),
.messageCompact.messageNoHover.messageHovered:not(.messageMentioned):not(.messageReplying):not(.messageHighlight) {
background-color: transparent;
}
.message.messageNoHover.messageMentioned.messageHovered,
.messageCompact.messageNoHover.messageMentioned.messageHovered {
background-color: var(--message-mention-bg);
}
:global([data-blocked-messages]) .message.messageHovered,
:global([data-blocked-messages]) .messageCompact.messageHovered,
:global([data-blocked-messages]) .message.contextMenuActive,
:global([data-blocked-messages]) .messageCompact.contextMenuActive {
background-color: transparent !important;
}
@media (pointer: coarse) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message:hover,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact:hover {
background-color: transparent;
}
}
.message.mobileLayout:hover,
.messageCompact.mobileLayout:hover {
background-color: transparent;
}
.message.mobileLayout.messageLongPress,
.messageCompact.mobileLayout.messageLongPress {
background-color: var(--background-modifier-hover);
}
.messageGrouped {
grid-template-areas: '. . . reply' 'gutter-left timestamp gutter-right content' '. . . container';
grid-template-columns: var(--chat-horizontal-padding, var(--chat-horizontal-padding-default)) var(
--message-avatar-size
) var(--message-gutter) minmax(0, 1fr);
}
.messageCompact {
--message-compact-timestamp-column-width: var(--message-compact-measured-timestamp-width, max-content);
--message-compact-timestamp-calc-width: var(
--message-compact-measured-timestamp-width,
var(--message-compact-timestamp-width)
);
--message-compact-text-start: calc(
var(--message-compact-timestamp-calc-width) +
var(--message-compact-gap) +
var(--message-compact-text-indent-from-username)
);
user-select: text;
-webkit-user-select: text;
word-break: break-word;
text-align: left;
-webkit-tap-highlight-color: transparent;
display: grid;
grid-template-columns: var(--message-compact-horizontal-padding) minmax(0, 1fr);
grid-template-rows: auto auto auto;
grid-template-areas: '. reply' '. content' '. container';
position: relative;
padding-block: var(--message-spacing-y);
padding-inline-start: 0;
padding-inline-end: var(--message-compact-horizontal-padding);
text-indent: 0;
margin-inline: calc(-1 * var(--chat-horizontal-padding, var(--chat-horizontal-padding-default)));
}
@media (min-width: 768px) {
.messageCompact {
padding-inline-end: calc(var(--message-compact-horizontal-padding) + var(--message-action-bar-offset));
}
}
.messageLongPress {
background-color: var(--background-modifier-hover);
}
.messageEditing {
background-color: var(--background-modifier-hover);
}
.messageSent {
color: var(--text-chat);
}
.messageSending {
color: var(--text-chat-muted);
opacity: var(--message-sending-opacity);
}
.messageSending a {
opacity: var(--message-sending-link-opacity);
}
.messageFailed {
--markup-link-color: var(--status-danger);
--markup-mention-color: var(--status-danger);
color: var(--status-danger);
}
.messageFailed,
.messageFailed * {
opacity: 1;
}
.messageFailed a {
color: var(--status-danger) !important;
}
.failedFooter {
display: flex;
align-items: center;
justify-content: flex-start;
flex-wrap: wrap;
gap: var(--message-container-gap);
inline-size: 100%;
min-inline-size: 0;
justify-self: stretch;
color: var(--status-danger);
font-size: var(--message-failed-indicator-font-size);
font-weight: 500;
}
.failedFooterMessage {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--message-failed-indicator-gap);
min-inline-size: 0;
flex: 0 1 auto;
}
.failedFooterLabel {
min-inline-size: 0;
line-height: 1.3;
}
.failedFooterIcon,
.failedRetryIcon {
width: var(--message-icon-size-md);
height: var(--message-icon-size-md);
color: var(--status-danger);
flex-shrink: 0;
}
.failedRetryButton {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0;
border: none;
background: transparent;
color: inherit;
font: inherit;
line-height: 1;
cursor: pointer;
flex-shrink: 0;
}
@media (hover: hover) {
.failedRetryButton:hover {
text-decoration: underline;
}
}
.failedRetryButton:focus-visible {
text-decoration: underline;
outline: none;
}
.message::before,
.messageCompact::before {
content: '';
display: block;
position: absolute;
inset-block: 0;
inset-inline-start: 0;
width: var(--message-highlight-bar-width);
background-color: transparent;
pointer-events: none;
}
.messageMentioned::before {
background-color: var(--message-mention-color);
}
.messageMentioned {
background-color: var(--message-mention-bg);
}
.message.messageReplying.messageMentioned,
.messageCompact.messageReplying.messageMentioned {
background-color: var(--message-mention-bg-hover);
}
:global(html.reduced-motion) .message.messageReplying.messageMentioned,
:global(html.reduced-motion) .messageCompact.messageReplying.messageMentioned {
background-color: var(--message-mention-bg);
}
.messageReplying:not(.messageMentioned)::before,
.messageHighlight:not(.messageMentioned)::before {
background-color: var(--brand-primary-light);
}
.messageReplying:not(.messageMentioned),
.messageHighlight:not(.messageMentioned) {
background-color: var(--message-reply-bg);
transition: background-color var(--message-transition-highlight);
}
.messageGutterLeft {
grid-area: gutter-left;
}
.messageGutterRight {
grid-area: gutter-right;
}
.messageAvatar {
grid-area: avatar;
display: block;
cursor: pointer;
position: relative;
z-index: 1;
align-self: start;
margin-block-start: calc(var(--message-spacing-y) + var(--message-avatar-align-offset));
transform: none;
inline-size: var(--message-avatar-size);
block-size: var(--message-avatar-size);
}
.messageNoText .messageAvatar,
.messageNoText.messageGrouped .messageAvatar {
margin-block-start: var(--message-spacing-y);
}
.messageContent {
grid-area: content;
min-width: 0;
overflow-wrap: break-word;
align-self: start;
display: flex;
flex-direction: column;
min-inline-size: 0;
user-select: text;
-webkit-user-select: text;
}
.messageAuthorInfo {
margin: 0;
min-height: var(--message-line-height);
line-height: var(--message-line-height);
color: var(--text-chat-muted);
font-size: 1rem;
display: block;
min-inline-size: 0;
user-select: text;
-webkit-user-select: text;
}
.jumpHeading {
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: 0;
}
.jumpHeadingButton {
appearance: none;
background: transparent;
border: 0;
padding: 0;
margin: 0;
color: inherit;
font: inherit;
cursor: pointer;
}
.messageAuthorRow {
display: inline;
max-inline-size: 100%;
white-space: nowrap;
line-height: var(--message-line-height);
min-inline-size: 0;
user-select: text;
-webkit-user-select: text;
}
.messageNoText {
grid-template-areas: '. . . reply' '. . . .' 'gutter-left avatar gutter-right container';
}
.messageNoText.messageGrouped {
grid-template-areas: '. . . reply' '. . . .' 'gutter-left timestamp gutter-right container';
}
.messageUsername {
display: inline;
position: relative;
cursor: pointer;
font-weight: 500;
color: var(--text-primary);
line-height: var(--message-line-height);
vertical-align: baseline;
min-inline-size: 0;
max-inline-size: none;
overflow: visible;
white-space: nowrap;
unicode-bidi: plaintext;
user-select: text;
-webkit-user-select: text;
}
.message,
.messageCompact,
.messageContent,
.messageText,
.messageAuthorInfo,
.messageAuthorRow,
.messageAuthorPart,
.messageUsername,
.messageTimestamp,
.messageTimestampCompact,
.messageAuthorInfoCompact,
.compactAuthorPrefix,
.copyOnly,
.compactInlineContent,
.compactInlineContent *,
.messageText :global(.markup),
.messageText :global(.markup) *,
.systemMessageContent,
.systemMessageContent * {
user-select: text !important;
-webkit-user-select: text !important;
}
.messageText [aria-hidden='true'],
.messageText [aria-hidden='true'] *,
.compactInlineContent [aria-hidden='true'],
.compactInlineContent [aria-hidden='true'] * {
user-select: none !important;
-webkit-user-select: none !important;
}
.contextMenuUnderline {
text-decoration: underline;
}
.messageAuthorPart {
display: inline;
vertical-align: baseline;
line-height: var(--message-line-height);
min-inline-size: 0;
max-inline-size: 100%;
user-select: text;
-webkit-user-select: text;
}
.messageAuthorPart > * {
vertical-align: baseline;
}
.messageTimeoutIndicator {
display: inline-block;
vertical-align: middle;
margin-inline-end: 0.25rem;
color: var(--accent-danger);
}
.messageTimeoutIndicator svg {
display: block;
}
@media (hover: hover) {
.messageUsername:hover {
text-decoration: underline;
}
}
.messageTimestamp,
.messageTimestampCompact {
cursor: default;
vertical-align: baseline;
font-weight: 400;
color: var(--message-timestamp-color);
line-height: var(--message-line-height);
unicode-bidi: isolate;
}
.messageTimestamp {
display: inline;
font-size: var(--message-timestamp-font-size);
line-height: var(--message-line-height);
color: color-mix(in srgb, var(--message-timestamp-color) 60%, transparent);
margin-inline-start: 0.15rem;
white-space: nowrap;
}
.copyOnly {
display: inline-block;
width: 0;
height: 0;
overflow: visible;
opacity: 0;
pointer-events: none;
vertical-align: middle;
user-select: text;
-webkit-user-select: text;
white-space: pre;
}
.textSeparator {
display: inline;
vertical-align: baseline;
font-size: 0;
line-height: 0;
margin: 0 0.2rem;
padding: 0;
border: none;
}
.authorDashSeparator {
display: inline;
vertical-align: baseline;
color: transparent;
font-size: 0;
line-height: 0;
white-space: nowrap;
margin: 0 0.15rem;
padding: 0;
border: none;
}
.messageTimestampHover,
.messageTimestampCompactHover {
color: var(--message-timestamp-color);
font-size: var(--message-timestamp-compact-font-size);
font-weight: 500;
line-height: var(--message-line-height);
unicode-bidi: isolate;
}
.messageTimestampHover {
grid-area: timestamp;
display: flex;
align-items: center;
justify-content: flex-end;
width: var(--message-avatar-size);
height: var(--message-line-height);
text-align: right;
user-select: none;
-webkit-user-select: none;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transform: translateX(0.5rem);
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageHovered
.messageTimestampHover {
opacity: 1;
pointer-events: auto;
}
@media (pointer: coarse) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message:hover
.messageTimestampHover {
opacity: 0;
pointer-events: none;
}
}
.messageAuthorInfoCompact {
position: relative;
display: inline;
min-height: var(--message-line-height);
color: var(--text-chat-muted);
line-height: var(--message-line-height);
white-space: nowrap;
text-indent: 0;
vertical-align: baseline;
margin: 0;
margin-inline-end: var(--message-compact-username-gap);
user-select: text;
-webkit-user-select: text;
}
.messageTimestampCompact {
margin-inline-end: var(--message-compact-gap);
width: max-content;
height: var(--message-timestamp-compact-height);
font-size: var(--message-timestamp-compact-font-size);
text-align: left;
display: inline-block;
vertical-align: middle;
line-height: var(--message-line-height);
flex-shrink: 0;
}
.messageAvatarCompact {
margin-inline-end: var(--message-compact-gap);
display: inline-block;
vertical-align: middle;
cursor: pointer;
flex-shrink: 0;
}
.messageTimestampCompactHover {
margin-inline-end: var(--message-compact-gap);
width: max-content;
height: var(--message-timestamp-compact-height);
font-size: var(--message-timestamp-compact-font-size);
display: inline-block;
vertical-align: middle;
line-height: var(--message-line-height);
cursor: default;
text-align: left;
flex-shrink: 0;
opacity: 0;
pointer-events: none;
}
.compactContentWrapper > .messageTimestampCompact,
.compactContentWrapper > .messageTimestampCompactHover {
grid-column: 1;
margin-inline-end: 0;
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageHovered
.messageTimestampCompactHover {
opacity: 1;
pointer-events: auto;
}
@media (pointer: coarse) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact:hover
.messageTimestampCompactHover {
opacity: 0;
pointer-events: none;
}
}
.messageText {
position: relative;
user-select: text;
-webkit-user-select: text;
overflow: hidden;
padding-block-end: 0.0625rem;
line-height: var(--message-line-height);
white-space: break-spaces;
word-break: break-word;
min-inline-size: 0;
}
.message .buttons,
.messageCompact .buttons {
opacity: 0;
pointer-events: none;
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageHovered
.buttons,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message
.buttons:hover,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message
.buttons:has(:focus-visible),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.selected
.buttons,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message
.buttons.emojiPickerOpen,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageHovered
.buttons,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact
.buttons:hover,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact
.buttons:has(:focus-visible),
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.selected
.buttons,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact
.buttons.emojiPickerOpen {
opacity: 1;
pointer-events: auto;
}
@media (pointer: coarse) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message:hover
.buttons,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact:hover
.buttons {
opacity: 0;
pointer-events: none;
}
}
.message .hoverAction,
.messageCompact .hoverAction {
opacity: 0;
pointer-events: none;
}
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.messageHovered
.hoverAction,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message.contextMenuActive
.hoverAction,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.messageHovered
.hoverAction,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact.contextMenuActive
.hoverAction {
opacity: 1;
pointer-events: auto;
}
@media (pointer: coarse) {
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.message:hover
.hoverAction,
:global(:where(html.window-focused, html.unfocused-fully-interactive):not(.window-focus-activation-guard))
.messageCompact:hover
.hoverAction {
opacity: 0;
pointer-events: none;
}
}
:global(html:not(.window-focused):not(.unfocused-fully-interactive)) .message .buttons,
:global(html:not(.window-focused):not(.unfocused-fully-interactive)) .messageCompact .buttons,
:global(.window-focus-activation-guard) .message .buttons,
:global(.window-focus-activation-guard) .messageCompact .buttons,
:global(html:not(.window-focused):not(.unfocused-fully-interactive)) .message .hoverAction,
:global(html:not(.window-focused):not(.unfocused-fully-interactive)) .messageCompact .hoverAction,
:global(.window-focus-activation-guard) .message .hoverAction,
:global(.window-focus-activation-guard) .messageCompact .hoverAction,
:global(html:not(.window-focused):not(.unfocused-fully-interactive)) .messageTimestampHover,
:global(html:not(.window-focused):not(.unfocused-fully-interactive)) .messageTimestampCompactHover,
:global(.window-focus-activation-guard) .messageTimestampHover,
:global(.window-focus-activation-guard) .messageTimestampCompactHover {
opacity: 0 !important;
pointer-events: none !important;
}
.container {
grid-area: container;
height: fit-content;
display: grid;
grid-auto-flow: row;
row-gap: var(--message-container-gap);
grid-template-columns: repeat(auto-fill, minmax(100%, 1fr));
text-indent: 0;
min-height: 0;
min-width: 0;
max-width: 100%;
padding-block: var(--message-container-padding-y);
position: relative;
}
.container:empty {
display: none;
}
.container > * {
justify-self: start;
align-self: start;
}
.messageNoText .container {
padding-block-start: 0;
display: flex;
flex-direction: column;
gap: var(--message-container-padding-y);
}
.repliedMessage {
--reply-spacing: var(--message-reply-spacing);
--reply-height: var(--message-reply-height);
--reply-spine-color: color-mix(in srgb, var(--text-chat-muted) 82%, black);
--reply-spine-radius: 0.625rem;
--reply-spine-terminal-gap: 0.1875rem;
grid-area: reply;
margin-bottom: var(--reply-spacing);
position: relative;
display: flex;
align-items: center;
min-width: 0;
max-width: 100%;
user-select: none;
-webkit-user-select: none;
font-size: var(--message-reply-font-size);
color: var(--text-primary-muted);
line-height: var(--reply-height);
}
.repliedMessage:before {
--avatar-size: var(--message-avatar-size);
--gutter: var(--message-gutter);
--spine-width: var(--message-reply-spine-width);
content: '';
display: block;
position: absolute;
box-sizing: border-box;
top: 50%;
bottom: calc(-1 * (var(--reply-spacing) + var(--reply-spine-terminal-gap)));
right: calc(100% + var(--reply-spine-terminal-gap));
left: calc(-1 * (0.5 * var(--avatar-size) + var(--gutter)));
margin-block-start: calc(-0.5 * var(--spine-width));
margin-inline-start: 0;
border-color: var(--reply-spine-color);
border-width: var(--spine-width) 0 0 var(--spine-width);
border-style: solid;
border-top-left-radius: var(--reply-spine-radius);
}
.repliedMessageCompact {
--compact-reply-spine-inline-offset: 0.25rem;
--compact-reply-spine-terminal-gap: var(--reply-spine-terminal-gap);
--reply-spacing: 0.0625rem;
--compact-message-body-start: calc(var(--message-compact-timestamp-calc-width) + var(--message-compact-gap));
--compact-reply-content-start: var(--compact-message-body-start);
--compact-reply-spine-center: var(--compact-reply-spine-inline-offset);
--compact-reply-spine-run: calc(
var(--compact-message-body-start) -
var(--compact-reply-spine-inline-offset) -
var(--compact-reply-spine-terminal-gap)
);
text-indent: 0;
box-sizing: border-box;
padding-inline-start: var(--compact-reply-content-start);
margin-inline-start: 0;
position: relative;
}
.repliedMessageCompact:before {
--spine-width: var(--message-reply-spine-width);
content: '';
display: block;
position: absolute;
box-sizing: border-box;
top: 50%;
bottom: calc(-1 * (var(--reply-spacing) + var(--compact-reply-spine-terminal-gap)));
inset-inline-start: var(--compact-reply-spine-center);
inline-size: max(0px, var(--compact-reply-spine-run));
margin-block-start: calc(-0.5 * var(--spine-width));
margin-inline-start: 0;
border-color: var(--reply-spine-color);
border-width: var(--spine-width) 0 0 var(--spine-width);
border-style: solid;
border-top-left-radius: var(--reply-spine-radius);
}
.repliedTextPreview {
display: block;
flex: 1 1 0;
min-width: 0;
block-size: var(--reply-height);
max-block-size: var(--reply-height);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
box-sizing: border-box;
line-height: var(--reply-height);
padding-block: 0;
overflow-x: hidden;
overflow-y: hidden;
}
.repliedTextPreview:hover {
color: var(--text-chat);
}
@media (pointer: coarse) {
.repliedTextPreview:hover {
color: inherit;
}
}
.repliedAvatar {
margin-inline-end: var(--message-container-gap);
flex-shrink: 0;
cursor: pointer;
user-select: none;
-webkit-user-select: none;
}
.repliedIconContainer {
margin-inline-end: var(--message-container-gap);
display: flex;
height: var(--message-icon-size-md);
width: var(--message-icon-size-md);
align-items: center;
justify-content: center;
flex-shrink: 0;
border-radius: 50%;
background-color: var(--background-primary);
color: var(--text-primary);
}
.repliedIcon {
height: 0.45rem;
width: 0.675rem;
}
.repliedUsername {
position: relative;
margin-inline-end: calc(var(--message-compact-username-gap) - 0.125rem);
display: inline;
flex-shrink: 0;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 30%;
vertical-align: baseline;
unicode-bidi: plaintext;
font-weight: 500;
color: color-mix(
in srgb,
var(--replied-username-color, var(--text-primary))
clamp(0%, calc(var(--message-replied-username-opacity) * 100%), 100%),
transparent
);
line-height: inherit;
}
@media (hover: hover) {
.repliedUsername:hover {
text-decoration: underline;
}
}
.repliedItalic {
padding-inline-end: var(--message-reply-spine-width);
font-style: italic;
}
.unstyled {
all: unset;
display: block;
flex: 1 1 0;
min-width: 0;
block-size: var(--reply-height);
max-block-size: var(--reply-height);
box-sizing: border-box;
line-height: var(--reply-height);
padding-block: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.unstyled:not(:disabled) {
cursor: pointer;
}
.repliedTextContent {
--markup-restricted-inline-icon-baseline-shift: -0.125em;
--markup-restricted-inline-emoji-size: var(--reply-height);
--markup-restricted-inline-emoji-baseline-shift: bottom;
display: inline;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.repliedTextContent,
.repliedTextContent * {
white-space: nowrap !important;
}
.repliedMessage .repliedTextPreview .repliedTextContent {
color: inherit;
font-size: inherit;
line-height: inherit;
pointer-events: none;
user-select: none;
-webkit-user-select: none;
}
.repliedTextContent :global(.emoji) {
width: var(--markup-restricted-inline-emoji-size);
height: var(--markup-restricted-inline-emoji-size);
min-height: 0;
margin-block: 0;
vertical-align: var(--markup-restricted-inline-emoji-baseline-shift);
}
.repliedTextContent :global(.emoji:not(img)) {
font-size: var(--markup-restricted-inline-emoji-size);
line-height: 1;
}
.repliedTextContent h1,
.repliedTextContent h2,
.repliedTextContent h3,
.repliedTextContent h4,
.repliedTextContent h5,
.repliedTextContent h6,
.repliedTextContent p,
.repliedTextContent div:not([data-jump-link-guild-icon]),
.repliedTextContent ul,
.repliedTextContent ol,
.repliedTextContent li,
.repliedTextContent blockquote,
.repliedTextContent table {
display: inline !important;
margin: 0 !important;
padding: 0 !important;
border: none !important;
background: none !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
white-space: nowrap !important;
overflow: visible !important;
}
.repliedTextContent pre,
.repliedTextContent code {
display: inline !important;
margin: 0 !important;
padding: 0 !important;
border: none !important;
background: none !important;
font-weight: inherit !important;
line-height: inherit !important;
white-space: nowrap !important;
overflow: visible !important;
}
.repliedTextContent pre::before,
.repliedTextContent pre::after {
content: none !important;
display: none !important;
}
.systemMessageFollowsSystem {
margin-block-start: calc(var(--message-group-spacing, 1rem) / 4);
}
.systemMessageIconWrapper {
grid-area: avatar;
display: flex;
align-self: flex-start;
align-items: flex-start;
justify-content: center;
padding-block-start: 0.15em;
user-select: none;
-webkit-user-select: none;
}
.systemMessageIconCompact {
grid-column: 3;
margin-inline-end: 0;
display: inline-flex;
align-items: center;
justify-content: center;
height: var(--system-message-icon-size);
width: var(--system-message-icon-size);
flex-shrink: 0;
vertical-align: text-bottom;
user-select: none;
-webkit-user-select: none;
}
.systemMessageContent {
grid-area: content;
min-width: 0;
overflow-wrap: break-word;
position: relative;
user-select: text;
-webkit-user-select: text;
overflow: hidden;
white-space: normal;
word-break: break-word;
color: var(--text-tertiary);
line-height: var(--message-line-height);
}
.systemMessageTimestamp {
margin-inline-start: 0.25rem;
position: relative;
top: -0.125rem;
color: color-mix(in srgb, var(--message-timestamp-color) 60%, transparent);
}
.systemMessageContentWrapper {
grid-column: 5;
min-inline-size: 0;
}
.systemMessageCompactContent .systemMessageContent {
display: block;
text-indent: 0;
}
.systemMessageCompactContent {
grid-area: content;
display: grid;
grid-template-columns:
max-content
var(--message-compact-gap)
var(--system-message-icon-size)
var(--message-compact-gap)
minmax(0, 1fr);
align-items: baseline;
min-inline-size: 0;
text-indent: 0;
color: var(--text-tertiary);
line-height: var(--message-line-height);
}
.systemMessageCompactContent .messageTimestampCompact {
grid-column: 1;
display: inline-block;
width: max-content;
vertical-align: baseline;
text-align: left;
}
.systemMessageContent .container {
margin-inline-start: var(--message-compact-container-margin);
}
.systemMessageCompactContent .container {
text-indent: 0;
margin-inline-start: 0;
}
.systemMessageIconSvg {
height: var(--system-message-icon-size);
width: var(--system-message-icon-size);
opacity: var(--system-message-icon-opacity);
}
.systemMessageIconCompact .systemMessageIconSvg {
height: var(--system-message-icon-size);
width: var(--system-message-icon-size);
opacity: 1;
}
.systemMessageLink {
position: relative;
display: inline;
cursor: pointer;
border: none;
background-color: transparent;
padding: 0;
overflow: hidden;
vertical-align: baseline;
font-weight: 500;
color: var(--text-primary);
line-height: var(--message-line-height);
user-select: text;
-webkit-user-select: text;
}
@media (hover: hover) {
.systemMessageLink:hover {
text-decoration: underline;
}
}
.messageAssistiveText {
border: 0;
clip: rect(0 0 0 0);
height: 0.0625rem;
margin: -0.0625rem;
overflow: hidden;
padding: 0;
position: absolute;
width: 0.0625rem;
white-space: nowrap;
}
.messageAuthorInfoCompact .messageUsername {
margin-inline-end: 0;
}
.userTagOffset {
margin-inline-start: 0.35rem;
vertical-align: middle;
display: inline-flex;
}
.userTagCompact {
margin-inline-end: var(--message-compact-gap);
flex-shrink: 0;
vertical-align: middle;
display: inline-flex;
}
.editedTimestamp {
margin-inline-start: 0.0625rem;
display: inline-block;
height: var(--message-timestamp-compact-height);
cursor: default;
vertical-align: baseline;
font-weight: 600;
color: var(--text-chat-muted);
font-size: var(--message-edited-font-size);
line-height: var(--message-line-height);
}
.editedLabel {
user-select: none;
-webkit-user-select: none;
font-weight: normal;
font-size: var(--message-edited-label-font-size);
line-height: normal;
}
.typingContainer {
display: flex;
align-items: center;
overflow: visible;
gap: var(--message-typing-gap);
max-height: none;
}
.typingCluster {
display: grid;
grid-template-columns: calc(var(--textarea-button-height, 2rem) + var(--textarea-side-button-padding, 0.25rem) * 2) minmax(
0,
1fr
);
column-gap: var(--textarea-upload-gap, 0.75rem);
align-items: center;
pointer-events: none;
flex: 1 1 auto;
min-width: 0;
width: 100%;
}
.typingPill {
position: relative;
display: inline-flex;
align-items: center;
gap: 0;
min-height: var(--typing-pill-height);
padding: 0 0.35rem;
border-radius: var(--radius-xl);
background-color: var(--background-tertiary);
border: 0.0625rem solid color-mix(in srgb, var(--background-modifier-accent) 80%, transparent);
pointer-events: auto;
grid-column: 1 / -1;
justify-self: flex-start;
margin-inline-start: 0;
}
:global(.theme-light) .typingPill {
background-color: var(--brand-primary);
border: none;
color: var(--text-on-brand-primary);
--typing-indicator-color: var(--text-on-brand-primary);
}
.typingIndicator {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
height: var(--typing-pill-height);
}
.typingAvatarContainer {
height: var(--typing-pill-height);
margin-inline: 0;
--avatar-stack-padding-block-start: 0px;
--avatar-stack-padding-block-end: 0px;
--avatar-stack-extra-height: 0px;
--avatar-stack-outline-color: var(--background-tertiary);
}
.typingIndicator + .typingAvatarContainer,
.typingIndicator + .typingText {
margin-inline-start: 0.375rem;
}
.typingAvatarContainer + .typingText {
margin-inline-start: 0.5rem;
}
.typingText {
min-width: 0;
flex: 0 1 auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.75rem;
line-height: var(--typing-pill-height);
}
.typingClusterComposerStatus {
display: inline-flex;
grid-template-columns: none;
column-gap: 0;
width: auto;
max-width: 100%;
flex: 0 1 auto;
}
.typingClusterComposerStatus .typingAvatarContainer {
--avatar-stack-outline-color: var(--composer-surface-color, var(--background-secondary-lighter));
}
.compactContentWrapper {
grid-area: content;
display: grid;
grid-template-columns: var(--message-compact-timestamp-column-width) var(--message-compact-gap) minmax(0, 1fr);
align-items: baseline;
min-inline-size: 0;
line-height: var(--message-line-height);
overflow: visible;
}
.compactContentNoPrefix {
grid-template-columns: minmax(0, 1fr);
}
.compactBody {
grid-column: 3;
min-inline-size: 0;
overflow-wrap: break-word;
}
.compactContentNoPrefix .compactBody {
grid-column: 1;
}
.compactAuthorPrefix {
display: inline;
margin-inline-end: var(--message-compact-username-gap);
white-space: nowrap;
user-select: text;
-webkit-user-select: text;
}
.compactInlineContent {
display: block;
min-inline-size: 0;
max-inline-size: 100%;
padding-inline-start: var(--message-compact-text-indent-from-username);
text-indent: calc(-1 * var(--message-compact-text-indent-from-username));
user-select: text;
-webkit-user-select: text;
}
.compactInlineContent .compactAuthorPrefix,
.compactInlineContent :global([data-markdown-block]) {
text-indent: 0;
}
.unknownMessageCompactContent .unknownMessageWarning {
display: inline-flex;
vertical-align: baseline;
}
.compactInlineContent .editedTimestamp {
display: inline;
vertical-align: baseline;
}
.messageCompact > .container {
grid-area: container;
text-indent: 0;
margin-inline-start: var(--message-compact-text-start);
max-inline-size: calc(100% - var(--message-compact-text-start));
padding-block-start: 0;
row-gap: 0.125rem;
}
.messageCompact > .container :global([class*='reactionsGrid']) {
padding-top: 0.0625rem;
}
.messageCompact > .compactContentWrapper:not(:has(.compactBody > *)) + .container {
padding-block-start: 0;
}
.messageCompact > .systemMessageCompactContent + .container {
margin-inline-start: var(--message-compact-text-start);
max-inline-size: calc(100% - var(--message-compact-text-start));
}
.contextMenuActive {
background-color: var(--background-modifier-hover) !important;
}
:global(html.reduced-motion) .contextMenuActive {
background-color: transparent !important;
}
.contextMenuActive .buttons {
opacity: 1 !important;
pointer-events: auto !important;
}
.contextMenuActive .messageTimestampHover {
opacity: 1 !important;
pointer-events: auto !important;
}
.contextMenuActive .messageTimestampCompactHover {
opacity: 1 !important;
pointer-events: auto !important;
}
.contextMenuActive.messageMentioned {
background-color: var(--message-mention-bg-hover) !important;
}
:global(html.reduced-motion) .contextMenuActive.messageMentioned {
background-color: var(--message-mention-bg) !important;
}
.contextMenuActive.messageReplying:not(.messageMentioned),
.contextMenuActive.messageHighlight:not(.messageMentioned) {
background-color: var(--message-reply-bg) !important;
}
:global(html.reduced-motion) .contextMenuActive.messageReplying:not(.messageMentioned),
:global(html.reduced-motion) .contextMenuActive.messageHighlight:not(.messageMentioned) {
background-color: var(--message-reply-bg) !important;
}
.keyboardFocused {
background-color: var(--background-modifier-hover);
}
.keyboardFocused.messageMentioned {
background-color: var(--message-mention-bg);
}
.keyboardFocused.messageReplying:not(.messageMentioned),
.keyboardFocused.messageHighlight:not(.messageMentioned) {
background-color: var(--message-reply-bg);
}
.keyboardFocused .buttons {
opacity: 1;
pointer-events: auto;
}
.keyboardFocused .hoverAction {
opacity: 1;
pointer-events: auto;
}
.keyboardFocused .messageTimestampHover {
opacity: 1;
pointer-events: auto;
}
.keyboardFocused .messageTimestampCompactHover {
opacity: 1;
pointer-events: auto;
}
.messageClientSystem::before {
background-color: var(--brand-primary-light);
}
.messageClientSystem,
.messageClientSystem:hover {
background-color: var(--message-reply-bg) !important;
}
.unknownMessageWarning {
display: flex;
align-items: center;
gap: var(--message-container-gap);
color: var(--message-unknown-warning-color);
}
.systemMessageContainer {
display: flex;
align-items: center;
gap: var(--message-container-gap);
padding-block: var(--message-container-gap);
color: var(--text-tertiary);
font-size: var(--message-timestamp-font-size);
}
.systemMessageIcon {
height: var(--message-icon-size-lg);
width: var(--message-icon-size-lg);
}
.mediaFocusRing {
z-index: 20;
}
.systemMessageDismissButton {
color: var(--text-link);
}
@media (hover: hover) {
.systemMessageDismissButton:hover {
text-decoration: underline;
}
}
.silentMessageIcon {
margin-inline-start: 0.25rem;
display: inline-block;
vertical-align: middle;
color: var(--text-chat-muted);
height: 0.875rem;
width: 0.875rem;
align-self: center;
}