/* Canvas design HVAC (étape 7) — split vue projet + panneau schéma.
   Couleurs via les variables Mantine pour suivre le thème clair/sombre. */

/* ---- rangée des onglets endpoints ----
   Ligne de démarcation sous TOUTE la rangée (onglets + bouton « + ») ;
   la bordure propre de la TabsList est neutralisée pour ne pas doubler. */
.hvac-endpoint-tabs-row {
  border-bottom: 1px solid var(--mantine-color-default-border);
}
.hvac-endpoint-tabs-row .mantine-Tabs-list::before {
  border-bottom: none;
}

/* ---- split data / design ----
   Largeur du design pilotée par --hvac-design-w (poignée de resize manuel,
   assets/hvac_split_resize.js) ; défaut 40 % ≈ l'ancien ratio 1.5fr/1fr.
   Le min() borne toujours à 75 % (fenêtre rétrécie après un drag large). */
.hvac-ep-split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) min(var(--hvac-design-w, 40%), 75%);
  gap: 16px;
  align-items: start;
}

.hvac-design-pane {
  position: sticky;
  top: 12px;             /* au scroll, ne colle pas au bord de la fenêtre */
  height: calc(100vh - 220px);
  min-height: 440px;
  margin-top: 12px;      /* léger décalage sous la rangée d'onglets */
}

/* cadre visible autour de TOUTE la partie données : matérialise la zone
   dont la poignée ajuste la largeur (même style que le panneau design). */
.hvac-data-pane {
  border: 1px solid var(--mantine-color-default-border);
  border-radius: var(--mantine-radius-md);
  background: var(--mantine-color-body);
  padding: 0 12px 12px;
  margin-top: 12px;
}
.hvac-design-pane > .mantine-Paper-root {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
}

/* élément sélectionné depuis le canvas : contour orange dans le panneau data */
.hvac-el-selected {
  box-shadow: 0 0 0 2px var(--mantine-color-orange-6);
  border-radius: var(--mantine-radius-sm);
}

/* poignée de redimensionnement (injectée par hvac_split_resize.js) */
.hvac-split-resize-handle {
  position: absolute;
  left: -12px;
  top: 0;
  bottom: 0;
  width: 8px;
  cursor: col-resize;
  border-radius: 4px;
  touch-action: none;
}
.hvac-split-resize-handle:hover,
.hvac-split-resize-handle:active {
  background: var(--mantine-color-default-border);
}

/* drag au-delà de la borne min : le panneau franchi est replié tout entier.
   Le panneau design reste dans le flux (colonne 0) pour que sa poignée,
   posée dans le gap, permette de le rouvrir. */
.hvac-ep-split.hvac-design-collapsed { grid-template-columns: minmax(0, 1fr) 0px; }
.hvac-ep-split.hvac-design-collapsed .hvac-design-pane > .mantine-Paper-root { display: none; }
.hvac-ep-split.hvac-data-collapsed { grid-template-columns: 0px minmax(0, 1fr); }
.hvac-ep-split.hvac-data-collapsed .hvac-data-pane { display: none; }
/* la data pane masquée sort de la grille : sans épinglage explicite, le
   design glisserait en colonne 1 (0px) et TOUT disparaîtrait. */
.hvac-ep-split.hvac-data-collapsed .hvac-design-pane { grid-column: 2; grid-row: 1; }

/* panneau replié : la poignée devient une barre VISIBLE (clic = rouvrir,
   drag = rouvrir en ajustant) — sans elle, plus aucune UI pour revenir. */
.hvac-ep-split.hvac-design-collapsed .hvac-split-resize-handle,
.hvac-ep-split.hvac-data-collapsed .hvac-split-resize-handle {
  width: 16px;
  left: -16px;
  background: var(--mantine-color-default);
  border: 1px solid var(--mantine-color-default-border);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--mantine-color-dimmed);
  font-size: 13px;
  font-weight: 700;
}
.hvac-ep-split.hvac-design-collapsed .hvac-split-resize-handle::after { content: "‹"; }
.hvac-ep-split.hvac-data-collapsed .hvac-split-resize-handle::after { content: "›"; }
.hvac-ep-split.hvac-design-collapsed .hvac-split-resize-handle:hover,
.hvac-ep-split.hvac-data-collapsed .hvac-split-resize-handle:hover {
  background: var(--mantine-color-default-hover);
}

@media (max-width: 1100px) {
  .hvac-ep-split,
  .hvac-ep-split.hvac-design-collapsed,
  .hvac-ep-split.hvac-data-collapsed { grid-template-columns: 1fr; }
  .hvac-ep-split.hvac-design-collapsed .hvac-design-pane > .mantine-Paper-root { display: flex; }
  .hvac-ep-split.hvac-data-collapsed .hvac-data-pane { display: block; }
  .hvac-ep-split.hvac-data-collapsed .hvac-design-pane { grid-column: 1; grid-row: auto; }
  .hvac-design-pane { position: static; height: 520px; min-height: 0; }
  .hvac-split-resize-handle { display: none; }
}

/* ---- viewport / stage ---- */
.hvac-canvas-viewport {
  flex: 1;
  min-height: 0;
  position: relative;
  overflow: hidden;
  cursor: grab;
  background: var(--mantine-color-body);
  user-select: none;
  -webkit-user-select: none;
}
.hvac-canvas-viewport.hvac-grid {
  background-image:
    linear-gradient(var(--mantine-color-default-border) 1px, transparent 1px),
    linear-gradient(90deg, var(--mantine-color-default-border) 1px, transparent 1px);
  background-size: 28px 28px;
}
.hvac-canvas-viewport.hvac-panning { cursor: grabbing; }
.hvac-canvas-stage {
  position: absolute;
  top: 0;
  left: 0;
  transform-origin: 0 0;
  will-change: transform;
}
.hvac-canvas-chain { position: relative; z-index: 1; }
.hvac-wires { position: absolute; top: 0; left: 0; overflow: visible; pointer-events: none; }

/* plan de fond (image S3, opacité réglable, cadre déplaçable/étirable) —
   background-size 100% 100% : l'image suit exactement son cadre, quitte à
   se déformer (étirement largeur/hauteur indépendant). */
.hvac-canvas-bg {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 0;
  background-size: 100% 100%;
  background-repeat: no-repeat;
  opacity: 0.55;
  pointer-events: none;
  display: none;
  border-radius: 6px;
  box-shadow: 0 0 0 1px var(--mantine-color-default-border) inset;
}

/* mode « Ajuster le plan » : image au premier plan + poignées d'étirement */
.hvac-canvas-bg.editing {
  pointer-events: auto;
  cursor: move;
  z-index: 2;
  outline: 2px dashed var(--mantine-color-orange-6);
}
.hvac-bg-handle {
  position: absolute;
  width: 12px;
  height: 12px;
  background: var(--mantine-color-orange-6);
  border: 2px solid var(--mantine-color-body);
  border-radius: 3px;
}
.hvac-bg-nw { left: -7px; top: -7px; cursor: nwse-resize; }
.hvac-bg-n { left: calc(50% - 6px); top: -7px; cursor: ns-resize; }
.hvac-bg-ne { right: -7px; top: -7px; cursor: nesw-resize; }
.hvac-bg-e { right: -7px; top: calc(50% - 6px); cursor: ew-resize; }
.hvac-bg-se { right: -7px; bottom: -7px; cursor: nwse-resize; }
.hvac-bg-s { left: calc(50% - 6px); bottom: -7px; cursor: ns-resize; }
.hvac-bg-sw { left: -7px; bottom: -7px; cursor: nesw-resize; }
.hvac-bg-w { left: -7px; top: calc(50% - 6px); cursor: ew-resize; }

/* boutons « + » d'insertion au milieu des câbles */
.hvac-gins {
  position: absolute;
  transform: translate(-50%, -50%);
  width: 19px;
  height: 19px;
  border-radius: 50%;
  background: var(--mantine-color-body);
  border: 1.5px solid var(--mantine-color-default-border);
  color: var(--mantine-color-dimmed);
  display: grid;
  place-items: center;
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  z-index: 5;
  opacity: 0.5;
  transition: opacity 0.12s, border-color 0.12s, color 0.12s;
}
.hvac-gins:hover {
  opacity: 1;
  border-color: var(--mantine-color-orange-4);
  color: var(--mantine-color-orange-6);
}

/* icône d'info en bas à gauche du canvas (tooltip = aide pan/zoom) —
   pointer-events actifs : nécessaires au survol de l'icône. */
.hvac-pan-hint {
  position: absolute;
  left: 12px;
  bottom: 10px;
  font-size: 12px;
  line-height: 1;
  color: var(--mantine-color-dimmed);
  cursor: help;
  opacity: 0.9;
  z-index: 3;
}
.hvac-canvas-empty {
  position: absolute;
  inset: 0;
  display: none;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  text-align: center;
  padding: 24px;
}

/* ---- nœuds du graphe ---- */
.hvac-gnode {
  position: absolute;
  box-sizing: border-box;
  min-height: 64px;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 11px;
  border: 1.5px solid var(--mantine-color-default-border);
  border-radius: var(--mantine-radius-md);
  background: var(--mantine-color-default);
  box-shadow: var(--mantine-shadow-xs);
  transition: border-color 0.14s, box-shadow 0.14s;
  z-index: 2;
}
.hvac-gnode { cursor: grab; }
.hvac-gnode:active { cursor: grabbing; }
.hvac-gnode:hover {
  border-color: var(--mantine-color-orange-4);
  z-index: 4;
}
.hvac-gnode.selected {
  border-color: var(--mantine-color-orange-6);
  box-shadow: 0 0 0 3px rgba(227, 108, 10, 0.25);
  z-index: 5;
}
.hvac-gnode.selected .vidx { background: var(--mantine-color-orange-6); }
.hvac-gnode .vidx {
  position: absolute;
  left: -9px;
  top: -9px;
  width: 19px;
  height: 19px;
  border-radius: 50%;
  background: var(--mantine-color-gray-7);
  color: #fff;
  font-size: 10.5px;
  font-weight: 700;
  display: grid;
  place-items: center;
}
.hvac-gnode .vico {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  background: var(--mantine-color-default-hover);
  color: var(--mantine-color-dimmed);
  display: grid;
  place-items: center;
  flex: none;
}
.hvac-gnode .vmeta { flex: 1; min-width: 0; }
/* Texte en retour à la ligne (jamais tronqué) : le contenu des blocs reste
   lisible en entier au zoom. Les hauteurs réelles sont remesurées par le JS
   après rendu pour ancrer câbles et « + » au centre des nœuds. */
.hvac-gnode .vmeta b {
  font-size: 12.5px;
  color: var(--mantine-color-text);
  display: block;
  line-height: 1.15;
  white-space: normal;
  overflow-wrap: break-word;
}
.hvac-gnode .vmeta span {
  font-size: 10.5px;
  color: var(--mantine-color-dimmed);
  display: block;
  white-space: normal;
  overflow-wrap: break-word;
}
.hvac-gsource { border-color: var(--mantine-color-gray-7); }
.hvac-gsource .vico { background: var(--mantine-color-gray-7); color: #fff; }
.hvac-glisten { border-color: var(--mantine-color-teal-6); }
.hvac-glisten .vico { background: var(--mantine-color-teal-6); color: #fff; }
.hvac-glisten .vmeta b { color: var(--mantine-color-teal-7); }

.hvac-glane-label {
  position: absolute;
  transform: translateY(-100%);
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  white-space: nowrap;
  z-index: 1;
}
