Files
cad-Integration/CADDesigner-Code-main/frontend/src/App.css
T
2026-07-22 13:48:46 +08:00

1352 lines
24 KiB
CSS

:root {
--motion-emphasized: cubic-bezier(0.22, 1, 0.36, 1);
--motion-snappy: cubic-bezier(0.34, 1.56, 0.64, 1);
--motion-soft: cubic-bezier(0.25, 0.8, 0.25, 1);
}
.app-shell {
display: flex;
height: 100%;
min-height: 100%;
overflow: hidden;
}
.sidebar {
width: 18rem;
flex: 0 0 18rem;
height: 100%;
min-height: 0;
display: flex;
flex-direction: column;
gap: 0.75rem;
padding: 0.875rem;
border-right: 1px solid var(--line);
background: var(--sidebar);
transition:
width 320ms var(--motion-emphasized),
flex-basis 320ms var(--motion-emphasized),
padding 320ms var(--motion-emphasized),
border-color 220ms var(--motion-soft);
}
.sidebar.is-collapsed {
width: 4.5rem;
flex-basis: 4.5rem;
padding-inline: 0.5rem;
}
.sidebar-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.sidebar-title-block {
min-width: 0;
}
.sidebar-title {
margin: 0;
font-size: 0.95rem;
font-weight: 600;
}
.sidebar-caption,
.panel-caption,
.bubble-role,
.tool-card-label,
.code-line-number,
.conversation-item-primary span,
.conversation-item-secondary {
color: var(--muted);
}
.sidebar-caption,
.panel-caption,
.conversation-item-secondary,
.conversation-item-primary span,
.tool-card-label {
font-size: 0.78rem;
}
.sidebar-header-actions {
display: flex;
align-items: center;
gap: 0.5rem;
}
.toolbar-button,
.send-button,
.download-link,
.conversation-item,
.rail-item,
.chat-composer,
.model-select select {
border: 1px solid var(--line);
background: var(--surface);
color: var(--ink);
transition: border-color 140ms ease, background-color 140ms ease;
}
.toolbar-button,
.send-button,
.rail-item {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
padding: 0;
border-radius: 0.45rem;
cursor: pointer;
}
.toolbar-button:hover,
.send-button:hover,
.download-link:hover,
.conversation-item:hover,
.rail-item:hover,
.chat-composer:hover,
.model-select select:hover,
.tool-card:hover {
border-color: var(--line-strong);
}
.toolbar-button:disabled,
.send-button:disabled,
.conversation-item:disabled,
.rail-item:disabled {
opacity: 0.55;
cursor: default;
}
.conversation-list,
.rail-list,
.chat-timeline {
min-height: 0;
overflow: auto;
}
.conversation-list {
display: flex;
flex: 1;
flex-direction: column;
gap: 0.5rem;
}
.conversation-row {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 0.4rem;
align-items: stretch;
}
.conversation-item {
padding: 0.75rem;
border-radius: 0.55rem;
text-align: left;
cursor: pointer;
}
.conversation-delete-button {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
border: 1px solid var(--line);
border-radius: 0.55rem;
background: var(--surface);
color: var(--muted);
cursor: pointer;
opacity: 0;
transition:
border-color 140ms ease,
background-color 140ms ease,
color 140ms ease,
opacity 140ms ease;
}
.conversation-row:hover .conversation-delete-button,
.conversation-row:focus-within .conversation-delete-button,
.conversation-row.is-active .conversation-delete-button {
opacity: 1;
}
.conversation-delete-button:hover {
border-color: #6e4b49;
color: #efac9e;
}
.conversation-delete-button:disabled {
opacity: 0.55;
cursor: default;
}
.conversation-item.is-active,
.rail-item.is-active {
border-color: var(--accent-line);
background: var(--surface-active);
}
.conversation-item-primary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.conversation-item-primary strong {
font-size: 0.84rem;
font-weight: 600;
}
.conversation-item-secondary {
margin-top: 0.2rem;
}
.empty-card {
padding: 0.85rem;
border: 1px dashed var(--line);
border-radius: 0.55rem;
color: var(--muted);
font-size: 0.84rem;
}
.rail-list {
display: flex;
flex: 1;
flex-direction: column;
gap: 0.5rem;
}
.rail-item {
width: 100%;
height: 2.25rem;
font-size: 0.78rem;
text-transform: uppercase;
}
.workspace-shell {
flex: 1;
min-width: 0;
min-height: 0;
height: 100%;
padding: 0.875rem;
overflow: hidden;
}
.workspace-panels,
.main-panel-group,
.workbench-group,
.panel-shell,
.chat-panel-shell,
.workbench-panel,
.workbench-content,
.viewport-panel-content,
.code-panel-content,
.model-canvas-shell {
min-height: 0;
}
.workspace-panels,
.main-panel-group,
.workbench-group,
.chat-panel-shell {
height: 100%;
}
.panel-shell {
display: flex;
flex-direction: column;
gap: 0.75rem;
height: 100%;
padding: 0.875rem;
border: 1px solid var(--line);
background: var(--surface);
}
.panel-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.panel-header-actions {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 0.5rem;
flex-wrap: wrap;
}
.panel-title-group {
min-width: 0;
}
.panel-title-group h2 {
margin: 0;
font-size: 0.95rem;
font-weight: 600;
}
.panel-caption {
margin: 0.1rem 0 0;
}
.model-select {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 0.8rem;
color: var(--muted);
}
.artifact-picker {
min-width: 0;
}
.model-select select {
padding: 0.45rem 0.6rem;
border-radius: 0.45rem;
appearance: none;
font: inherit;
}
.artifact-picker select {
max-width: min(22rem, 46vw);
}
.download-link {
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0.45rem 0.65rem;
border-radius: 0.45rem;
text-decoration: none;
font-size: 0.8rem;
}
.chat-timeline {
display: flex;
flex: 1;
flex-direction: column;
gap: 1rem;
padding-right: 0.1rem;
}
.turn {
display: grid;
gap: 0.65rem;
}
.bubble,
.tool-card,
.chat-composer,
.error-banner,
.code-scroll-shell,
.empty-state {
border: 1px solid var(--line);
background: var(--surface-soft);
}
.bubble,
.tool-card,
.chat-composer,
.error-banner,
.empty-state,
.code-scroll-shell {
border-radius: 0.55rem;
}
.bubble {
padding: 0.8rem 0.9rem;
transition:
border-color 220ms var(--motion-soft),
background-color 220ms var(--motion-soft),
transform 260ms var(--motion-emphasized),
box-shadow 260ms var(--motion-soft);
}
.bubble-user {
max-width: min(40rem, 84%);
justify-self: end;
background: #161c24;
}
.bubble-assistant {
max-width: min(46rem, 92%);
}
.bubble-thinking {
border-style: dashed;
position: relative;
overflow: hidden;
background:
radial-gradient(circle at top left, rgba(143, 197, 255, 0.12), transparent 46%),
linear-gradient(180deg, rgba(18, 24, 31, 0.92), rgba(14, 19, 25, 0.88));
animation: thinking-breath 1800ms var(--motion-soft) infinite;
}
.bubble-thinking::after {
content: '';
position: absolute;
inset: -1px;
background: linear-gradient(
105deg,
transparent 0%,
transparent 34%,
rgba(255, 255, 255, 0.03) 48%,
transparent 62%,
transparent 100%
);
transform: translateX(-120%);
animation: thinking-sheen 2400ms var(--motion-emphasized) infinite;
pointer-events: none;
}
.thinking-indicator {
display: grid;
gap: 0.45rem;
}
.thinking-indicator-line {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.thinking-indicator-text {
font-weight: 500;
letter-spacing: 0.01em;
}
.thinking-indicator-dots {
display: inline-flex;
align-items: center;
gap: 0.28rem;
}
.thinking-indicator-dot {
width: 0.38rem;
height: 0.38rem;
border-radius: 999px;
background: rgba(184, 220, 255, 0.92);
box-shadow: 0 0 0.55rem rgba(143, 197, 255, 0.35);
animation: thinking-dot-pulse 960ms var(--motion-snappy) infinite;
}
.thinking-indicator-dot:nth-child(2) {
animation-delay: 120ms;
}
.thinking-indicator-dot:nth-child(3) {
animation-delay: 240ms;
}
.thinking-indicator p {
margin: 0;
color: var(--muted);
font-size: 0.82rem;
line-height: 1.6;
max-width: 34rem;
}
.bubble-role {
display: inline-block;
margin-bottom: 0.4rem;
text-transform: uppercase;
letter-spacing: 0.08em;
font-size: 0.68rem;
}
.bubble p {
margin: 0;
line-height: 1.65;
}
.assistant-sequence {
display: flex;
flex-direction: column;
gap: 0.55rem;
}
.markdown-body {
line-height: 1.7;
transform-origin: left top;
}
.markdown-body p,
.markdown-body ul,
.markdown-body ol,
.markdown-body pre,
.markdown-body blockquote {
margin: 0 0 0.85rem;
}
.markdown-body > :last-child {
margin-bottom: 0;
}
.markdown-body pre,
.tool-card-body pre {
margin: 0;
padding: 0.75rem;
border: 1px solid var(--line);
border-radius: 0.45rem;
background: #0f141a;
overflow: auto;
font-family: 'IBM Plex Mono', 'SFMono-Regular', Consolas, monospace;
white-space: pre-wrap;
word-break: break-word;
}
.tool-card-body pre {
font-size: 0.74rem;
line-height: 1.45;
}
.tool-card {
max-width: min(46rem, 92%);
overflow: hidden;
transform-origin: top left;
transition:
border-color 240ms var(--motion-soft),
background-color 240ms var(--motion-soft),
transform 300ms var(--motion-emphasized),
box-shadow 300ms var(--motion-soft);
}
.reasoning-card {
max-width: min(46rem, 92%);
overflow: hidden;
border: 1px dashed rgba(143, 197, 255, 0.42);
border-radius: 0.55rem;
background: rgba(143, 197, 255, 0.08);
transform-origin: top left;
transition:
border-color 240ms var(--motion-soft),
background-color 240ms var(--motion-soft),
transform 300ms var(--motion-emphasized),
box-shadow 300ms var(--motion-soft);
}
.reasoning-card-summary,
.tool-card-summary,
.tool-nested-summary {
width: 100%;
border: 0;
background: transparent;
color: inherit;
font: inherit;
text-align: left;
}
.reasoning-card-summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
list-style: none;
cursor: pointer;
padding: 0.7rem 0.85rem;
transition: padding 260ms var(--motion-emphasized);
}
.reasoning-card-title {
display: inline-flex;
align-items: center;
gap: 0.55rem;
}
.reasoning-card-title strong {
font-size: 0.8rem;
color: #b8dcff;
}
.reasoning-card-body-wrap {
height: 0;
opacity: 0;
transform: translateY(-0.25rem) scaleY(0.985);
transform-origin: top;
overflow: hidden;
will-change: height, opacity, transform;
transition:
height 420ms var(--motion-emphasized),
opacity 260ms var(--motion-soft),
transform 420ms var(--motion-emphasized);
}
.reasoning-card.is-open .reasoning-card-body-wrap {
opacity: 1;
transform: translateY(0) scaleY(1);
}
.reasoning-card-body {
min-height: 0;
overflow: hidden;
padding: 0 0.85rem 0.85rem;
}
.tool-card-summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
list-style: none;
cursor: pointer;
padding: 0.75rem 0.85rem;
transition: padding 280ms var(--motion-emphasized);
}
.tool-card.is-open {
border-color: var(--line-strong);
box-shadow: 0 18px 36px rgba(6, 10, 14, 0.16);
transform: translateY(-0.05rem);
}
.tool-card-title-row,
.tool-card-title {
display: flex;
align-items: center;
gap: 0.6rem;
}
.tool-card-title-row {
width: 100%;
justify-content: space-between;
}
.tool-card-title strong {
font-size: 0.84rem;
}
.tool-status-pill {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.2rem 0.45rem;
border: 1px solid var(--line);
border-radius: 0.4rem;
font-size: 0.74rem;
color: var(--muted);
}
.tool-status-pill.is-running,
.tool-status-pill.is-pending {
color: #8fc5ff;
}
.tool-status-pill.is-completed {
color: #96d7b5;
}
.tool-status-pill.is-error {
color: #efac9e;
}
.tool-card-chevron {
color: var(--muted);
transition: transform 260ms var(--motion-snappy), color 180ms var(--motion-soft);
}
.tool-card.is-open .tool-card-chevron {
transform: rotate(180deg);
}
.tool-card-body {
display: grid;
gap: 0.75rem;
padding: 0 0.85rem 0.85rem;
}
.tool-card-body-wrap {
height: 0;
opacity: 0;
transform: translateY(-0.25rem) scaleY(0.985);
transform-origin: top;
overflow: hidden;
will-change: height, opacity, transform;
transition:
height 420ms var(--motion-emphasized),
opacity 240ms var(--motion-soft),
transform 420ms var(--motion-emphasized);
}
.tool-card.is-open .tool-card-body-wrap {
opacity: 1;
transform: translateY(0) scaleY(1);
}
.tool-card-body-wrap > .tool-card-body {
min-height: 0;
overflow: hidden;
}
.tool-card-section {
display: grid;
gap: 0.35rem;
}
.tool-nested-list {
display: grid;
gap: 0.45rem;
}
.tool-card-middle-sequence {
display: grid;
gap: 0.55rem;
}
.bubble-tool-inline,
.tool-inline-reasoning {
max-width: 100%;
}
.bubble-tool-inline {
background: #12171d;
}
.bubble-tool-inline .bubble-role {
color: #96d7b5;
}
.bubble-tool-inline .markdown-body > :first-child,
.tool-inline-reasoning .markdown-body > :first-child {
margin-top: 0;
}
.stream-delta {
display: inline;
animation: stream-delta-in 900ms var(--motion-emphasized) both;
will-change: opacity, filter;
}
.tool-nested-item {
border: 1px solid var(--line);
border-radius: 0.45rem;
background: #12171d;
overflow: hidden;
}
.tool-nested-item.is-response {
border-color: rgba(150, 215, 181, 0.32);
background: rgba(150, 215, 181, 0.08);
}
.tool-nested-item.is-reasoning {
border-color: rgba(143, 197, 255, 0.34);
background: rgba(143, 197, 255, 0.08);
}
.tool-nested-item.is-progress {
border-color: rgba(255, 196, 107, 0.28);
background: rgba(255, 196, 107, 0.07);
}
.tool-nested-item.is-error {
border-color: rgba(239, 172, 158, 0.3);
background: rgba(239, 172, 158, 0.08);
}
.tool-nested-item.is-result {
border-color: rgba(154, 168, 183, 0.24);
background: rgba(154, 168, 183, 0.05);
}
.tool-nested-item-topline {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
}
.tool-nested-item-actions {
display: inline-flex;
align-items: center;
gap: 0.45rem;
}
.tool-nested-summary {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.75rem;
padding: 0.6rem 0.7rem;
cursor: pointer;
}
.tool-nested-body-wrap {
height: 0;
opacity: 0;
transform: translateY(-0.2rem) scaleY(0.985);
transform-origin: top;
overflow: hidden;
will-change: height, opacity, transform;
transition:
height 360ms var(--motion-emphasized),
opacity 220ms var(--motion-soft),
transform 360ms var(--motion-emphasized);
}
.tool-nested-item.is-open .tool-nested-body-wrap {
opacity: 1;
transform: translateY(0) scaleY(1);
}
.tool-nested-body {
min-height: 0;
overflow: hidden;
display: grid;
gap: 0.45rem;
padding: 0 0.7rem 0.7rem;
}
.tool-nested-chevron {
color: var(--muted);
transition: transform 220ms var(--motion-snappy), color 180ms var(--motion-soft);
}
.tool-nested-item.is-open .tool-nested-chevron {
transform: rotate(180deg);
}
.tool-nested-item-topline strong {
font-size: 0.78rem;
font-weight: 600;
}
.tool-nested-item p {
margin: 0.35rem 0 0;
font-size: 0.74rem;
line-height: 1.45;
color: var(--muted);
white-space: pre-wrap;
word-break: break-word;
}
.tool-nested-block {
display: grid;
gap: 0.3rem;
margin-top: 0.45rem;
}
.tool-nested-block.is-response .tool-card-label {
color: #96d7b5;
}
.tool-nested-block.is-reasoning .tool-card-label {
color: #8fc5ff;
}
.tool-nested-block.is-progress .tool-card-label {
color: #ffc46b;
}
.tool-nested-block.is-error .tool-card-label {
color: #efac9e;
}
.tool-nested-block pre {
margin: 0;
padding: 0.65rem;
border: 1px solid var(--line);
border-radius: 0.45rem;
background: #0f141a;
overflow: auto;
font-family: 'IBM Plex Mono', 'SFMono-Regular', Consolas, monospace;
font-size: 0.72rem;
line-height: 1.45;
white-space: pre-wrap;
word-break: break-word;
}
.tool-nested-status {
font-size: 0.72rem;
color: var(--muted);
}
.tool-nested-status.is-running {
color: #8fc5ff;
}
.tool-nested-status.is-completed {
color: #96d7b5;
}
.tool-nested-status.is-error {
color: #efac9e;
}
.tool-card-label {
text-transform: uppercase;
letter-spacing: 0.06em;
}
.chat-composer-shell {
display: grid;
gap: 0.5rem;
}
.chat-composer-shell.is-dragging-files {
outline: 1px dashed var(--accent-line);
outline-offset: 0.25rem;
}
.chat-composer-row {
display: flex;
align-items: stretch;
gap: 0.5rem;
}
.composer-attach-button {
display: inline-flex;
align-items: center;
justify-content: center;
width: 2.75rem;
border: 1px solid var(--line);
border-radius: 0.55rem;
background: var(--surface);
color: var(--ink);
cursor: pointer;
transition: border-color 140ms ease, background-color 140ms ease;
}
.composer-attach-button:hover {
border-color: var(--line-strong);
}
.composer-attach-button input {
display: none;
}
.composer-image-list {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.composer-image-item {
width: 7rem;
border: 1px solid var(--line);
border-radius: 0.55rem;
background: var(--surface-soft);
overflow: hidden;
}
.composer-image-item img,
.user-image-preview {
display: block;
width: 100%;
object-fit: cover;
cursor: zoom-in;
}
.composer-image-item img {
height: 5rem;
}
.composer-image-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.35rem;
padding: 0.45rem 0.5rem;
}
.composer-image-meta span {
min-width: 0;
font-size: 0.72rem;
color: var(--muted);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.composer-image-remove {
display: inline-flex;
align-items: center;
justify-content: center;
width: 1.5rem;
height: 1.5rem;
border: 1px solid var(--line);
border-radius: 0.4rem;
background: var(--surface);
color: var(--muted);
cursor: pointer;
}
.composer-image-remove:hover {
border-color: var(--line-strong);
color: var(--ink);
}
.user-image-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(6.5rem, 1fr));
gap: 0.5rem;
margin-bottom: 0.65rem;
}
.user-image-preview {
max-height: 10rem;
border: 1px solid var(--line);
border-radius: 0.45rem;
background: #10151b;
}
.image-lightbox {
position: fixed;
inset: 0;
z-index: 30;
display: grid;
place-items: center;
padding: 1.5rem;
background: rgba(9, 12, 16, 0.82);
backdrop-filter: blur(6px);
}
.image-lightbox-content {
position: relative;
max-width: min(92vw, 72rem);
max-height: min(92vh, 56rem);
display: grid;
gap: 0.65rem;
padding: 0.85rem;
border: 1px solid var(--line-strong);
border-radius: 0.75rem;
background: #12161c;
}
.image-lightbox-close {
position: absolute;
top: 0.75rem;
right: 0.75rem;
display: inline-flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
border: 1px solid var(--line);
border-radius: 999px;
background: rgba(18, 22, 28, 0.92);
color: var(--ink);
cursor: pointer;
}
.image-lightbox-image {
max-width: 100%;
max-height: min(80vh, 48rem);
border-radius: 0.45rem;
object-fit: contain;
}
.image-lightbox-caption {
margin: 0;
font-size: 0.82rem;
color: var(--muted);
text-align: center;
}
.chat-composer {
flex: 1;
resize: none;
min-height: 4.1rem;
padding: 0.6rem 0.75rem;
line-height: 1.45;
font: inherit;
color: var(--ink);
}
.send-button {
flex: 0 0 2.75rem;
width: 2.75rem;
height: auto;
}
.error-banner {
padding: 0.7rem 0.8rem;
color: #f0c0b5;
background: #211716;
border-color: #3b2421;
}
.resize-handle {
position: relative;
background: transparent;
}
.resize-handle::before {
content: '';
position: absolute;
inset: 0;
margin: auto;
background: var(--line-strong);
}
.resize-handle-vertical {
width: 0.625rem;
}
.resize-handle-vertical::before {
width: 1px;
height: 100%;
}
.resize-handle-horizontal {
height: 0.625rem;
}
.resize-handle-horizontal::before {
width: 100%;
height: 1px;
}
.viewport-panel-content,
.code-panel-content {
flex: 1;
}
.code-scroll-shell {
height: 100%;
overflow: auto;
}
.code-scroll-view {
margin: 0;
min-height: 100%;
padding: 0.75rem 0;
font-size: 0.82rem;
font-family: 'IBM Plex Mono', 'SFMono-Regular', Consolas, monospace;
}
.code-syntax-view {
min-height: 100%;
}
.code-syntax-view pre,
.code-syntax-view code {
font-family: 'IBM Plex Mono', 'SFMono-Regular', Consolas, monospace !important;
}
.code-syntax-view .linenumber {
min-width: 2.4rem !important;
}
.model-canvas-shell,
.code-panel-content > div {
height: 100%;
}
.viewport-empty-state,
.code-empty-state,
.chat-empty-state {
height: 100%;
}
.empty-state {
display: grid;
place-items: center;
gap: 0.4rem;
padding: 1.25rem;
text-align: center;
}
.empty-state.is-clickable {
width: 100%;
font: inherit;
color: inherit;
cursor: pointer;
transition: border-color 140ms ease, background-color 140ms ease;
}
.empty-state.is-clickable:hover {
border-color: var(--line-strong);
background: var(--surface-active);
}
.empty-state.is-clickable h3,
.empty-state.is-clickable p {
pointer-events: none;
}
.empty-state h3 {
margin: 0;
font-size: 0.95rem;
font-weight: 600;
}
.empty-state p {
margin: 0;
color: var(--muted);
}
.hidden-file-input {
display: none;
}
.toolbar-button:focus-visible,
.send-button:focus-visible,
.conversation-item:focus-visible,
.conversation-delete-button:focus-visible,
.composer-attach-button:focus-visible,
.composer-image-remove:focus-visible,
.image-lightbox-close:focus-visible,
.rail-item:focus-visible,
.chat-composer:focus-visible,
.tool-card-summary:focus-visible,
.reasoning-card-summary:focus-visible,
.tool-nested-summary:focus-visible,
.model-select select:focus-visible,
.download-link:focus-visible {
outline: 2px solid var(--focus);
outline-offset: 1px;
}
.empty-state.is-clickable:focus-visible {
outline: 2px solid var(--focus);
outline-offset: 1px;
}
.spin {
animation: spin 1.1s linear infinite;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes stream-delta-in {
0% {
opacity: 0;
filter: blur(9px);
}
18% {
opacity: 0.04;
filter: blur(8.4px);
}
42% {
opacity: 0.18;
filter: blur(6.4px);
}
72% {
opacity: 0.64;
filter: blur(2.6px);
}
100% {
opacity: 1;
filter: blur(0);
}
}
@keyframes thinking-breath {
0%,
100% {
border-color: rgba(143, 197, 255, 0.28);
box-shadow: 0 0 0 rgba(143, 197, 255, 0);
}
50% {
border-color: rgba(143, 197, 255, 0.5);
box-shadow: 0 0 1.2rem rgba(143, 197, 255, 0.08);
}
}
@keyframes thinking-dot-pulse {
0%,
100% {
opacity: 0.28;
transform: translateY(0) scale(0.82);
filter: blur(0.6px);
}
45% {
opacity: 1;
transform: translateY(-0.08rem) scale(1.08);
filter: blur(0);
}
}
@keyframes thinking-sheen {
0% {
transform: translateX(-120%);
opacity: 0;
}
18% {
opacity: 1;
}
58% {
transform: translateX(120%);
opacity: 0.7;
}
100% {
transform: translateX(120%);
opacity: 0;
}
}
@media (prefers-reduced-motion: reduce) {
.sidebar,
.bubble,
.tool-card,
.reasoning-card,
.tool-card-summary,
.reasoning-card-summary,
.tool-nested-summary,
.tool-card-chevron,
.tool-nested-chevron,
.tool-card-body-wrap,
.reasoning-card-body-wrap,
.tool-nested-body-wrap,
.bubble-thinking,
.bubble-thinking::after,
.thinking-indicator-dot,
.stream-delta {
transition: none !important;
animation: none !important;
transform: none !important;
filter: none !important;
}
}
@media (max-width: 1080px) {
.app-shell {
flex-direction: column;
}
.sidebar,
.sidebar.is-collapsed {
width: auto;
flex-basis: auto;
height: auto;
}
.workspace-shell {
padding-top: 0;
}
.panel-header,
.chat-composer-row {
flex-direction: column;
align-items: stretch;
}
.send-button {
width: 100%;
flex-basis: auto;
}
}