spaxel/dashboard/css/command-palette.css
jedarden 07abc03ef4 style(dashboard): complete design token migration and live view cleanup
Replace remaining hard-coded colors across all CSS files with design
tokens from tokens.css. Remove duplicate inline positioning from
live.html panels (now in layout.css). Add replay session blob fetch
for immediate 3D scene state on seek.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-24 16:39:53 -04:00

219 lines
4.1 KiB
CSS

/**
* Spaxel Dashboard — Command Palette Styles (Component 34)
*
* Activated by Ctrl+K / Cmd+K in expert mode only.
*/
/* ===== Overlay backdrop ===== */
.cp-overlay {
display: none;
position: fixed;
inset: 0;
z-index: 9000;
}
.cp-overlay.cp-visible {
display: block;
}
.cp-backdrop {
position: absolute;
inset: 0;
background: var(--shadow-xl);
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
animation: cp-fade-in 0.12s ease-out;
}
@keyframes cp-fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
/* ===== Container ===== */
.cp-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
max-width: 600px;
background: var(--slate-3);
border-radius: var(--radius-card);
box-shadow: 0 24px 64px var(--overlay-strong), 0 0 0 1px var(--border-subtle);
overflow: hidden;
animation: cp-slide-in 0.14s ease-out;
display: flex;
flex-direction: column;
}
@keyframes cp-slide-in {
from {
opacity: 0;
transform: translate(-50%, calc(-50% - 12px));
}
to {
opacity: 1;
transform: translate(-50%, -50%);
}
}
/* ===== Search row ===== */
.cp-search-row {
display: flex;
align-items: center;
gap: 10px;
padding: 14px var(--space-4);
border-bottom: 1px solid var(--border-default);
}
.cp-search-icon {
font-size: var(--text-base);
flex-shrink: 0;
opacity: 0.6;
}
.cp-input {
flex: 1;
background: transparent;
border: none;
outline: none;
color: var(--slate-12);
font-size: var(--text-md);
font-family: inherit;
line-height: var(--lh-body);
}
.cp-input::placeholder {
color: var(--slate-9);
}
.cp-esc-hint {
font-size: var(--text-2xs);
color: var(--slate-7);
background: var(--highlight-subtle);
border-radius: var(--radius-control);
padding: 2px 7px;
flex-shrink: 0;
font-family: var(--font-mono);
}
/* ===== Results list ===== */
.cp-results {
list-style: none;
margin: 0;
padding: 6px 0;
max-height: 360px; /* ~8 items */
overflow-y: auto;
overflow-x: hidden;
}
.cp-results::-webkit-scrollbar {
width: 6px;
}
.cp-results::-webkit-scrollbar-track {
background: transparent;
}
.cp-results::-webkit-scrollbar-thumb {
background: var(--bg-active);
border-radius: var(--radius-control);
}
/* Group header */
.cp-group-header {
padding: 6px var(--space-4) var(--space-1);
font-size: var(--text-3xs);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--slate-7);
}
/* Empty state */
.cp-empty {
padding: var(--space-8) var(--space-4);
text-align: center;
color: var(--slate-7);
font-size: var(--text-sm);
}
/* Result item */
.cp-item {
display: flex;
align-items: center;
gap: 10px;
padding: 9px var(--space-4);
cursor: pointer;
transition: background 0.1s;
}
.cp-item:hover {
background: var(--border-subtle);
}
.cp-item-selected {
background: var(--row-selected) !important;
}
.cp-item-icon {
font-size: var(--text-base);
flex-shrink: 0;
width: 20px;
text-align: center;
line-height: 1;
}
.cp-item-body {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 1px;
}
.cp-item-label {
font-size: var(--text-sm);
font-weight: 500;
color: var(--slate-12);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.cp-item-secondary {
font-size: var(--text-xs);
color: var(--slate-9);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.cp-item-arrow {
font-size: var(--text-xl);
color: var(--slate-7);
flex-shrink: 0;
line-height: 1;
}
.cp-item-selected .cp-item-arrow {
color: var(--blue-9);
}
/* ===== Responsive ===== */
@media (max-width: 640px) {
.cp-container {
width: 96%;
top: 12%;
transform: translateX(-50%);
}
}
/* ===== Reduced motion ===== */
@media (prefers-reduced-motion: reduce) {
.cp-backdrop,
.cp-container {
animation: none;
}
}