fix(ui): Ocean Slate theme — legibilidad, 4 viewports diferenciados

Problema 1 — texto oscuro ilegible
  - ribbonButton disabled: #555c6e → #7a8ba8 (contraste ≥3.5:1)
  - ribbonGroupTitle: #6b7385 → #9aa3bc (legible)
  - placeholderTitle/Desc/Msg: colores más claros y visibles

Problema 2 — 4 viewports indistinguibles (negro monótono)
  - Cada viewport tiene objectName propio (viewportTitleBar_perspective etc.)
  - 4 barras de título con colores únicos:
      perspective → azul profundo   #1e2550 / texto #6888d8
      profile     → teal marino     #143040 / texto #40a8b8
      bodyplan    → índigo          #28183c / texto #8868c8
      plan        → verde oscuro    #142814 / texto #48a858
  - QFrame viewport: borde 2px solid #2a3060 (claramente visible)
  - setHandleWidth(5) en Python (3→5 px) + QSS hover acento

Problema 3 — fondo negro de muertos
  - Main bg: #252a38 → #2c3042 (slate medio, claramente gris-azul)
  - Paneles:  #2e3342 → #343848
  - Viewport canvas: #1a1e2c → #1a1d30 (navy, no neutral)
  - Línea acento (#4da8ff) bajo ribbon y sobre hidrostáticos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 00:14:20 -04:00
parent d0d47ec5fb
commit 0c15b5aeeb
2 changed files with 244 additions and 376 deletions
+12 -11
View File
@@ -195,27 +195,28 @@ class ViewportFrame(QFrame):
layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(0)
# ── Barra de título ──────────────────────────────────────
# ── Barra de título (objectName único por vista) ──────────
title_bar = QWidget()
title_bar.setObjectName("viewportTitleBar")
title_bar.setFixedHeight(22)
# p.ej. "viewportTitleBar_perspective", "viewportTitleBar_profile"…
title_bar.setObjectName(f"viewportTitleBar_{self.view_type}")
title_bar.setFixedHeight(24)
tbl = QHBoxLayout(title_bar)
tbl.setContentsMargins(8, 0, 4, 0)
tbl.setContentsMargins(10, 0, 4, 0)
tbl.setSpacing(0)
lbl = QLabel(_VIEW_LABELS.get(self.view_type, self.view_type))
lbl.setObjectName("viewportTitle")
lbl = QLabel(_VIEW_LABELS.get(self.view_type, self.view_type).upper())
lbl.setObjectName(f"viewportTitle_{self.view_type}")
tbl.addWidget(lbl)
tbl.addStretch()
layout.addWidget(title_bar)
# ── Área de dibujo (placeholder Sprint 0) ────────────────
self._canvas = QWidget()
self._canvas.setObjectName("viewportCanvas")
self._canvas.setObjectName(f"viewportCanvas_{self.view_type}")
cl = QVBoxLayout(self._canvas)
cl.setAlignment(Qt.AlignmentFlag.AlignCenter)
ph = QLabel(_VIEW_LABELS.get(self.view_type, ""))
ph = QLabel(_VIEW_LABELS.get(self.view_type, "").upper())
ph.setObjectName("viewportPlaceholder")
ph.setAlignment(Qt.AlignmentFlag.AlignCenter)
cl.addWidget(ph)
@@ -255,11 +256,11 @@ class FourViewport(QWidget):
v_split = QSplitter(Qt.Orientation.Vertical)
v_split.setObjectName("viewportSplitter")
v_split.setHandleWidth(3)
v_split.setHandleWidth(5)
top_split = QSplitter(Qt.Orientation.Horizontal)
top_split.setObjectName("viewportSplitter")
top_split.setHandleWidth(3)
top_split.setHandleWidth(5)
self._vp_perspective = ViewportFrame("perspective")
self._vp_profile = ViewportFrame("profile")
top_split.addWidget(self._vp_perspective)
@@ -268,7 +269,7 @@ class FourViewport(QWidget):
bot_split = QSplitter(Qt.Orientation.Horizontal)
bot_split.setObjectName("viewportSplitter")
bot_split.setHandleWidth(3)
bot_split.setHandleWidth(5)
self._vp_bodyplan = ViewportFrame("bodyplan")
self._vp_plan = ViewportFrame("plan")
bot_split.addWidget(self._vp_bodyplan)