@layer fc.components {
.fc-chat {
display: flex;
flex-direction: column;
gap: var(--fc-chat-gap, var(--fc-space-4));
background-color: var(--fc-chat-bg, var(--fc-color-bg-canvas));
color: var(--fc-chat-fg, var(--fc-color-text-default));
block-size: 100%;
min-block-size: 0;
overflow-y: auto;
overscroll-behavior-block: contain;
padding-block: var(--fc-space-4);
padding-inline: var(--fc-space-4);
}
.fc-chat__group {
display: flex;
flex-direction: column;
gap: var(--fc-space-2);
}
.fc-msg {
display: flex;
flex-direction: column;
gap: var(--fc-space-2);
max-inline-size: var(--fc-chat-message-measure, var(--fc-size-measure, 65ch));
min-inline-size: 0;
}
.fc-msg[data-fc-role="user"] {
align-self: flex-end;
align-items: flex-end;
}
.fc-msg[data-fc-role="assistant"],
.fc-msg[data-fc-role="system"] {
align-self: flex-start;
}
.fc-msg[data-fc-role="assistant"] {
border-inline-start: var(--fc-border-width-thick) solid var(--fc-color-border-default);
padding-inline-start: var(--fc-space-3);
}
.fc-msg[data-fc-role="user"] {
background-color: var(--fc-color-bg-subtle);
border-radius: var(--fc-radius-lg);
padding: var(--fc-space-3);
}
.fc-msg[data-fc-role="system"],
.fc-msg[data-fc-role="tool"] {
font-size: var(--fc-font-size-sm);
color: var(--fc-color-text-muted);
}
.fc-msg__part {
display: flex;
flex-direction: column;
gap: var(--fc-space-2);
min-inline-size: 0;
}
.fc-msg__meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--fc-space-2);
font-size: var(--fc-font-size-xs);
color: var(--fc-color-text-muted);
}
.fc-msg__author {
font-weight: var(--fc-font-weight-semibold);
color: var(--fc-color-text-default);
}
.fc-msg__time {
font-variant-numeric: tabular-nums;
}
.fc-msg__body {
white-space: pre-wrap;
overflow-wrap: anywhere;
font: inherit;
color: var(--fc-color-text-default);
min-inline-size: 0;
}
.fc-msg[data-fc-state="streaming"] .fc-msg__body::after {
content: "";
display: inline-block;
inline-size: 0.5em;
block-size: 1em;
margin-inline-start: 0.125em;
background-color: var(--fc-color-accent-text);
vertical-align: text-bottom;
animation: fc-caret 1s steps(2, jump-none) infinite;
}
@keyframes fc-caret {
50% {
opacity: 0;
}
}
.fc-msg[data-fc-state="pending"] .fc-msg__body:empty {
min-block-size: 1lh;
min-inline-size: 12rem;
inline-size: 40%;
background-color: var(--fc-color-bg-subtle);
border-radius: var(--fc-radius-sm);
animation: fc-pulse 1.6s ease-in-out infinite;
}
@keyframes fc-pulse {
50% {
opacity: 0.5;
}
}
@media (prefers-reduced-motion: reduce) {
.fc-msg[data-fc-state="streaming"] .fc-msg__body::after {
animation: none;
}
.fc-msg[data-fc-state="pending"] .fc-msg__body:empty {
animation: none;
}
}
.fc-msg[data-fc-truncated="true"] .fc-msg__body {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 12;
line-clamp: 12;
overflow: hidden;
}
.fc-msg[data-fc-state="error"] {
border-inline-start: var(--fc-border-width-thick) solid var(--fc-color-danger-border);
padding-inline-start: var(--fc-space-3);
}
.fc-msg[data-fc-state="aborted"] {
border-inline-start: var(--fc-border-width-thick) solid var(--fc-color-warning-border);
padding-inline-start: var(--fc-space-3);
}
.fc-msg__actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--fc-space-0-5);
margin-inline-start: calc(var(--fc-space-1-5) * -1);
opacity: 0;
transition: opacity var(--fc-duration-fast) var(--fc-easing-standard);
}
.fc-msg:hover .fc-msg__actions,
.fc-msg:focus-within .fc-msg__actions,
.fc-msg__actions--persistent {
opacity: 1;
}
@media (hover: none) {
.fc-msg__actions {
opacity: 1;
}
}
.fc-msg__action {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--fc-space-1);
min-inline-size: 2rem;
min-block-size: 2rem;
padding-inline: var(--fc-space-1-5);
background-color: transparent;
color: var(--fc-color-text-muted);
border: 0;
border-radius: var(--fc-radius-md);
font: inherit;
font-size: var(--fc-font-size-xs);
cursor: pointer;
transition:
background-color var(--fc-duration-fast) var(--fc-easing-standard),
color var(--fc-duration-fast) var(--fc-easing-standard);
}
.fc-msg__action:hover {
background-color: var(--fc-color-bg-muted);
color: var(--fc-color-text-default);
}
.fc-msg__action:active {
background-color: var(--fc-color-bg-subtle);
}
.fc-msg__action[aria-pressed="true"] {
color: var(--fc-color-selected-fg);
background-color: var(--fc-color-selected-bg);
}
.fc-msg__action:disabled,
.fc-msg__action[aria-disabled="true"] {
color: var(--fc-color-disabled-fg);
background-color: transparent;
cursor: not-allowed;
}
@media (forced-colors: active) {
.fc-chat {
background-color: Canvas;
}
.fc-msg {
border: var(--fc-border-width-thin) solid CanvasText;
}
.fc-msg[data-fc-role="user"] {
border-color: Highlight;
}
.fc-msg[data-fc-role="assistant"] {
border-color: CanvasText;
}
.fc-msg[data-fc-state="pending"] .fc-msg__body:empty {
background-color: GrayText;
}
.fc-msg[data-fc-state="streaming"] .fc-msg__body::after {
background-color: Highlight;
}
.fc-msg[data-fc-state="error"],
.fc-msg[data-fc-state="aborted"] {
border-color: LinkText;
}
.fc-msg__action[aria-pressed="true"] {
outline: var(--fc-border-width-thin) solid Highlight;
}
}
}