.residue-hover {
  cursor: help;
  border-bottom: 1px dotted var(--bs-secondary);
}

.residue-hover:hover {
  background-color: var(--bs-body-bg);
  border-bottom-color: currentColor;
}

/* Toggled by molviewer_controller when the matching atom is hovered in the
   3D view -- keeps sequence text and structure in sync in both directions. */
.residue-active {
  font-weight: 700;
  background-color: var(--led-warn-bg);
  border-radius: var(--bs-border-radius-sm);
}

/* Sidebar + main-pane workspace shell used by the predictions views. */
.workspace {
  display: flex;
  align-items: flex-start;
  gap: 1.75rem;
}

.workspace-sidebar {
  width: 250px;
  flex-shrink: 0;
  border-right: 1px solid var(--bs-border-color);
  padding-right: 1rem;
}

.workspace-main {
  flex: 1;
  min-width: 0;
  max-width: 46rem;
}

.workspace-list .list-group-item {
  border-left: none;
  border-right: none;
  border-radius: 0 !important;
}

.workspace-list .list-group-item.active {
  background-color: var(--accent-soft);
  border-color: var(--bs-border-color);
  color: var(--bs-body-color);
  font-weight: 600;
}

/* Predictions table in the sidebar (see dblclick_navigate_controller.js) --
   single click just highlights a row (same accent as .active above),
   double-click actually navigates, the classic desktop file-manager split. */
.workspace-list-table tbody tr {
  cursor: pointer;
}

.workspace-list-table tbody tr.active td {
  background-color: var(--accent-soft);
  font-weight: 600;
}

@media (max-width: 767.98px) {
  .workspace {
    flex-direction: column;
  }

  .workspace-sidebar {
    width: 100%;
    border-right: none;
    border-bottom: 1px solid var(--bs-border-color);
    padding-right: 0;
    padding-bottom: 1rem;
    margin-bottom: 1rem;
  }
}

/* Pipeline stepper (.pipeline-stepper/.pipeline-map-*) styling now lives in
   the host app/assets/stylesheets/application.css -- centralized since
   it's pure shared visual language across every engine's identical
   partial shape. Status drives the icon circle's color; see
   Folding::PredictionsHelper for how each stage's status is computed. */
