Replace the modal command palette with a nonmodal terminal dock.

Ctrl+K now opens a corner session with a parsed navigate grammar, persistent history, and no page lock. Unknown targets stay on a closed alias table and never become URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-26 12:52:22 +02:00
parent 646b39b200
commit 162bd790da
23 changed files with 1322 additions and 1278 deletions

View File

@@ -0,0 +1,161 @@
@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);
}
.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 auto;
gap: var(--space-3);
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);
}
.terminal-dock.is-open {
inset-inline: 0;
inset-block-end: 0;
justify-items: stretch;
}
.terminal-dock.is-open .terminal-dock-trigger {
display: none;
}
.is-maximized .terminal-dock-panel {
max-height: 90vh;
}
.terminal-dock-title,
.terminal-dock-log,
.terminal-dock-log 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-log {
overflow: auto;
min-height: 6rem;
font-family: var(--font-mono);
font-size: var(--text-sm);
color: var(--color-text-muted);
white-space: pre-wrap;
}
.terminal-dock-log .echo {
color: var(--color-text);
}
.terminal-dock-form {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: var(--space-2);
}
.terminal-dock-prompt {
font-family: var(--font-mono);
font-size: var(--text-sm);
color: var(--color-accent-cool);
}
.terminal-dock-form input {
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);
}
@media (hover: hover) and (pointer: fine) {
.terminal-dock-trigger:hover,
.terminal-dock-control:hover {
border-color: var(--surface-glass-border-strong);
}
}
@media (prefers-reduced-motion: reduce) {
.terminal-dock,
.terminal-dock-panel {
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.is-open .terminal-dock-trigger {
display: inline-flex;
}
.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);
}
}