/* ==========================================================================
   OgbonMath — Command Palette
   --------------------------------------------------------------------------
   ⌘K / Ctrl+K searchable launcher. Inspired by Linear / Raycast / Claude.
   Uses tokens.css variables — fully themed, respects prefers-reduced-motion.
   ========================================================================== */

.cmdp-backdrop {
  position: fixed;
  inset: 0;
  background: var(--backdrop);
  z-index: var(--z-modal);
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding-top: 10vh;
  padding-left: var(--sp-4);
  padding-right: var(--sp-4);
  opacity: 0;
  animation: cmdp-fade-in var(--dur) var(--ease-calm) forwards;
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}

.cmdp-backdrop.cmdp-closing {
  animation: cmdp-fade-out var(--dur-fast) var(--ease-calm) forwards;
}

@keyframes cmdp-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes cmdp-fade-out {
  from { opacity: 1; }
  to   { opacity: 0; }
}

/* ==========================================================================
   Panel
   ==========================================================================
*/
.cmdp-panel {
  width: 100%;
  max-width: 640px;
  background: var(--bg2);
  color: var(--tx);
  border-radius: var(--radius-xl);
  border: 1px solid var(--bdr);
  box-shadow: var(--shadow-xl);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  max-height: min(560px, 80vh);
  transform: scale(0.98) translateY(6px);
  opacity: 0;
  animation: cmdp-scale-in var(--dur) var(--ease-calm) forwards;
  font-family: var(--font-sans);
}

.cmdp-backdrop.cmdp-closing .cmdp-panel {
  animation: cmdp-scale-out var(--dur-fast) var(--ease-calm) forwards;
}

@keyframes cmdp-scale-in {
  from { transform: scale(0.98) translateY(6px); opacity: 0; }
  to   { transform: scale(1)    translateY(0);   opacity: 1; }
}
@keyframes cmdp-scale-out {
  from { transform: scale(1)    translateY(0);   opacity: 1; }
  to   { transform: scale(0.99) translateY(3px); opacity: 0; }
}

/* ==========================================================================
   Search input
   ==========================================================================
*/
.cmdp-search {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-4) var(--sp-5);
  border-bottom: 1px solid var(--bdr);
  /* a11y: when the inner borderless input has focus, ring the wrapper */
  transition: border-bottom-color var(--dur-fast) var(--ease-out),
              box-shadow var(--dur-fast) var(--ease-out);
}

.cmdp-search:focus-within {
  border-bottom-color: var(--ac);
  box-shadow: inset 0 -2px 0 0 var(--ac);
}

.cmdp-search-icon {
  color: var(--tx2);
  font-size: 20px;
  line-height: 1;
  flex-shrink: 0;
}

.cmdp-input {
  flex: 1;
  border: none !important;
  background: transparent !important;
  color: var(--tx) !important;
  font-family: var(--font-sans) !important;
  font-size: var(--fs-lg) !important;
  padding: 0 !important;
  outline: none !important;
  box-shadow: none !important;
  min-width: 0;
}

.cmdp-input::placeholder {
  color: var(--tx3);
}

.cmdp-kbd-hint {
  display: flex;
  align-items: center;
  gap: var(--sp-1);
  color: var(--tx3);
  font-size: var(--fs-xs);
  font-family: var(--font-mono);
  flex-shrink: 0;
}

.cmdp-kbd {
  background: var(--bg3);
  border: 1px solid var(--bdr);
  border-radius: var(--radius-xs);
  padding: 2px 6px;
  font-size: 11px;
  font-family: var(--font-mono);
  line-height: 1.2;
  color: var(--tx2);
}

/* ==========================================================================
   Results list
   ==========================================================================
*/
.cmdp-results {
  flex: 1;
  overflow-y: auto;
  padding: var(--sp-2) 0;
  min-height: 80px;
}

.cmdp-section {
  padding: var(--sp-3) var(--sp-5) var(--sp-1);
  color: var(--tx3);
  font-size: var(--fs-xs);
  font-weight: var(--fw-semibold);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  font-family: var(--font-sans);
}

.cmdp-item {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-5);
  cursor: pointer;
  color: var(--tx);
  font-family: var(--font-sans);
  font-size: var(--fs-base);
  user-select: none;
  position: relative;
  transition: background var(--dur-fast) var(--ease-out);
}

.cmdp-item:hover,
.cmdp-item.cmdp-active {
  background: var(--ac-soft);
}

.cmdp-item.cmdp-active::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  bottom: 8px;
  width: 3px;
  background: var(--ac);
  border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
}

.cmdp-icon {
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--tx2);
  font-size: 16px;
  flex-shrink: 0;
}

.cmdp-item.cmdp-active .cmdp-icon {
  color: var(--ac);
}

.cmdp-label {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.cmdp-hint {
  color: var(--tx3);
  font-size: var(--fs-xs);
  font-family: var(--font-mono);
  flex-shrink: 0;
}

.cmdp-empty {
  padding: var(--sp-10) var(--sp-5);
  text-align: center;
  color: var(--tx2);
  font-family: var(--font-sans);
}

/* ==========================================================================
   Footer hint
   ==========================================================================
*/
.cmdp-foot {
  padding: var(--sp-2) var(--sp-5);
  border-top: 1px solid var(--bdr);
  background: var(--bg3);
  display: flex;
  justify-content: space-between;
  align-items: center;
  color: var(--tx3);
  font-size: var(--fs-xs);
  font-family: var(--font-sans);
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.cmdp-foot-keys {
  display: flex;
  gap: var(--sp-3);
  align-items: center;
}

.cmdp-foot-key {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
}

/* ==========================================================================
   Palette trigger button (topbar)
   ==========================================================================
*/
.cmdp-trigger {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  padding: 6px 10px 6px 12px;
  background: var(--bg3);
  border: 1px solid var(--bdr);
  border-radius: var(--radius-md);
  color: var(--tx2);
  font-family: var(--font-sans);
  font-size: var(--fs-sm);
  cursor: pointer;
  transition: border-color var(--dur-fast), color var(--dur-fast);
}

.cmdp-trigger:hover {
  border-color: var(--bdr2);
  color: var(--tx);
}

.cmdp-trigger-label { opacity: 0.9; }

/* Mobile: shrink trigger to icon-only */
@media (max-width: 640px) {
  .cmdp-trigger-label,
  .cmdp-trigger .cmdp-kbd { display: none; }
  .cmdp-trigger { padding: 6px 10px; }
}

/* ==========================================================================
   Mobile responsiveness for the palette itself
   ==========================================================================
*/
@media (max-width: 560px) {
  .cmdp-backdrop {
    padding-top: 6vh;
    padding-left: var(--sp-2);
    padding-right: var(--sp-2);
  }
  .cmdp-panel { max-height: 88vh; border-radius: var(--radius-lg); }
  .cmdp-search { padding: var(--sp-3) var(--sp-4); }
  .cmdp-item { padding: var(--sp-3) var(--sp-4); }
  .cmdp-section { padding: var(--sp-2) var(--sp-4) 0; }
  .cmdp-input { font-size: var(--fs-md) !important; }
  .cmdp-foot { padding: var(--sp-2) var(--sp-4); }
  .cmdp-kbd-hint { display: none; } /* hide ESC hint next to input on mobile */
}
