.graph-page {
  padding: 2.5rem 2rem;
  max-width: 100%;
}

.page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 2rem;

  .subtitle {
    color: #9ca3af;
    font-size: 0.9rem;
    margin: 0.25rem 0 0;
  }
}

.graph-empty {
  padding: 2rem;
  text-align: center;
  color: #9ca3af;
  background: #14141f;
  border-radius: 8px;
  border: 1px dashed #374151;
}

.graph-container {
  // Fond legerement plus sombre que la couleur des noeuds : creuse l'image
  // sans aller jusqu'au noir pur (qui « brulerait » par contraste).
  background: #0d0d18;
  border: 1px solid #374151;
  border-radius: 12px;
  padding: 20px;
  overflow: auto;
  display: flex;
  justify-content: center;
  flex-direction: column;
  align-items: center;
}

.graph-svg {
  display: block;
  max-width: 100%;
  // Empeche le browser de clipper le contenu qui depasserait le viewport SVG
  // pendant un drag — le scroll du conteneur prend le relais.
  overflow: visible;
  // Évite que le navigateur intercepte le drag pour faire de la sélection texte
  // ou du panning natif sur les nœuds.
  touch-action: none;
  user-select: none;
}

.node {
  cursor: grab;
  // Ombre portee douce pour detacher chaque noeud du fond. Faible alpha pour
  // rester subtil sur fond sombre, large diffusion pour rester organique.
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.5));

  .node-box {
    // Indigo desature : reprend la palette accent (#6c63ff) en version assombrie
    // pour donner du caractere aux noeuds sans saturer la vue. Bordure assortie
    // un peu plus claire pour bien dessiner le contour.
    fill: #1f1d3a;
    stroke: #4f4a7a;
    stroke-width: 2;
    transition: fill 0.15s ease, stroke 0.15s ease;
  }

  .node-label {
    font-size: 0.9rem;
    font-weight: 500;
    fill: #f3f4f6;
    pointer-events: none;
  }

  &:hover .node-box {
    fill: #2c2952;
    stroke: #8b80ff;
  }

  &.dragging {
    cursor: grabbing;
    .node-box {
      fill: #2c2952;
      stroke: #8b80ff;
      filter: drop-shadow(0 4px 10px rgba(108, 99, 255, 0.35));
    }
  }
}

.edge-label {
  font-size: 0.75rem;
  fill: #e5e7eb;
  font-style: italic;
  cursor: grab;
  // Halo sombre autour du texte pour rester lisible quand un label passe
  // par-dessus une arête ou un autre nœud. Aligne sur la couleur du fond.
  paint-order: stroke;
  stroke: #0d0d18;
  stroke-width: 4px;
  stroke-linejoin: round;

  &:hover { fill: #ffffff; }
  &.dragging {
    cursor: grabbing;
    fill: #ffffff;
  }
}

.graph-hint {
  display: block;
  margin-top: 1rem;
  color: #9ca3af;
  font-size: 0.85rem;
}
