The dock prompt and placeholder now meet contrast on the raised surface, and service nodes use the same rect geometry as the cases. Co-authored-by: Cursor <cursoragent@cursor.com>
197 lines
4.1 KiB
SCSS
197 lines
4.1 KiB
SCSS
@use 'breakpoints' as bp;
|
|
|
|
:host {
|
|
display: contents;
|
|
}
|
|
|
|
.terminal-dock {
|
|
position: fixed;
|
|
z-index: 40;
|
|
inset-inline-end: var(--space-4);
|
|
inset-block-end: var(--space-4);
|
|
display: grid;
|
|
justify-items: end;
|
|
gap: var(--space-2);
|
|
max-width: 100%;
|
|
}
|
|
|
|
.terminal-dock-trigger {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
min-height: 2.75rem;
|
|
padding: var(--space-2) var(--space-3);
|
|
border: 1px solid var(--surface-glass-border);
|
|
border-radius: var(--radius-sm);
|
|
background: var(--color-surface-raised);
|
|
color: var(--color-text);
|
|
font: inherit;
|
|
}
|
|
|
|
.terminal-dock-trigger kbd {
|
|
padding: 0.1rem var(--space-2);
|
|
border: 1px solid var(--surface-glass-border);
|
|
border-radius: var(--radius-sm);
|
|
font-family: var(--font-mono);
|
|
font-size: var(--text-xs);
|
|
color: var(--color-text-muted);
|
|
}
|
|
|
|
.terminal-dock-panel {
|
|
display: grid;
|
|
grid-template-rows: auto 1fr;
|
|
gap: var(--space-3);
|
|
width: 100%;
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
max-height: min(70vh, 32rem);
|
|
padding: var(--space-4);
|
|
border: 1px solid var(--surface-glass-border);
|
|
border-radius: var(--radius-lg) var(--radius-lg) 0 0;
|
|
background: var(--color-surface-raised);
|
|
box-shadow: var(--shadow-raised);
|
|
color: var(--color-text);
|
|
animation: terminal-dock-in var(--duration-base) var(--ease-standard);
|
|
transition:
|
|
width var(--duration-base) var(--ease-standard),
|
|
max-height var(--duration-base) var(--ease-standard);
|
|
}
|
|
|
|
.terminal-dock.is-open {
|
|
inset-inline: 0;
|
|
inset-block-end: 0;
|
|
justify-items: stretch;
|
|
}
|
|
|
|
.terminal-dock-trigger[hidden] {
|
|
display: none;
|
|
}
|
|
|
|
.is-maximized .terminal-dock-panel {
|
|
max-height: 90vh;
|
|
}
|
|
|
|
.terminal-dock-toolbar {
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.terminal-dock-title,
|
|
.terminal-dock-session,
|
|
.terminal-dock-session p,
|
|
.terminal-dock-form {
|
|
margin: 0;
|
|
}
|
|
|
|
.terminal-dock-title {
|
|
font-size: var(--text-sm);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.terminal-dock-control {
|
|
min-height: 2.75rem;
|
|
padding-inline: var(--space-3);
|
|
border: 1px solid var(--surface-glass-border);
|
|
border-radius: var(--radius-sm);
|
|
background: transparent;
|
|
color: var(--color-text);
|
|
font: inherit;
|
|
}
|
|
|
|
.terminal-dock-control[aria-pressed='true'] {
|
|
border-color: var(--surface-glass-border-strong);
|
|
background: var(--color-surface);
|
|
}
|
|
|
|
.terminal-dock-session {
|
|
overflow: auto;
|
|
min-width: 0;
|
|
min-height: 8rem;
|
|
font-family: var(--font-mono);
|
|
font-size: var(--text-sm);
|
|
color: var(--color-text-muted);
|
|
white-space: pre-wrap;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.terminal-dock-session .echo {
|
|
color: var(--color-text);
|
|
}
|
|
|
|
.terminal-dock-form {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, auto) minmax(0, 1fr);
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
min-width: 0;
|
|
}
|
|
|
|
.terminal-dock-prompt {
|
|
font-family: var(--font-mono);
|
|
font-size: var(--text-sm);
|
|
color: var(--color-text);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.terminal-dock-form input {
|
|
min-width: 0;
|
|
width: 100%;
|
|
min-height: 2.75rem;
|
|
padding: var(--space-2) var(--space-3);
|
|
border: 1px solid var(--surface-glass-border);
|
|
border-radius: var(--radius-sm);
|
|
background: var(--color-surface);
|
|
color: var(--color-text);
|
|
font-family: var(--font-mono);
|
|
font-size: var(--text-sm);
|
|
}
|
|
|
|
.terminal-dock-form input::placeholder {
|
|
color: var(--color-text-subtle);
|
|
opacity: 1;
|
|
}
|
|
|
|
@media (hover: hover) and (pointer: fine) {
|
|
.terminal-dock-trigger:hover,
|
|
.terminal-dock-control:hover {
|
|
border-color: var(--surface-glass-border-strong);
|
|
}
|
|
}
|
|
|
|
@keyframes terminal-dock-in {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(0.4rem);
|
|
}
|
|
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.terminal-dock-panel {
|
|
animation: none;
|
|
transition: none;
|
|
}
|
|
}
|
|
|
|
@include bp.respond-to(md) {
|
|
.terminal-dock.is-open {
|
|
inset-inline: auto var(--space-4);
|
|
inset-block-end: var(--space-4);
|
|
justify-items: end;
|
|
}
|
|
|
|
.terminal-dock-panel {
|
|
width: min(28rem, calc(100vw - var(--space-8)));
|
|
max-height: min(22rem, 60vh);
|
|
border-radius: var(--radius-md);
|
|
}
|
|
|
|
.is-maximized .terminal-dock-panel {
|
|
width: min(48rem, calc(100vw - var(--space-8)));
|
|
max-height: min(36rem, 80vh);
|
|
}
|
|
}
|