/* Command palette — consumes the :root tokens defined in evolution.css. */

/* Lets the panel and list items transition between fixed heights and `auto`. */
:root {
    interpolate-size: allow-keywords;
}

.palette-root {
    position: fixed;
    inset: 0;
    z-index: 120; /* above header (100) and grain (90) */
    display: flex;
    align-items: center;
    justify-content: center;
    visibility: hidden;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.18s ease, visibility 0.18s ease;
}

.palette-root.is-open {
    visibility: visible;
    opacity: 1;
    pointer-events: auto;
}

.palette-overlay {
    position: absolute;
    inset: 0;
    background: rgba(4, 7, 9, 0.58);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
}

.palette-panel {
    --palette-head-h: 3.4rem;
    position: relative;
    width: 0; /* first open animates 0 -> full width */
    height: var(--palette-head-h); /* header row only until the second stage */
    max-height: min(60vh, 32rem);
    display: flex;
    flex-direction: column;
    border: 1px solid var(--line);
    border-radius: 14px;
    background: var(--panel, #0d1214);
    box-shadow: 0 2rem 5rem rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(0, 0, 0, 0.35);
    overflow: hidden;
    opacity: 0;
    transform: translateY(-8px) scale(0.985);
    transition: width 1.3s cubic-bezier(0.22, 0.61, 0.36, 1),
                height 1.3s cubic-bezier(0.22, 0.61, 0.36, 1),
                opacity 0.15s ease,
                transform 0.15s ease;
}

/* Stage 1 of the first open: width expands, height held at the header row. */
.palette-root.is-open .palette-panel {
    width: min(34rem, calc(100vw - 2rem));
    opacity: 1;
    transform: translateY(0) scale(1);
}

/* Stage 2: height grows from the header row to the natural content size. */
.palette-root.is-open .palette-panel.palette-expanded {
    height: auto;
}

/* Later opens: jump straight to full size, fade in only. */
.palette-root.is-open .palette-panel.palette-reopen {
    width: min(34rem, calc(100vw - 2rem));
    height: auto;
    transition: opacity 0.12s ease, transform 0.12s ease;
}

/* Closing: collapse size instantly, fade out only. */
.palette-panel.palette-closing {
    width: 0;
    height: var(--palette-head-h);
    transition: opacity 0.12s ease;
}

.palette-head {
    flex: none;
    display: flex;
    align-items: center;
    gap: 0.9rem;
    padding: 0.85rem 1.1rem;
    border-bottom: 1px solid var(--line);
}

.palette-micro {
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--dim);
    flex: none;
}

.palette-input {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: 0;
    outline: 0;
    color: var(--ink);
    font-family: var(--sans);
    font-size: 1.05rem;
    caret-color: var(--acid);
}

.palette-input::placeholder {
    color: var(--dim);
}

.palette-list {
    flex: 1 1 auto;
    min-height: 0;
    margin: 0;
    padding: 0.5rem;
    list-style: none;
    overflow-y: auto;
    overscroll-behavior: contain;
}

/* Items and group separators animate height/opacity when filtered out. */
.palette-group,
.palette-opt {
    overflow: hidden;
    transition: height 0.22s cubic-bezier(0.22, 0.61, 0.36, 1),
                padding 0.22s cubic-bezier(0.22, 0.61, 0.36, 1),
                opacity 0.16s ease,
                background 0.12s ease,
                color 0.12s ease;
}

.palette-group.palette-hidden,
.palette-opt.palette-hidden {
    height: 0;
    padding-top: 0;
    padding-bottom: 0;
    opacity: 0;
}

.palette-group {
    padding: 0.6rem 0.7rem 0.35rem;
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--dim);
}

.palette-opt {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    padding: 0.55rem 0.7rem;
    border-radius: 8px;
    cursor: pointer;
    color: var(--ink);
}

.palette-opt .opt-label {
    font-size: 0.92rem;
    letter-spacing: 0.02em;
}

.palette-opt .opt-hint {
    margin-left: auto;
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--dim);
}

.palette-opt kbd {
    font-family: var(--mono);
    font-size: 10px;
    line-height: 1;
    color: var(--dim);
    border: 1px solid var(--line);
    border-radius: 4px;
    padding: 3px 6px;
    flex: none;
}

.palette-opt.is-highlighted {
    background: rgba(184, 255, 101, 0.08);
    color: var(--acid);
}

.palette-opt.is-highlighted .opt-hint,
.palette-opt.is-highlighted kbd {
    color: var(--muted);
}

.palette-empty {
    padding: 1.6rem 0.7rem;
    text-align: center;
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--dim);
}

@media (prefers-reduced-motion: reduce) {
    .palette-root,
    .palette-panel,
    .palette-group,
    .palette-opt {
        transition: none !important;
    }
}
