Files
proxmox-selfservice/qa-tool/htdocs/style.css
Sven Steinert fce31ebcd7 Viel neues
2026-04-30 12:06:00 +02:00

377 lines
12 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
style.css — aufgeräumt & ausführlich kommentiert
Projekt: QA System (Test-Template-Lader, Runner & Exporter)
Firma: o-byte.com telekommunikation
Stand: 2025-09-01T17:35:27
Hinweis:
- Funktionen sind mit JSDoc kommentiert (Parameter/Return, Nebenwirkungen).
- Größere Codeabschnitte haben Abschnittsbanner.
- Keine funktionalen Änderungen, nur Kommentare & leichte Struktur.
*/
/* ===== Dark Theme (wie bei dir) ===== */
/* ===== Design-Tokens & Variablen ===== */
:root{
--bg:#0b0c0f;
--surface:#0f1117;
--surface2:#12141a;
--text:#e7e7ea;
--muted:#a7a7b0;
--stroke:#232633;
--stroke2:#2a2d36;
--accent:#00A7E6;
--ok:#22c55e; /* pass */
--warn:#f59e0b; /* blocked */
--bad:#ef4444; /* fail */
--dim:#6b7280; /* skip */
}
*{ box-sizing:border-box }
html,body{ margin:0; padding:0; background:var(--bg); color:var(--text); font-family:Inter, system-ui, Segoe UI, Roboto, Arial, sans-serif }
a{ color:#8ec7ff }
/* Header */
/* ===== Kopfbereich ===== */
header { display:flex; align-items:center; gap:12px; padding:12px 10px 8px 10px }
.brand{ display:flex; align-items:center; gap:10px; min-width:0; }
.brand img{ height:28px; width:auto; max-width:220px; object-fit:contain; }
h1{ margin:0; font-size:22px; white-space:nowrap; }
.tag{
display:inline-block; font-size:12px; line-height:1;
padding:6px 8px; border:1px solid var(--stroke2); border-radius:999px;
color:var(--muted); background:#12141a;
}
/* Panels / Layout */
.wrapper{ padding: 10px }
.panel{
background:var(--surface);
border:1px solid var(--stroke);
border-radius:12px;
padding:12px;
margin-bottom:10px;
}
/* Meta-Form */
section.meta{
display:grid; grid-template-columns: repeat(6, 1fr);
gap:12px; margin-bottom:8px;
}
section.meta .row{ grid-column:1/-1; display:flex; gap:10px; align-items:center }
label.btn.like-label{
display:inline-block; padding:8px 14px; border-radius:12px; cursor:pointer;
background:var(--surface2); border:1px solid var(--stroke2); color:var(--text);
}
#yamlFile{ display:none }
section.meta label{ display:flex; flex-direction:column; gap:6px; font-size:12px; color:var(--muted) }
section.meta input{
padding:10px 12px; border:1px solid var(--stroke2); border-radius:10px;
background:var(--surface2); color:var(--text);
}
/* Buttons */
button,.btn{
background:var(--surface2); border:1px solid var(--stroke2); color:var(--text);
padding:10px 14px; border-radius:12px; cursor:pointer; transition:.15s; height:40px
}
button:hover,.btn:hover{ filter:brightness(1.1) }
/* Steps-Tabelle */
/* ===== Tabelle der Testschritte ===== */
#stepsTable { width:100%; border-collapse:separate; border-spacing:0 8px; table-layout: fixed; }
#stepsTable thead th{
text-align:left; font-size:14px; color:#c7cfe1;
padding:8px 10px; border-bottom:1px solid var(--stroke);
}
#stepsTable tbody tr{ background:var(--surface); border:1px solid var(--stroke2); border-radius:12px; }
#stepsTable td{ padding:10px; vertical-align:top; }
/* Gruppenzeile */
tr.group-row{
background: linear-gradient(0deg, rgba(0,167,230,0.10), rgba(0,167,230,0.10));
border:1px solid var(--stroke2);
border-left:3px solid var(--accent);
}
tr.group-row .group-title{
font-weight:700; letter-spacing:.2px;
}
/* Kleine Utilitys für Status-Buttons an Gruppen */
.group-row .group-actions{
display:flex; gap:6px; align-items:center;
}
.group-row .btn-group-status{
padding:4px 8px; font-size:12px; line-height:1;
}
/* Drag & Drop visuelle Hinweise */
tr.dragging{
opacity:.55;
}
tr.drag-over{
outline:2px dashed var(--accent);
outline-offset:-2px;
}
tr.drag-over[data-pos="before"]{
box-shadow: 0 -3px 0 var(--accent) inset;
}
tr.drag-over[data-pos="after"]{
box-shadow: 0 3px 0 var(--accent) inset;
}
/* Bessere Klick-Ziele für Header-Aktionen */
.group-row .step-head > div{
display:flex; gap:6px; align-items:center;
}
/* Collapse: versteckte Step-Zeilen */
tr[data-hidden="1"]{ display:none; }
.group-row .btn-toggle-group{ margin-left:8px; }
.group-row .btn-toggle-group .chev{
display:inline-block; transition:transform .15s ease;
}
.group-row[data-collapsed="1"] .btn-toggle-group .chev{
transform: rotate(-90deg);
}
/* Beim Browser-Druck (nur Editor-Ansicht) optional */
@media print{
.group-row{ break-before: page; }
}
/* Spaltenbreiten */
#stepsTable th:nth-child(1), #stepsTable td:nth-child(1){ width:25%; } /* Step + Titel */
#stepsTable th:nth-child(2), #stepsTable td:nth-child(2){ width:28%; } /* Expected */
#stepsTable th:nth-child(3), #stepsTable td:nth-child(3){ width:5%; } /* Status */
#stepsTable th:nth-child(4), #stepsTable td:nth-child(4){ width:26%; } /* Kommentar/Evidenz */
/* Gruppe: Eingabefeld */
.tpl-group-title{
width:100%; padding:10px 12px; border:1px solid var(--stroke2); border-radius:10px; background:var(--surface2); color:var(--text);
}
/* Eingabefelder */
#stepsTable input[type="text"], #stepsTable textarea, #stepsTable select{
width:100%; max-width:100%; box-sizing:border-box;
border:1px solid var(--stroke2); border-radius:10px;
background:var(--surface2); color:var(--text); padding:10px; font-size:14px; outline:none;
}
/* Erste Spalte: ID | Titel | Pin | Löschen */
#stepsTable td.cell-step .step-head{
display:grid; grid-template-columns:auto 1fr auto auto; gap:8px; align-items:center; margin-bottom:6px;
}
#stepsTable td.cell-step .tpl-id{ width:15ch }
#stepsTable td.cell-step .tpl-title{
display:block; width:100%;
min-height:40px;
resize:vertical;
overflow-wrap:break-word; word-break:break-word;
}
#stepsTable td.cell-step .req-pin{ opacity:.9 }
#stepsTable td.cell-step .btn-delete-step{
width:36px; height:36px; display:inline-flex; align-items:center; justify-content:center; padding:0; margin:0; line-height:1;
}
#stepsTable td.cell-step .req-row{
display:inline-flex; gap:6px; align-items:center; font-size:12px; color:var(--muted);
}
/* Expected */
#stepsTable .tpl-expected{ min-height:90px }
/* Status-Färbung für Select */
select.status.st-pass { background:rgba(34,197,94,.12); border-color:rgba(34,197,94,.25) }
select.status.st-fail { background:rgba(239,68,68,.12); border-color:rgba(239,68,68,.25) }
select.status.st-skip { background:rgba(107,114,128,.12);border-color:rgba(107,114,128,.25) }
select.status.st-blocked{ background:rgba(245,158,11,.12); border-color:rgba(245,158,11,.25) }
/* Deutlichere Färbung für ganze Zeile */
tr.row-pass {
background-color: rgba(34,197,94,0.18) !important;
border-color: rgba(34,197,94,0.35) !important;
}
tr.row-fail {
background-color: rgba(239,68,68,0.18) !important;
border-color: rgba(239,68,68,0.35) !important;
}
tr.row-skip {
background-color: rgba(107,114,128,0.18) !important;
border-color: rgba(107,114,128,0.35) !important;
}
tr.row-blocked {
background-color: rgba(245,158,11,0.18) !important;
border-color: rgba(245,158,11,0.35) !important;
}
/* Footer Buttons */
.footer-actions{ display:flex; flex-wrap:wrap; gap:12px; margin-top:8px }
/* === Fix 1: Inputs im Dark-Theme ==================== */
#stepsTable td input,
#stepsTable td textarea,
#stepsTable td select {
background: var(--surface2) !important;
color: var(--text) !important;
border: 1px solid var(--stroke2) !important;
box-shadow: none !important;
}
#stepsTable ::placeholder { color: var(--muted); opacity: .9; }
#stepsTable input:-webkit-autofill,
#stepsTable textarea:-webkit-autofill,
#stepsTable select:-webkit-autofill {
-webkit-text-fill-color: var(--text);
transition: background-color 9999s ease-in-out 0s;
box-shadow: 0 0 0px 1000px var(--surface2) inset !important;
}
/* === Fix 2: Header spacing =============================== */
/* ===== Kopfbereich ===== */
header {
padding-top: 14px !important;
padding-bottom: 10px !important;
}
header .brand img { height: 28px; }
header h1 { margin-left: 2px; }
/* Meta-Panel Abstand */
section.meta { margin-bottom: 14px !important; }
section.meta label { line-height: 1.2; }
/* === Fix 3: Datei auswählen ============================ */
#yamlFile { display: none; }
label.like-label {
display: inline-flex;
align-items: center;
gap: 8px;
height: 40px;
padding: 0 14px;
background: var(--surface2);
border: 1px solid var(--stroke2);
border-radius: 12px;
color: var(--text);
cursor: pointer;
user-select: none;
}
label.like-label:hover { filter: brightness(1.08); }
#statusTag {
display: inline-flex;
align-items: center;
min-height: 40px;
padding: 0 8px;
color: var(--muted);
}
/* === Fix 4: Kommentar/Evidenz Spalte ==================== */
#stepsTable td:nth-child(4) textarea.run-comment {
min-height: 80px;
}
#stepsTable td:nth-child(4) .run-evidence {
margin-top: 8px;
height: 40px;
}
/* === Header Final Fix =================================== */
/* ===== Kopfbereich ===== */
header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 20px;
background: var(--surface1);
border-bottom: 1px solid var(--stroke1);
}
header .brand { display: flex; align-items: center; gap: 10px; }
header .brand img { height: 32px; }
header .brand h1 {
font-size: 1.3rem;
font-weight: 600;
margin: 0;
color: var(--text);
}
header .actions { display: flex; align-items: center; gap: 10px; }
#statusTag {
padding: 6px 10px;
border-radius: 8px;
font-size: 0.9rem;
color: var(--muted);
background: var(--surface2);
white-space: nowrap;
}
/* === Theming for GitLab dropdown === */
#gitlabTplSelect {
/* System-Rendering neutralisieren, damit Farben greifen */
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background: var(--surface2, #1a1a1a);
color: var(--text, #eaeaea);
border: 1px solid rgba(255,255,255,0.12);
padding: 8px 10px;
border-radius: 8px;
outline: none;
}
#gitlabTplSelect:focus {
border-color: var(--accent, #18a0fb);
box-shadow: 0 0 0 2px rgba(24,160,251,0.25);
}
/* === Group row success/fail highlights === */
tr.group-row.group-ok { background: rgba(16,185,129,0.10); border-left: 4px solid #10b981; }
tr.group-row.group-fail { background: rgba(239,68,68,0.10); border-left: 4px solid #ef4444; }
/* Tag status helpers */
.tag.ok { background: rgba(16,185,129,0.15); color: #d1fae5; border-color: #10b981; }
.tag.bad { background: rgba(239,68,68,0.15); color: #fee2e2; border-color: #ef4444; }
.tag.warn { background: rgba(245,158,11,0.15); color: #ffedd5; border-color: #f59e0b; }
/* === Meta selects (ensures dark theming across engines) === */
section.meta select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background: var(--surface2) !important;
background-color: var(--surface2) !important;
color: var(--text) !important;
border: 1px solid var(--stroke2) !important;
padding: 8px 10px;
border-radius: 8px;
outline: none;
}
/* Stronger group-row colors (more visible) */
tr.group-row.group-ok {
background-color: rgba(34,197,94,0.12) !important;
border-left: 4px solid #10b981 !important;
}
tr.group-row.group-fail {
background-color: rgba(239,68,68,0.12) !important;
border-left: 4px solid #ef4444 !important;
}
/* ===== Drag-Handle nur rechts am Rand ===== */
.drag-handle{
justify-self:end;
align-self:stretch;
padding:0 8px;
cursor:grab;
user-select:none;
display:flex;
align-items:center;
font-weight:700;
letter-spacing:1px;
opacity:.6;
}
.drag-handle:active{ cursor:grabbing; opacity:.9 }
tr.dragging{ opacity:.85 }
/* Step-Row: +1 Spalte für Handle */
#stepsTable td.cell-step .step-head{ grid-template-columns:auto 1fr auto auto auto; }
/* Group-Row: +1 Spalte für Handle */
.group-row .step-head{ display:grid; grid-template-columns:1fr auto auto; gap:8px; align-items:center; }