feat (ui): Light/Dark Theme added Complete

This commit is contained in:
kodi
2026-03-04 07:48:58 +01:00
parent ebefd2d80c
commit 6bf30db62c
6 changed files with 224 additions and 19 deletions
+96 -4
View File
@@ -56,6 +56,18 @@
--badge-yellow-text: #111111;
--table-zebra: rgba(96,165,250,.03);
--sticky-head-bg: rgba(17,26,46,.96);
--state-info-bg: rgba(96,165,250,.08);
--state-info-border: rgba(96,165,250,.35);
--state-empty-bg: rgba(251,191,36,.08);
--state-empty-border: rgba(251,191,36,.35);
--state-error-bg: rgba(251,113,133,.08);
--state-error-border: rgba(251,113,133,.35);
--map-tooltip-bg: rgba(11,18,32,.95);
--map-tooltip-border: rgba(36,52,95,.9);
--fs-body: 14px;
--fs-small: 12px;
--fs-title: 16px;
--fs-kpi: 22px;
--radius: 14px;
--mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--sans: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji","Segoe UI Emoji";
@@ -115,11 +127,25 @@
--badge-yellow-text: #fffbeb;
--table-zebra: rgba(15,23,42,.03);
--sticky-head-bg: rgba(255,255,255,.97);
--state-info-bg: rgba(37,99,235,.08);
--state-info-border: rgba(37,99,235,.3);
--state-empty-bg: rgba(180,83,9,.09);
--state-empty-border: rgba(180,83,9,.35);
--state-error-bg: rgba(225,29,72,.08);
--state-error-border: rgba(225,29,72,.35);
--map-tooltip-bg: rgba(255,255,255,.98);
--map-tooltip-border: rgba(148,163,184,.45);
--fs-body: 14px;
--fs-small: 12px;
--fs-title: 16px;
--fs-kpi: 22px;
}
*{box-sizing:border-box}
body{
margin:0;
font-family: var(--sans);
font-size: var(--fs-body);
line-height: 1.45;
background: radial-gradient(1200px 600px at 20% 0%, var(--bg-grad-start) 0%, var(--bg) 55%);
color: var(--text);
}
@@ -166,6 +192,10 @@ header{
cursor:pointer;
user-select:none;
font-size:14px;
transition: transform .12s ease, border-color .16s ease, background .16s ease;
}
.tab:hover{
transform: translateY(-1px);
}
.tab.active{
background: var(--tab-active-bg);
@@ -200,6 +230,7 @@ header{
.cardTitle{
font-weight:700;
display:flex; gap:10px; align-items:center;
font-size: var(--fs-title);
}
.cardBody{padding:14px}
.dashboardKpiGrid{
@@ -225,6 +256,7 @@ header{
font-size:13px;
}
.btn:hover{background: var(--btn2)}
.btn:active{transform: translateY(1px)}
.btn.small{padding:7px 9px; border-radius: 10px}
.btn.ghost{background: transparent}
.btn.ok{border-color: rgba(45,212,191,.6)}
@@ -280,7 +312,7 @@ tr:hover td{background: var(--hover-bg)}
padding: 4px 8px;
border: 1px solid var(--card-border);
border-radius: 999px;
font-size: 12px;
font-size: var(--fs-small);
color: var(--muted);
white-space: nowrap; /* Tip: dit voorkomt dat je badge tekst afbreekt */
}
@@ -338,18 +370,18 @@ pre.code{
}
.statValue{
font-weight:800;
font-size: 20px;
font-size: var(--fs-kpi);
line-height: 1.1;
letter-spacing: .2px;
}
.statLabel{
color: var(--muted);
font-size: 12px;
font-size: var(--fs-small);
margin-top: 4px;
}
.statHint{
color: var(--muted);
font-size: 12px;
font-size: var(--fs-small);
margin-top: 6px;
}
@@ -543,11 +575,25 @@ pre{
.navLabel {
white-space: nowrap;
}
.navCount{
margin-left: auto;
min-width: 26px;
text-align: center;
border: 1px solid var(--card-border);
border-radius: 999px;
font-size: 11px;
color: var(--muted);
padding: 2px 7px;
background: var(--input-bg);
}
/* Collapsed: alleen icon zichtbaar */
.sidebar.collapsed .navLabel {
display: none;
}
.sidebar.collapsed .navCount {
display: none;
}
.sidebar.collapsed .tab {
justify-content: center;
padding: 10px 10px;
@@ -666,6 +712,35 @@ pre{
padding:7px 9px;
font-size: 12px;
}
.stateBox{
border-radius: 12px;
padding: 10px 12px;
border: 1px solid var(--state-info-border);
background: var(--state-info-bg);
}
.stateBox.empty{
border-color: var(--state-empty-border);
background: var(--state-empty-bg);
}
.stateBox.error{
border-color: var(--state-error-border);
background: var(--state-error-bg);
}
.stateTitle{
font-weight: 700;
margin-bottom: 4px;
}
.stateText{
color: var(--muted);
font-size: var(--fs-small);
}
.viewAnim{
animation: viewFade .18s ease;
}
@keyframes viewFade{
from{opacity:.0; transform: translateY(3px)}
to{opacity:1; transform: translateY(0)}
}
.data-table {
width: 100%;
border-collapse: collapse;
@@ -734,6 +809,23 @@ pre{
border-radius: 14px;
min-height: 420px;
overflow: hidden;
position: relative;
}
.mapTooltip{
position: absolute;
left: 0;
top: 0;
pointer-events: none;
max-width: 260px;
background: var(--map-tooltip-bg);
color: var(--text);
border: 1px solid var(--map-tooltip-border);
border-radius: 10px;
padding: 7px 9px;
font-size: 12px;
line-height: 1.35;
box-shadow: var(--shadow);
z-index: 3;
}
.mapLegend{