Files
Portfolio/src/app/shared/terminal/terminal-dock.scss
Antonio Ledebuhr bb9912daef Keep the default-open terminal inside the viewport and the map labels inside their shapes.
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>
2026-08-27 00:43:56 +02:00

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);
}
}