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:
@@ -195,27 +195,28 @@ class ViewportFrame(QFrame):
|
|||||||
layout.setContentsMargins(0, 0, 0, 0)
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
layout.setSpacing(0)
|
layout.setSpacing(0)
|
||||||
|
|
||||||
# ── Barra de título ──────────────────────────────────────
|
# ── Barra de título (objectName único por vista) ──────────
|
||||||
title_bar = QWidget()
|
title_bar = QWidget()
|
||||||
title_bar.setObjectName("viewportTitleBar")
|
# p.ej. "viewportTitleBar_perspective", "viewportTitleBar_profile"…
|
||||||
title_bar.setFixedHeight(22)
|
title_bar.setObjectName(f"viewportTitleBar_{self.view_type}")
|
||||||
|
title_bar.setFixedHeight(24)
|
||||||
tbl = QHBoxLayout(title_bar)
|
tbl = QHBoxLayout(title_bar)
|
||||||
tbl.setContentsMargins(8, 0, 4, 0)
|
tbl.setContentsMargins(10, 0, 4, 0)
|
||||||
tbl.setSpacing(0)
|
tbl.setSpacing(0)
|
||||||
|
|
||||||
lbl = QLabel(_VIEW_LABELS.get(self.view_type, self.view_type))
|
lbl = QLabel(_VIEW_LABELS.get(self.view_type, self.view_type).upper())
|
||||||
lbl.setObjectName("viewportTitle")
|
lbl.setObjectName(f"viewportTitle_{self.view_type}")
|
||||||
tbl.addWidget(lbl)
|
tbl.addWidget(lbl)
|
||||||
tbl.addStretch()
|
tbl.addStretch()
|
||||||
layout.addWidget(title_bar)
|
layout.addWidget(title_bar)
|
||||||
|
|
||||||
# ── Área de dibujo (placeholder Sprint 0) ────────────────
|
# ── Área de dibujo (placeholder Sprint 0) ────────────────
|
||||||
self._canvas = QWidget()
|
self._canvas = QWidget()
|
||||||
self._canvas.setObjectName("viewportCanvas")
|
self._canvas.setObjectName(f"viewportCanvas_{self.view_type}")
|
||||||
cl = QVBoxLayout(self._canvas)
|
cl = QVBoxLayout(self._canvas)
|
||||||
cl.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
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.setObjectName("viewportPlaceholder")
|
||||||
ph.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
ph.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||||
cl.addWidget(ph)
|
cl.addWidget(ph)
|
||||||
@@ -255,11 +256,11 @@ class FourViewport(QWidget):
|
|||||||
|
|
||||||
v_split = QSplitter(Qt.Orientation.Vertical)
|
v_split = QSplitter(Qt.Orientation.Vertical)
|
||||||
v_split.setObjectName("viewportSplitter")
|
v_split.setObjectName("viewportSplitter")
|
||||||
v_split.setHandleWidth(3)
|
v_split.setHandleWidth(5)
|
||||||
|
|
||||||
top_split = QSplitter(Qt.Orientation.Horizontal)
|
top_split = QSplitter(Qt.Orientation.Horizontal)
|
||||||
top_split.setObjectName("viewportSplitter")
|
top_split.setObjectName("viewportSplitter")
|
||||||
top_split.setHandleWidth(3)
|
top_split.setHandleWidth(5)
|
||||||
self._vp_perspective = ViewportFrame("perspective")
|
self._vp_perspective = ViewportFrame("perspective")
|
||||||
self._vp_profile = ViewportFrame("profile")
|
self._vp_profile = ViewportFrame("profile")
|
||||||
top_split.addWidget(self._vp_perspective)
|
top_split.addWidget(self._vp_perspective)
|
||||||
@@ -268,7 +269,7 @@ class FourViewport(QWidget):
|
|||||||
|
|
||||||
bot_split = QSplitter(Qt.Orientation.Horizontal)
|
bot_split = QSplitter(Qt.Orientation.Horizontal)
|
||||||
bot_split.setObjectName("viewportSplitter")
|
bot_split.setObjectName("viewportSplitter")
|
||||||
bot_split.setHandleWidth(3)
|
bot_split.setHandleWidth(5)
|
||||||
self._vp_bodyplan = ViewportFrame("bodyplan")
|
self._vp_bodyplan = ViewportFrame("bodyplan")
|
||||||
self._vp_plan = ViewportFrame("plan")
|
self._vp_plan = ViewportFrame("plan")
|
||||||
bot_split.addWidget(self._vp_bodyplan)
|
bot_split.addWidget(self._vp_bodyplan)
|
||||||
|
|||||||
+232
-365
@@ -1,29 +1,31 @@
|
|||||||
/* ============================================================
|
/* ============================================================
|
||||||
AR-ShipDesign — Tema Oscuro Profesional v2
|
AR-ShipDesign — Tema "Ocean Slate" v3
|
||||||
Paleta "Deep Navy Slate" — sin negro puro, azul oceánico
|
Paleta: slate azul-gris medio, navy para viewports
|
||||||
─────────────────────────────────────────────────────────
|
─────────────────────────────────────────────────────────
|
||||||
#252a38 fondo principal (slate azul-gris)
|
#2c3042 fondo principal (slate medio, NO negro)
|
||||||
#2e3342 paneles / toolbar
|
#343848 paneles / ribbon / dock
|
||||||
#373c4e elementos elevados
|
#3e4255 elementos elevados
|
||||||
#424757 hover / inputs
|
#484e62 hover / bordes
|
||||||
#1a1e2c viewport canvas (azul marino profundo)
|
#575e74 bordes principales
|
||||||
#22263a viewport title bar
|
#9aa3bc texto muted
|
||||||
#454a5e bordes principales
|
#e2e7f5 texto principal
|
||||||
#363b4e bordes sutiles
|
─── Viewport (zona de modelado) ───────────────────────
|
||||||
#8a93aa texto muted
|
#1a1d30 canvas navy (fondo de la zona de dibujo)
|
||||||
#dce1f0 texto principal
|
#20233e título perspective (azul profundo)
|
||||||
#0d99ff acento (azul eléctrico)
|
#1e2c32 título profile (verde-azul marino)
|
||||||
|
#2a1e30 título bodyplan (índigo)
|
||||||
|
#1e2a1e título plan (verde oscuro)
|
||||||
|
─── Acento ────────────────────────────────────────────
|
||||||
|
#4da8ff azul eléctrico
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
/* ─── BASE ─────────────────────────────────────────────────── */
|
/* ─── BASE ─────────────────────────────────────────────────── */
|
||||||
|
|
||||||
* {
|
* { outline: none; }
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
QMainWindow, QDialog, QWidget {
|
QMainWindow, QDialog, QWidget {
|
||||||
background-color: #252a38;
|
background-color: #2c3042;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
font-family: "Segoe UI", Arial, sans-serif;
|
font-family: "Segoe UI", Arial, sans-serif;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
@@ -31,350 +33,288 @@ QMainWindow, QDialog, QWidget {
|
|||||||
/* ─── MENÚ ──────────────────────────────────────────────────── */
|
/* ─── MENÚ ──────────────────────────────────────────────────── */
|
||||||
|
|
||||||
QMenuBar {
|
QMenuBar {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 1px solid #575e74;
|
||||||
padding: 1px 0;
|
padding: 1px 0;
|
||||||
}
|
}
|
||||||
QMenuBar::item {
|
QMenuBar::item { padding: 4px 10px; background: transparent; }
|
||||||
padding: 4px 10px;
|
QMenuBar::item:selected { background-color: #3e4255; color: #fff; }
|
||||||
background: transparent;
|
QMenuBar::item:pressed { background-color: #4da8ff; color: #fff; }
|
||||||
}
|
|
||||||
QMenuBar::item:selected {
|
|
||||||
background-color: #373c4e;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
QMenuBar::item:pressed {
|
|
||||||
background-color: #0d99ff;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
QMenu {
|
QMenu {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #575e74;
|
||||||
padding: 3px 0;
|
padding: 3px 0;
|
||||||
}
|
}
|
||||||
QMenu::item {
|
QMenu::item { padding: 5px 28px 5px 20px; }
|
||||||
padding: 5px 28px 5px 20px;
|
QMenu::item:selected { background-color: #4da8ff; color: #fff; }
|
||||||
}
|
QMenu::item:disabled { color: #6b7792; }
|
||||||
QMenu::item:selected {
|
QMenu::separator { height: 1px; background: #484e62; margin: 3px 8px; }
|
||||||
background-color: #0d99ff;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
QMenu::item:disabled {
|
|
||||||
color: #555c6e;
|
|
||||||
}
|
|
||||||
QMenu::separator {
|
|
||||||
height: 1px;
|
|
||||||
background: #454a5e;
|
|
||||||
margin: 3px 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ─── RIBBON TOOLBAR (contenedor QToolBar) ──────────────────── */
|
/* ─── RIBBON TOOLBAR (QToolBar contenedor) ──────────────────── */
|
||||||
|
|
||||||
QToolBar#ribbonToolbar {
|
QToolBar#ribbonToolbar {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 2px solid #4da8ff; /* línea acento bajo la ribbon */
|
||||||
padding: 0;
|
padding: 0; margin: 0; spacing: 0;
|
||||||
spacing: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ─── RIBBON BAR ────────────────────────────────────────────── */
|
/* ─── RIBBON BAR ────────────────────────────────────────────── */
|
||||||
|
|
||||||
QWidget#ribbonBar {
|
QWidget#ribbonBar { background-color: #343848; }
|
||||||
background-color: #2e3342;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fila de pestañas */
|
/* Fila de pestañas */
|
||||||
QWidget#ribbonTabRow {
|
QWidget#ribbonTabRow {
|
||||||
background-color: #252a38;
|
background-color: #2c3042;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 1px solid #484e62;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Botones de pestañas */
|
/* Pestañas */
|
||||||
QToolButton#ribbonTabBtn {
|
QToolButton#ribbonTabBtn {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
border-bottom: 2px solid transparent;
|
border-bottom: 2px solid transparent;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
padding: 0 16px;
|
padding: 0 16px;
|
||||||
color: #8a93aa;
|
color: #9aa3bc;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
min-width: 80px;
|
min-width: 82px;
|
||||||
height: 26px;
|
height: 26px;
|
||||||
}
|
}
|
||||||
QToolButton#ribbonTabBtn:hover {
|
QToolButton#ribbonTabBtn:hover { background-color: #3e4255; color: #d0d8ec; }
|
||||||
background-color: #373c4e;
|
|
||||||
color: #c0c8d8;
|
|
||||||
}
|
|
||||||
QToolButton#ribbonTabBtn:checked {
|
QToolButton#ribbonTabBtn:checked {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
color: #0d99ff;
|
color: #4da8ff;
|
||||||
border-bottom: 2px solid #0d99ff;
|
border-bottom: 2px solid #4da8ff;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stack de contenido */
|
/* Stack de contenido */
|
||||||
QStackedWidget#ribbonContent {
|
QStackedWidget#ribbonContent {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 1px solid #484e62;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Grupo de botones */
|
/* Grupo */
|
||||||
QFrame#ribbonGroup {
|
QFrame#ribbonGroup {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
border: none;
|
border: none;
|
||||||
margin: 2px 0;
|
margin: 2px 0;
|
||||||
}
|
}
|
||||||
|
QWidget#ribbonBtnArea { background-color: transparent; }
|
||||||
QWidget#ribbonBtnArea {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLabel#ribbonGroupTitle {
|
QLabel#ribbonGroupTitle {
|
||||||
color: #7a8398;
|
color: #9aa3bc;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
padding: 2px 0 3px 0;
|
padding: 2px 0 3px 0;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
QFrame#ribbonSep {
|
QFrame#ribbonSep {
|
||||||
color: #373c4e;
|
color: #3e4255;
|
||||||
margin: 6px 2px;
|
margin: 6px 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Botones — sin max-width para que el texto no se corte */
|
/* ── Botones de la ribbon ──
|
||||||
|
enabled: texto blanco claro #e2e7f5
|
||||||
|
disabled: texto gris legible #7a8ba8 (contraste ≥ 3.5:1 sobre #343848)
|
||||||
|
SIN max-width para que el texto nunca se corte */
|
||||||
QToolButton#ribbonButton {
|
QToolButton#ribbonButton {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 4px 8px 2px 8px;
|
padding: 4px 8px 2px 8px;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
min-width: 48px;
|
min-width: 48px;
|
||||||
/* SIN max-width — texto completo siempre visible */
|
|
||||||
}
|
|
||||||
QToolButton#ribbonButton:hover {
|
|
||||||
background-color: #373c4e;
|
|
||||||
border-color: #454a5e;
|
|
||||||
}
|
|
||||||
QToolButton#ribbonButton:pressed {
|
|
||||||
background-color: #0d99ff;
|
|
||||||
color: #ffffff;
|
|
||||||
border-color: #0d99ff;
|
|
||||||
}
|
|
||||||
QToolButton#ribbonButton:checked {
|
|
||||||
background-color: #1a4070;
|
|
||||||
border-color: #0d99ff;
|
|
||||||
}
|
|
||||||
QToolButton#ribbonButton:disabled {
|
|
||||||
color: #555c6e;
|
|
||||||
}
|
}
|
||||||
|
QToolButton#ribbonButton:hover { background-color: #3e4255; border-color: #575e74; }
|
||||||
|
QToolButton#ribbonButton:pressed { background-color: #4da8ff; color: #fff; border-color: #4da8ff; }
|
||||||
|
QToolButton#ribbonButton:checked { background-color: #1a3d6e; border-color: #4da8ff; }
|
||||||
|
QToolButton#ribbonButton:disabled { color: #7a8ba8; }
|
||||||
|
|
||||||
/* ─── 4 VIEWPORTS ───────────────────────────────────────────── */
|
/* ─── 4 VIEWPORTS ───────────────────────────────────────────── */
|
||||||
|
|
||||||
QWidget#fourViewport {
|
QWidget#fourViewport { background-color: #12152a; }
|
||||||
background-color: #1a1e2c;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* Frame externo de cada viewport — borde visible */
|
||||||
QFrame#viewportFrame {
|
QFrame#viewportFrame {
|
||||||
background-color: #1a1e2c;
|
background-color: #12152a;
|
||||||
border: 1px solid #2a2e40;
|
border: 2px solid #2a3060;
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget#viewportTitleBar {
|
/* ── Barras de título — cada vista tiene su propio color ────── */
|
||||||
background-color: #22263a;
|
|
||||||
border-bottom: 1px solid #2e3448;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLabel#viewportTitle {
|
/* Perspectiva 3D → azul profundo */
|
||||||
color: #6070a0;
|
QWidget#viewportTitleBar_perspective {
|
||||||
font-size: 11px;
|
background-color: #1e2550;
|
||||||
|
border-bottom: 1px solid #2d3a80;
|
||||||
|
}
|
||||||
|
QLabel#viewportTitle_perspective {
|
||||||
|
color: #6888d8;
|
||||||
|
font-size: 10px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget#viewportCanvas {
|
/* Vista Lateral / Perfil → verde-teal marino */
|
||||||
background-color: #1a1e2c;
|
QWidget#viewportTitleBar_profile {
|
||||||
|
background-color: #143040;
|
||||||
|
border-bottom: 1px solid #1e4a60;
|
||||||
|
}
|
||||||
|
QLabel#viewportTitle_profile {
|
||||||
|
color: #40a8b8;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Texto watermark en el viewport — sutil pero legible */
|
/* Body Plan / Secciones → índigo / violeta */
|
||||||
|
QWidget#viewportTitleBar_bodyplan {
|
||||||
|
background-color: #28183c;
|
||||||
|
border-bottom: 1px solid #3c2460;
|
||||||
|
}
|
||||||
|
QLabel#viewportTitle_bodyplan {
|
||||||
|
color: #8868c8;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Vista de Planta → verde oscuro marino */
|
||||||
|
QWidget#viewportTitleBar_plan {
|
||||||
|
background-color: #142814;
|
||||||
|
border-bottom: 1px solid #1e4020;
|
||||||
|
}
|
||||||
|
QLabel#viewportTitle_plan {
|
||||||
|
color: #48a858;
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Canvas de cada viewport → navy oscuro uniforme */
|
||||||
|
QWidget#viewportCanvas_perspective,
|
||||||
|
QWidget#viewportCanvas_profile,
|
||||||
|
QWidget#viewportCanvas_bodyplan,
|
||||||
|
QWidget#viewportCanvas_plan {
|
||||||
|
background-color: #1a1d30;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Texto watermark en el viewport */
|
||||||
QLabel#viewportPlaceholder {
|
QLabel#viewportPlaceholder {
|
||||||
color: #2a3060;
|
color: #28305a;
|
||||||
font-size: 16px;
|
font-size: 14px;
|
||||||
font-family: "Consolas", monospace;
|
font-family: "Consolas", monospace;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Separadores arrastrables del viewport — azul eléctrico */
|
/* ── Separadores arrastrables — visibles y amplios ─────────── */
|
||||||
QSplitter#viewportSplitter {
|
QSplitter#viewportSplitter {
|
||||||
background-color: #1a1e2c;
|
background-color: #12152a;
|
||||||
}
|
}
|
||||||
QSplitter#viewportSplitter::handle {
|
QSplitter#viewportSplitter::handle {
|
||||||
background-color: #0d99ff;
|
background-color: #2a3060;
|
||||||
}
|
|
||||||
QSplitter#viewportSplitter::handle:horizontal {
|
|
||||||
width: 3px;
|
|
||||||
}
|
|
||||||
QSplitter#viewportSplitter::handle:vertical {
|
|
||||||
height: 3px;
|
|
||||||
}
|
}
|
||||||
QSplitter#viewportSplitter::handle:hover {
|
QSplitter#viewportSplitter::handle:hover {
|
||||||
background-color: #4dbfff;
|
background-color: #4da8ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ─── DOCK WIDGETS ──────────────────────────────────────────── */
|
/* ─── DOCK WIDGETS ──────────────────────────────────────────── */
|
||||||
|
|
||||||
QDockWidget {
|
QDockWidget { color: #e2e7f5; font-weight: bold; font-size: 12px; }
|
||||||
color: #dce1f0;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
QDockWidget::title {
|
QDockWidget::title {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 1px solid #575e74;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
QDockWidget::close-button,
|
QDockWidget::close-button, QDockWidget::float-button {
|
||||||
QDockWidget::float-button {
|
background: transparent; border: none; padding: 2px;
|
||||||
background: transparent;
|
|
||||||
border: none;
|
|
||||||
padding: 2px;
|
|
||||||
}
|
}
|
||||||
QDockWidget::close-button:hover,
|
QDockWidget::close-button:hover, QDockWidget::float-button:hover {
|
||||||
QDockWidget::float-button:hover {
|
background-color: #484e62; border-radius: 2px;
|
||||||
background-color: #454a5e;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ─── PANEL DE CAPAS ────────────────────────────────────────── */
|
/* ─── PANEL DE CAPAS ────────────────────────────────────────── */
|
||||||
|
|
||||||
QWidget#layersPanel {
|
QWidget#layersPanel { background-color: #2c3042; }
|
||||||
background-color: #252a38;
|
QWidget#layersPanelHeader { background-color: #343848; border-bottom: 1px solid #575e74; }
|
||||||
}
|
|
||||||
|
|
||||||
QWidget#layersPanelHeader {
|
QFrame#panelSep { color: #484e62; max-height: 1px; }
|
||||||
background-color: #2e3342;
|
|
||||||
border-bottom: 1px solid #454a5e;
|
|
||||||
}
|
|
||||||
|
|
||||||
QFrame#panelSep {
|
QScrollArea#layersScrollArea { background-color: #2c3042; border: none; }
|
||||||
color: #454a5e;
|
QWidget#layersContainer { background-color: #2c3042; }
|
||||||
max-height: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
QScrollArea#layersScrollArea {
|
QWidget#layerRow { background-color: transparent; min-height: 26px; }
|
||||||
background-color: #252a38;
|
QWidget#layerRow:hover { background-color: #343848; }
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget#layersContainer {
|
QLabel#layerName { color: #c8d0e8; font-size: 12px; }
|
||||||
background-color: #252a38;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fila de capa */
|
/* Indicador visibilidad: azul = visible, gris = oculta */
|
||||||
QWidget#layerRow {
|
|
||||||
background-color: transparent;
|
|
||||||
min-height: 26px;
|
|
||||||
}
|
|
||||||
QWidget#layerRow:hover {
|
|
||||||
background-color: #2e3342;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLabel#layerName {
|
|
||||||
color: #c0c8d8;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Botón de visibilidad: azul = capa visible, gris oscuro = oculta
|
|
||||||
(sin texto — el color ES el indicador)
|
|
||||||
*/
|
|
||||||
QToolButton#layerVisBtn {
|
QToolButton#layerVisBtn {
|
||||||
background-color: #0d99ff;
|
background-color: #4da8ff;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
/* 16×16 fijo desde Python */
|
|
||||||
}
|
}
|
||||||
QToolButton#layerVisBtn:!checked {
|
QToolButton#layerVisBtn:!checked {
|
||||||
background-color: #363b4e;
|
background-color: #3e4255;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #575e74;
|
||||||
}
|
|
||||||
QToolButton#layerVisBtn:hover {
|
|
||||||
border: 1px solid #6bb8ff;
|
|
||||||
}
|
}
|
||||||
|
QToolButton#layerVisBtn:hover { border: 1px solid #80c8ff; }
|
||||||
|
|
||||||
/*
|
/* Indicador bloqueo: ámbar = bloqueada, gris = libre */
|
||||||
Botón de bloqueo: ámbar = bloqueada, gris = libre
|
|
||||||
*/
|
|
||||||
QToolButton#layerLockBtn {
|
QToolButton#layerLockBtn {
|
||||||
background-color: #363b4e;
|
background-color: #3e4255;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #575e74;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
QToolButton#layerLockBtn:checked {
|
QToolButton#layerLockBtn:checked {
|
||||||
background-color: #fbbf24;
|
background-color: #e8a020;
|
||||||
border-color: #fbbf24;
|
border-color: #e8a020;
|
||||||
}
|
|
||||||
QToolButton#layerLockBtn:hover {
|
|
||||||
border: 1px solid #ffd066;
|
|
||||||
}
|
}
|
||||||
|
QToolButton#layerLockBtn:hover { border: 1px solid #ffc840; }
|
||||||
|
|
||||||
/* ─── PROPIEDADES ───────────────────────────────────────────── */
|
/* ─── PANEL DE PROPIEDADES ──────────────────────────────────── */
|
||||||
|
|
||||||
QWidget#propContent {
|
QWidget#propContent { background-color: #2c3042; }
|
||||||
background-color: #252a38;
|
|
||||||
}
|
|
||||||
QLabel#propSection {
|
QLabel#propSection {
|
||||||
color: #8a93aa;
|
color: #9aa3bc;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
padding-bottom: 6px;
|
padding-bottom: 6px;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 1px solid #484e62;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
QLabel#propKey {
|
QLabel#propKey { color: #9aa3bc; font-size: 12px; }
|
||||||
color: #8a93aa;
|
QLabel#propVal { color: #e2e7f5; font-size: 13px; }
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
QLabel#propVal {
|
|
||||||
color: #dce1f0;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ─── PANEL HIDROSTÁTICOS ───────────────────────────────────── */
|
/* ─── PANEL HIDROSTÁTICOS ───────────────────────────────────── */
|
||||||
|
|
||||||
QFrame#hydrostaticsPanel {
|
QFrame#hydrostaticsPanel {
|
||||||
background-color: #1e2232;
|
background-color: #20243a;
|
||||||
border-top: 1px solid #454a5e;
|
border-top: 2px solid #4da8ff;
|
||||||
}
|
}
|
||||||
QLabel#hydroTitle {
|
QLabel#hydroTitle {
|
||||||
color: #555c6e;
|
color: #6070a0;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: 0 10px 0 4px;
|
padding: 0 10px 0 4px;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
}
|
}
|
||||||
QFrame#hydroSep {
|
QFrame#hydroSep { color: #3e4255; }
|
||||||
color: #363b4e;
|
QLabel#hydroKey { color: #9aa3bc; font-size: 11px; padding: 0 2px; }
|
||||||
}
|
|
||||||
QLabel#hydroKey {
|
|
||||||
color: #8a93aa;
|
|
||||||
font-size: 11px;
|
|
||||||
padding: 0 2px;
|
|
||||||
}
|
|
||||||
QLabel#hydroVal {
|
QLabel#hydroVal {
|
||||||
color: #0d99ff;
|
color: #4da8ff;
|
||||||
font-family: "Consolas", monospace;
|
font-family: "Consolas", monospace;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
min-width: 52px;
|
min-width: 52px;
|
||||||
}
|
}
|
||||||
QLabel#hydroImoNone {
|
QLabel#hydroImoNone {
|
||||||
color: #555c6e;
|
color: #6070a0;
|
||||||
font-family: "Consolas", monospace;
|
font-family: "Consolas", monospace;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
@@ -385,7 +325,7 @@ QLabel#hydroImoOk {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
QLabel#hydroImoFail {
|
QLabel#hydroImoFail {
|
||||||
color: #ff3b30;
|
color: #ff4530;
|
||||||
font-family: "Consolas", monospace;
|
font-family: "Consolas", monospace;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -393,219 +333,146 @@ QLabel#hydroImoFail {
|
|||||||
|
|
||||||
/* ─── MÓDULOS PLACEHOLDER ───────────────────────────────────── */
|
/* ─── MÓDULOS PLACEHOLDER ───────────────────────────────────── */
|
||||||
|
|
||||||
QWidget#modulePlaceholder {
|
QWidget#modulePlaceholder { background-color: #2c3042; }
|
||||||
background-color: #252a38;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLabel#placeholderTitle {
|
QLabel#placeholderTitle {
|
||||||
color: #5a6585;
|
color: #4a5878;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
QLabel#placeholderDesc { color: #404e68; font-size: 13px; }
|
||||||
QLabel#placeholderDesc {
|
QLabel#placeholderMsg { color: #363e54; font-size: 12px; }
|
||||||
color: #4e5870;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
QLabel#placeholderMsg {
|
|
||||||
color: #414c64;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ─── BARRA DE ESTADO ───────────────────────────────────────── */
|
/* ─── BARRA DE ESTADO ───────────────────────────────────────── */
|
||||||
|
|
||||||
QStatusBar {
|
QStatusBar {
|
||||||
background-color: #0a7de0;
|
background-color: #0d7fd8;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
QStatusBar::item { border: none; }
|
QStatusBar::item { border: none; }
|
||||||
|
QLabel#statusVersion { color: rgba(255,255,255,0.88); font-size: 11px; font-weight: bold; }
|
||||||
QLabel#statusVersion {
|
QLabel#statusLabel { color: rgba(255,255,255,0.70); font-size: 11px; }
|
||||||
color: rgba(255,255,255,0.85);
|
QLabel#statusValue { color: #ffffff; font-size: 11px; font-weight: bold; }
|
||||||
font-size: 11px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
QLabel#statusLabel {
|
|
||||||
color: rgba(255,255,255,0.70);
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
QLabel#statusValue {
|
|
||||||
color: #ffffff;
|
|
||||||
font-size: 11px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ─── SCROLLBARS ────────────────────────────────────────────── */
|
/* ─── SCROLLBARS ────────────────────────────────────────────── */
|
||||||
|
|
||||||
QScrollBar:vertical {
|
QScrollBar:vertical { background: #2c3042; width: 10px; border: none; }
|
||||||
background: #252a38;
|
QScrollBar:horizontal { background: #2c3042; height: 10px; border: none; }
|
||||||
width: 10px;
|
QScrollBar::handle:vertical { background: #484e62; border-radius: 5px; min-height: 24px; }
|
||||||
border: none;
|
QScrollBar::handle:horizontal { background: #484e62; border-radius: 5px; min-width: 24px; }
|
||||||
}
|
QScrollBar::handle:vertical:hover, QScrollBar::handle:horizontal:hover { background: #7a8ba8; }
|
||||||
QScrollBar::handle:vertical {
|
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; }
|
||||||
background: #454a5e;
|
|
||||||
border-radius: 5px;
|
|
||||||
min-height: 24px;
|
|
||||||
}
|
|
||||||
QScrollBar::handle:vertical:hover { background: #6b7385; }
|
|
||||||
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical { height: 0; }
|
|
||||||
|
|
||||||
QScrollBar:horizontal {
|
|
||||||
background: #252a38;
|
|
||||||
height: 10px;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
QScrollBar::handle:horizontal {
|
|
||||||
background: #454a5e;
|
|
||||||
border-radius: 5px;
|
|
||||||
min-width: 24px;
|
|
||||||
}
|
|
||||||
QScrollBar::handle:horizontal:hover { background: #6b7385; }
|
|
||||||
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; }
|
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { width: 0; }
|
||||||
|
|
||||||
/* ─── BOTONES ───────────────────────────────────────────────── */
|
/* ─── BOTONES ───────────────────────────────────────────────── */
|
||||||
|
|
||||||
QPushButton {
|
QPushButton {
|
||||||
background-color: #373c4e;
|
background-color: #3e4255;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #575e74;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 5px 14px;
|
padding: 5px 14px;
|
||||||
min-width: 72px;
|
min-width: 72px;
|
||||||
}
|
}
|
||||||
QPushButton:hover {
|
QPushButton:hover { background-color: #484e62; border-color: #7a8ba8; }
|
||||||
background-color: #424757;
|
QPushButton:pressed { background-color: #4da8ff; color: #fff; border-color: #4da8ff; }
|
||||||
border-color: #6b7385;
|
QPushButton:default { border-color: #4da8ff; }
|
||||||
}
|
QPushButton:disabled { color: #6b7792; border-color: #3e4255; }
|
||||||
QPushButton:pressed {
|
|
||||||
background-color: #0d99ff;
|
|
||||||
color: #ffffff;
|
|
||||||
border-color: #0d99ff;
|
|
||||||
}
|
|
||||||
QPushButton:default { border-color: #0d99ff; }
|
|
||||||
QPushButton:disabled { color: #555c6e; border-color: #363b4e; }
|
|
||||||
|
|
||||||
/* ─── CAMPOS DE ENTRADA ─────────────────────────────────────── */
|
/* ─── CAMPOS DE ENTRADA ─────────────────────────────────────── */
|
||||||
|
|
||||||
QLineEdit, QSpinBox, QDoubleSpinBox, QComboBox {
|
QLineEdit, QSpinBox, QDoubleSpinBox, QComboBox {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #575e74;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
selection-background-color: #0d99ff;
|
selection-background-color: #4da8ff;
|
||||||
}
|
}
|
||||||
QLineEdit:focus, QSpinBox:focus, QDoubleSpinBox:focus, QComboBox:focus {
|
QLineEdit:focus, QSpinBox:focus, QDoubleSpinBox:focus, QComboBox:focus {
|
||||||
border-color: #0d99ff;
|
border-color: #4da8ff;
|
||||||
}
|
}
|
||||||
QLineEdit:disabled, QSpinBox:disabled, QDoubleSpinBox:disabled {
|
QLineEdit:disabled, QSpinBox:disabled, QDoubleSpinBox:disabled {
|
||||||
color: #555c6e;
|
color: #6b7792; background-color: #2c3042;
|
||||||
background-color: #252a38;
|
|
||||||
}
|
}
|
||||||
QComboBox::drop-down { border: none; width: 20px; }
|
QComboBox::drop-down { border: none; width: 20px; }
|
||||||
QComboBox QAbstractItemView {
|
QComboBox QAbstractItemView {
|
||||||
background-color: #2e3342;
|
background-color: #343848; color: #e2e7f5;
|
||||||
color: #dce1f0;
|
border: 1px solid #575e74;
|
||||||
border: 1px solid #454a5e;
|
selection-background-color: #4da8ff;
|
||||||
selection-background-color: #0d99ff;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ─── TABLAS Y LISTAS ───────────────────────────────────────── */
|
/* ─── TABLAS Y LISTAS ───────────────────────────────────────── */
|
||||||
|
|
||||||
QHeaderView::section {
|
QHeaderView::section {
|
||||||
background-color: #2e3342;
|
background-color: #343848; color: #9aa3bc;
|
||||||
color: #8a93aa;
|
|
||||||
border: none;
|
border: none;
|
||||||
border-right: 1px solid #454a5e;
|
border-right: 1px solid #484e62;
|
||||||
border-bottom: 1px solid #454a5e;
|
border-bottom: 1px solid #484e62;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px; font-size: 12px;
|
||||||
font-size: 12px;
|
|
||||||
}
|
}
|
||||||
QTableView, QListView {
|
QTableView, QListView {
|
||||||
background-color: #252a38;
|
background-color: #2c3042;
|
||||||
alternate-background-color: #282d3c;
|
alternate-background-color: #2f3448;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #484e62;
|
||||||
gridline-color: #363b4e;
|
gridline-color: #3e4255;
|
||||||
selection-background-color: #0d99ff;
|
selection-background-color: #4da8ff;
|
||||||
selection-color: #ffffff;
|
selection-color: #fff;
|
||||||
}
|
|
||||||
QTableView::item:hover, QListView::item:hover {
|
|
||||||
background-color: #373c4e;
|
|
||||||
}
|
}
|
||||||
|
QTableView::item:hover, QListView::item:hover { background-color: #3e4255; }
|
||||||
|
|
||||||
/* ─── ÁRBOL ─────────────────────────────────────────────────── */
|
/* ─── ÁRBOL ─────────────────────────────────────────────────── */
|
||||||
|
|
||||||
QTreeWidget {
|
QTreeWidget {
|
||||||
background-color: #252a38;
|
background-color: #2c3042;
|
||||||
alternate-background-color: #282d3c;
|
alternate-background-color: #2f3448;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: none;
|
border: none;
|
||||||
selection-background-color: #0d99ff;
|
selection-background-color: #4da8ff;
|
||||||
selection-color: #ffffff;
|
selection-color: #fff;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
QTreeWidget::item {
|
QTreeWidget::item { padding: 3px 4px; border: none; }
|
||||||
padding: 3px 4px;
|
QTreeWidget::item:hover { background-color: #3e4255; }
|
||||||
border: none;
|
QTreeWidget::item:selected { background-color: #4da8ff; color: #fff; }
|
||||||
}
|
QTreeWidget::branch { background-color: #2c3042; }
|
||||||
QTreeWidget::item:hover {
|
|
||||||
background-color: #373c4e;
|
|
||||||
}
|
|
||||||
QTreeWidget::item:selected {
|
|
||||||
background-color: #0d99ff;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
QTreeWidget::branch {
|
|
||||||
background-color: #252a38;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ─── PESTAÑAS ──────────────────────────────────────────────── */
|
/* ─── PESTAÑAS ──────────────────────────────────────────────── */
|
||||||
|
|
||||||
QTabWidget::pane {
|
QTabWidget::pane {
|
||||||
border: none;
|
border: none;
|
||||||
border-top: 1px solid #454a5e;
|
border-top: 1px solid #484e62;
|
||||||
background-color: #252a38;
|
background-color: #2c3042;
|
||||||
}
|
|
||||||
QTabBar {
|
|
||||||
background-color: #2e3342;
|
|
||||||
}
|
}
|
||||||
|
QTabBar { background-color: #343848; }
|
||||||
QTabBar::tab {
|
QTabBar::tab {
|
||||||
background-color: #2e3342;
|
background-color: #343848; color: #9aa3bc;
|
||||||
color: #8a93aa;
|
border: none; border-right: 1px solid #484e62;
|
||||||
border: none;
|
padding: 6px 14px; min-width: 70px; font-size: 12px;
|
||||||
border-right: 1px solid #454a5e;
|
|
||||||
padding: 6px 14px;
|
|
||||||
min-width: 70px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
}
|
||||||
QTabBar::tab:selected {
|
QTabBar::tab:selected {
|
||||||
background-color: #252a38;
|
background-color: #2c3042; color: #e2e7f5;
|
||||||
color: #dce1f0;
|
border-top: 2px solid #4da8ff;
|
||||||
border-top: 2px solid #0d99ff;
|
|
||||||
}
|
|
||||||
QTabBar::tab:hover:!selected {
|
|
||||||
background-color: #373c4e;
|
|
||||||
color: #dce1f0;
|
|
||||||
}
|
}
|
||||||
|
QTabBar::tab:hover:!selected { background-color: #3e4255; color: #e2e7f5; }
|
||||||
|
|
||||||
/* ─── SPLITTER GENERAL ──────────────────────────────────────── */
|
/* ─── SPLITTER GENERAL (fuera de viewports) ─────────────────── */
|
||||||
|
|
||||||
QSplitter::handle { background-color: #454a5e; }
|
QSplitter::handle { background-color: #484e62; }
|
||||||
QSplitter::handle:horizontal { width: 1px; }
|
QSplitter::handle:horizontal { width: 1px; }
|
||||||
QSplitter::handle:vertical { height: 1px; }
|
QSplitter::handle:vertical { height: 1px; }
|
||||||
|
|
||||||
/* ─── MENSAJES / TOOLTIP ────────────────────────────────────── */
|
/* ─── MENSAJES / TOOLTIP ────────────────────────────────────── */
|
||||||
|
|
||||||
QMessageBox { background-color: #2e3342; }
|
QMessageBox { background-color: #343848; }
|
||||||
QMessageBox QLabel { color: #dce1f0; }
|
QMessageBox QLabel { color: #e2e7f5; }
|
||||||
|
|
||||||
QToolTip {
|
QToolTip {
|
||||||
background-color: #2e3342;
|
background-color: #343848;
|
||||||
color: #dce1f0;
|
color: #e2e7f5;
|
||||||
border: 1px solid #454a5e;
|
border: 1px solid #575e74;
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user