/* ============================================= */
/*  S Y M B O L S   P A N E L                    */
/* ============================================= */

/* ---- Keyframes ---- */

@keyframes symbolsFadeIn {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes symbolsFadeOut {
  from {
    opacity: 1;
    transform: translateY(0);
  }
  to {
    opacity: 0;
    transform: translateY(8px);
  }
}

/* ---- Panel Base ---- */

.symbolsPanel {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 280px;
  background: var(--color-canvas-default, #0d1117);
  border-left: 1px solid var(--color-border-default, #30363d);
  display: flex;
  flex-direction: column;
  z-index: 55;
  box-shadow: -4px 0 16px rgba(0, 0, 0, 0.35);
  opacity: 1;
  transform: translateY(0);
  animation: symbolsFadeIn 0.25s ease forwards;
  pointer-events: auto;
}

/* Hidden state — plays the fade-out, then display:none is applied via JS class swap */
.symbolsPanel.hide {
  display: none;
}

/* Fade-out animation class — applied briefly before adding .hide */
.symbolsPanel.fadingOut {
  animation: symbolsFadeOut 0.2s ease forwards;
  pointer-events: none;
}

/* ---- Backdrop overlay for mobile ---- */

.symbolsBackdrop {
  position: absolute;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 54;
  opacity: 1;
  transition: opacity 0.2s ease;
  pointer-events: auto;
}

.symbolsBackdrop.hide {
  display: none;
}

.symbolsBackdrop.fadingOut {
  opacity: 0;
  pointer-events: none;
}

/* ---- Header ---- */

.symbolsPanelHeader {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 12px;
  border-bottom: 1px solid var(--color-border-default, #30363d);
  background: var(--color-canvas-subtle, #161b22);
  flex-shrink: 0;
}

.symbolsPanelTitle {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--color-fg-default, #e6edf3);
}

.symbolsPanelTitle svg {
  flex-shrink: 0;
  color: var(--color-fg-muted, #8b949e);
}

.symbolsPanelActions {
  display: flex;
  align-items: center;
  gap: 6px;
}

.symbolsSearchInput {
  flex: 1;
  height: 28px;
  padding: 0 8px;
  font-size: 12px;
  color: var(--color-fg-default, #e6edf3);
  background: var(--color-canvas-default, #0d1117);
  border: 1px solid var(--color-border-default, #30363d);
  border-radius: 6px;
  outline: none;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
  font-family: inherit;
}

.symbolsSearchInput:focus {
  border-color: var(--color-accent-fg, #2f81f7);
  box-shadow: 0 0 0 3px rgba(47, 129, 247, 0.15);
}

.symbolsSearchInput::placeholder {
  color: var(--color-fg-subtle, #6e7681);
}

.symbolsPanelCloseBtn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 6px;
  color: var(--color-fg-muted, #8b949e);
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.15s ease, color 0.15s ease;
}

.symbolsPanelCloseBtn:hover {
  background: var(--color-neutral-muted, rgba(110, 118, 129, 0.1));
  color: var(--color-fg-default, #e6edf3);
}

/* ---- Body ---- */

.symbolsPanelBody {
  flex: 1;
  overflow-y: auto;
  overflow-x: hidden;
  padding: 4px 0;
  -webkit-overflow-scrolling: touch;
}

.symbolsPanelBody::-webkit-scrollbar {
  width: 6px;
}

.symbolsPanelBody::-webkit-scrollbar-track {
  background: transparent;
}

.symbolsPanelBody::-webkit-scrollbar-thumb {
  background: var(--color-border-default, #30363d);
  border-radius: 3px;
}

.symbolsPanelBody::-webkit-scrollbar-thumb:hover {
  background: var(--color-fg-subtle, #6e7681);
}

/* ---- Empty State ---- */

.symbolsEmpty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 40px 20px;
  color: var(--color-fg-subtle, #6e7681);
  font-size: 13px;
  text-align: center;
}

.symbolsEmpty.hide {
  display: none;
}

/* ---- Groups ---- */

.symbolsGroup {
  margin-bottom: 2px;
}

.symbolsGroupHeader {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 12px 4px;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--color-fg-muted, #8b949e);
  user-select: none;
}

.symbolsGroupCount {
  font-size: 10px;
  font-weight: 500;
  color: var(--color-fg-subtle, #6e7681);
  background: var(--color-neutral-muted, rgba(110, 118, 129, 0.1));
  padding: 0 6px;
  border-radius: 10px;
  line-height: 18px;
}

/* ---- Symbol Items ---- */

.symbolItem {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 6px 12px 6px 8px;
  font-size: 13px;
  font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'JetBrains Mono', Consolas, monospace;
  color: var(--color-fg-default, #e6edf3);
  background: transparent;
  border: none;
  cursor: pointer;
  text-align: left;
  transition: background 0.1s ease;
  line-height: 1.6;
  outline: none;
}

.symbolItem:hover {
  background: var(--color-neutral-muted, rgba(110, 118, 129, 0.1));
}

.symbolItem:focus-visible {
  background: var(--color-neutral-muted, rgba(110, 118, 129, 0.1));
  outline: 2px solid var(--color-accent-fg, #2f81f7);
  outline-offset: -2px;
  border-radius: 4px;
}

.symbolItem:active {
  background: var(--color-neutral-subtle, rgba(110, 118, 129, 0.15));
}

.symbolIcon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  font-size: 11px;
  font-weight: 700;
  border-radius: 4px;
  flex-shrink: 0;
  line-height: 1;
}

.symbolName {
  flex: 1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.symbolLine {
  font-size: 11px;
  color: var(--color-fg-subtle, #6e7681);
  flex-shrink: 0;
  font-variant-numeric: tabular-nums;
}

/* ---- Symbol Type Colors ---- */

.symbol-function .symbolIcon {
  background: rgba(210, 153, 34, 0.15);
  color: #d2991f;
}

.symbol-class .symbolIcon {
  background: rgba(227, 98, 9, 0.15);
  color: #e36209;
}

.symbol-interface .symbolIcon {
  background: rgba(121, 184, 255, 0.15);
  color: #79b8ff;
}

.symbol-type .symbolIcon {
  background: rgba(121, 184, 255, 0.15);
  color: #79b8ff;
}

.symbol-enum .symbolIcon {
  background: rgba(240, 141, 73, 0.15);
  color: #f08d49;
}

.symbol-method .symbolIcon {
  background: rgba(210, 153, 34, 0.15);
  color: #d2991f;
}

.symbol-property .symbolIcon {
  background: rgba(86, 211, 100, 0.15);
  color: #56d364;
}

.symbol-variable .symbolIcon {
  background: rgba(121, 192, 255, 0.15);
  color: #79c0ff;
}

.symbol-constant .symbolIcon {
  background: rgba(255, 123, 114, 0.15);
  color: #ff7b72;
}

.symbol-object .symbolIcon {
  background: rgba(188, 140, 255, 0.15);
  color: #bc8cff;
}

.symbol-array .symbolIcon {
  background: rgba(188, 140, 255, 0.15);
  color: #bc8cff;
}

.symbol-element .symbolIcon {
  background: rgba(255, 123, 114, 0.15);
  color: #ff7b72;
}

.symbol-id .symbolIcon {
  background: rgba(86, 211, 100, 0.15);
  color: #56d364;
}

.symbol-media .symbolIcon {
  background: rgba(188, 140, 255, 0.15);
  color: #bc8cff;
}

.symbol-keyframe .symbolIcon {
  background: rgba(210, 153, 34, 0.15);
  color: #d2991f;
}

.symbol-table .symbolIcon {
  background: rgba(121, 184, 255, 0.15);
  color: #79b8ff;
}

.symbol-view .symbolIcon {
  background: rgba(86, 211, 100, 0.15);
  color: #56d364;
}

.symbol-heading .symbolIcon {
  background: rgba(210, 153, 34, 0.15);
  color: #d2991f;
}

.symbol-key .symbolIcon {
  background: rgba(121, 192, 255, 0.15);
  color: #79c0ff;
}

.symbol-comment .symbolIcon {
  background: rgba(110, 118, 129, 0.15);
  color: #6e7681;
}

.symbol-default .symbolIcon {
  background: rgba(139, 148, 158, 0.15);
  color: #8b949e;
}

/* ---- Line Highlight (in CodeMirror) ---- */

.symbolHighlightLine {
  background: rgba(47, 129, 247, 0.12) !important;
  transition: background 0.3s ease;
}

/* ---- Active Symbols Button ---- */

#symbolsBtn.active {
  background: var(--color-accent-subtle, rgba(47, 129, 247, 0.15));
  color: var(--color-accent-fg, #2f81f7);
}

/* ============================================= */
/*  M O B I L E   O V E R R I D E S              */
/* ============================================= */

@media (max-width: 768px) {
  .symbolsPanel {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border-left: none;
    border-radius: 0;
    box-shadow: none;
    animation: symbolsFadeIn 0.2s ease forwards;
  }

  .symbolsPanel.fadingOut {
    animation: symbolsFadeOut 0.2s ease forwards;
  }

  .symbolsPanelHeader {
    padding: 14px 16px;
    gap: 10px;
  }

  .symbolsPanelTitle {
    font-size: 15px;
  }

  .symbolsSearchInput {
    height: 36px;
    font-size: 14px;
    padding: 0 12px;
    border-radius: 8px;
  }

  .symbolsPanelCloseBtn {
    width: 36px;
    height: 36px;
  }

  .symbolsPanelCloseBtn svg {
    width: 16px;
    height: 16px;
  }

  .symbolItem {
    padding: 10px 16px 10px 12px;
    font-size: 14px;
    gap: 10px;
  }

  .symbolIcon {
    width: 26px;
    height: 26px;
    font-size: 12px;
    border-radius: 6px;
  }

  .symbolLine {
    font-size: 12px;
  }

  .symbolsGroupHeader {
    padding: 8px 16px 6px;
    font-size: 12px;
  }

  .symbolsGroupCount {
    font-size: 11px;
    padding: 0 8px;
    line-height: 20px;
  }

  .symbolsEmpty {
    padding: 60px 24px;
    font-size: 14px;
    gap: 16px;
  }
}