Some checks failed
CI / ci (push) Has been cancelled
- Updated the tooltip for the CPU standard deviation metric to include a detailed explanation of the calculation, preserving newlines for better readability. - Added CSS styles to support multi-line tooltips, improving user comprehension of the displayed data.
349 lines
9.6 KiB
CSS
349 lines
9.6 KiB
CSS
/* DM Sans – local webfonts (no external requests) */
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 400;
|
||
src: url('../fonts/dm-sans-latin-400-normal.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 500;
|
||
src: url('../fonts/dm-sans-latin-500-normal.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 600;
|
||
src: url('../fonts/dm-sans-latin-600-normal.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: normal;
|
||
font-display: swap;
|
||
font-weight: 700;
|
||
src: url('../fonts/dm-sans-latin-700-normal.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: italic;
|
||
font-display: swap;
|
||
font-weight: 400;
|
||
src: url('../fonts/dm-sans-latin-400-italic.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: italic;
|
||
font-display: swap;
|
||
font-weight: 500;
|
||
src: url('../fonts/dm-sans-latin-500-italic.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: italic;
|
||
font-display: swap;
|
||
font-weight: 600;
|
||
src: url('../fonts/dm-sans-latin-600-italic.woff2') format('woff2');
|
||
}
|
||
@font-face {
|
||
font-family: 'DM Sans';
|
||
font-style: italic;
|
||
font-display: swap;
|
||
font-weight: 700;
|
||
src: url('../fonts/dm-sans-latin-700-italic.woff2') format('woff2');
|
||
}
|
||
|
||
@import "tailwindcss";
|
||
@plugin "daisyui";
|
||
|
||
@theme {
|
||
--font-sans: "DM Sans", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||
}
|
||
|
||
@plugin "daisyui/theme" {
|
||
name: "light";
|
||
default: true;
|
||
prefersdark: false;
|
||
color-scheme: "light";
|
||
--color-base-100: oklch(100% 0.004 260);
|
||
--color-base-200: oklch(98% 0.004 260);
|
||
--color-base-300: oklch(95% 0.004 260);
|
||
--color-base-content: oklch(22% 0.02 260);
|
||
--color-primary: #0a2973;
|
||
--color-primary-content: #ffffff;
|
||
--color-secondary: #009fdf;
|
||
--color-secondary-content: #ffffff;
|
||
--color-accent: #009fdf;
|
||
--color-accent-content: #ffffff;
|
||
--color-neutral: #333333;
|
||
--color-neutral-content: oklch(92% 0.004 286.32);
|
||
--color-info: oklch(74% 0.16 232.661);
|
||
--color-info-content: oklch(29% 0.066 243.157);
|
||
--color-success: oklch(76% 0.177 163.223);
|
||
--color-success-content: oklch(37% 0.077 168.94);
|
||
--color-warning: oklch(82% 0.189 84.429);
|
||
--color-warning-content: oklch(41% 0.112 45.904);
|
||
--color-error: oklch(71% 0.194 13.428);
|
||
--color-error-content: oklch(27% 0.105 12.094);
|
||
--radius-selector: 0.5rem;
|
||
--radius-field: 0.25rem;
|
||
--radius-box: 0.5rem;
|
||
--size-selector: 0.25rem;
|
||
--size-field: 0.25rem;
|
||
--border: 1px;
|
||
--depth: 1;
|
||
--noise: 0;
|
||
--chart-grid-color: color-mix(in oklch, var(--color-base-content) 10%, transparent);
|
||
}
|
||
|
||
@plugin "daisyui/theme" {
|
||
name: "dark";
|
||
default: false;
|
||
prefersdark: true;
|
||
color-scheme: "dark";
|
||
--color-base-100: oklch(22% 0.014 260);
|
||
--color-base-200: oklch(19% 0.012 260);
|
||
--color-base-300: oklch(16% 0.01 260);
|
||
--color-base-content: oklch(96% 0.01 260);
|
||
/* Lighter primary/secondary for readability on dark background (cards, progress, %) */
|
||
--color-primary: oklch(65% 0.2 260);
|
||
--color-primary-content: #ffffff;
|
||
--color-secondary: oklch(72% 0.16 230);
|
||
--color-secondary-content: #ffffff;
|
||
--color-accent: oklch(72% 0.16 230);
|
||
--color-accent-content: #ffffff;
|
||
--color-neutral: oklch(28% 0.02 260);
|
||
--color-neutral-content: oklch(92% 0.004 286.32);
|
||
--color-info: oklch(74% 0.16 232.661);
|
||
--color-info-content: oklch(29% 0.066 243.157);
|
||
--color-success: oklch(76% 0.177 163.223);
|
||
--color-success-content: oklch(37% 0.077 168.94);
|
||
--color-warning: oklch(82% 0.189 84.429);
|
||
--color-warning-content: oklch(41% 0.112 45.904);
|
||
--color-error: oklch(71% 0.194 13.428);
|
||
--color-error-content: oklch(27% 0.105 12.094);
|
||
--radius-selector: 0.5rem;
|
||
--radius-field: 0.25rem;
|
||
--radius-box: 0.5rem;
|
||
--size-selector: 0.25rem;
|
||
--size-field: 0.25rem;
|
||
--border: 1px;
|
||
--depth: 1;
|
||
--noise: 0;
|
||
--chart-grid-color: color-mix(in oklch, var(--color-base-content) 10%, transparent);
|
||
}
|
||
|
||
/* VTB gradient (both themes) */
|
||
:root {
|
||
--gradient-vtb: linear-gradient(135deg, #0a2973 0%, #009fdf 100%);
|
||
}
|
||
|
||
/* Gradient top border for cards */
|
||
.border-t-gradient-vtb {
|
||
position: relative;
|
||
}
|
||
.border-t-gradient-vtb::before {
|
||
content: "";
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
height: 4px;
|
||
background: var(--gradient-vtb);
|
||
border-radius: var(--radius-box) var(--radius-box) 0 0;
|
||
}
|
||
|
||
/* Gradient button (e.g. Load Analysis) */
|
||
.btn-gradient-vtb {
|
||
background: var(--gradient-vtb);
|
||
color: #ffffff;
|
||
border: none;
|
||
}
|
||
.btn-gradient-vtb:hover {
|
||
opacity: 0.9;
|
||
color: #ffffff;
|
||
}
|
||
|
||
/* Main content area: distinct background so cards (base-100) stand out */
|
||
[data-theme=light] main {
|
||
background-color: var(--color-base-200);
|
||
}
|
||
[data-theme=dark] main {
|
||
background-color: var(--color-base-200);
|
||
}
|
||
|
||
/* Dark theme: improve contrast for muted text and controls */
|
||
[data-theme=dark] .text-base-content\/60 {
|
||
color: color-mix(in oklch, var(--color-base-content) 88%, transparent);
|
||
}
|
||
[data-theme=dark] .text-base-content\/70 {
|
||
color: color-mix(in oklch, var(--color-base-content) 92%, transparent);
|
||
}
|
||
[data-theme=dark] .text-base-content\/30 {
|
||
color: color-mix(in oklch, var(--color-base-content) 55%, transparent);
|
||
}
|
||
[data-theme=dark] .badge-outline {
|
||
border-color: color-mix(in oklch, var(--color-base-content) 75%, transparent);
|
||
color: color-mix(in oklch, var(--color-base-content) 90%, transparent);
|
||
}
|
||
[data-theme=dark] .badge-neutral {
|
||
background-color: var(--color-base-300);
|
||
color: var(--color-base-content);
|
||
border-color: transparent;
|
||
}
|
||
[data-theme=dark] .btn-ghost {
|
||
color: color-mix(in oklch, var(--color-base-content) 90%, transparent);
|
||
}
|
||
[data-theme=dark] .btn-ghost:hover {
|
||
color: var(--color-base-content);
|
||
background-color: color-mix(in oklch, var(--color-base-content) 12%, transparent);
|
||
}
|
||
|
||
/* Dark theme: better contrast for CPU chart stats (Mean, ±0.5σ) */
|
||
[data-theme=dark] section[aria-label="CPU distribution chart"] .text-success {
|
||
color: oklch(85% 0.16 163);
|
||
}
|
||
[data-theme=dark] section[aria-label="CPU distribution chart"] .text-error\/60 {
|
||
color: oklch(82% 0.18 13);
|
||
}
|
||
|
||
/* Accessibility: ensure focus ring is visible on key controls */
|
||
.btn:focus-visible,
|
||
.select:focus-within,
|
||
label.swap:focus-within:not(.theme-toggle) {
|
||
outline: 2px solid var(--color-primary);
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
/* Light theme: slightly stronger card shadow for depth */
|
||
[data-theme=light] .card.shadow-sm {
|
||
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.08), 0 1px 2px -1px rgb(0 0 0 / 0.06);
|
||
}
|
||
[data-theme=light] .card.shadow-sm:hover {
|
||
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.08), 0 2px 4px -2px rgb(0 0 0 / 0.06);
|
||
}
|
||
|
||
@source "../../templates";
|
||
|
||
/* --- Print (Save as PDF) --- */
|
||
@page {
|
||
size: A4;
|
||
margin: 15mm;
|
||
}
|
||
|
||
@media print {
|
||
/* Force printable area width (A4 minus margins) so layout doesn't use screen width */
|
||
html {
|
||
width: 180mm !important;
|
||
min-width: 180mm !important;
|
||
max-width: 180mm !important;
|
||
margin: 0 !important;
|
||
padding: 0 !important;
|
||
overflow-x: hidden !important;
|
||
}
|
||
body {
|
||
width: 180mm !important;
|
||
min-width: 180mm !important;
|
||
max-width: 180mm !important;
|
||
margin: 0 !important;
|
||
padding: 0 !important;
|
||
overflow-x: hidden !important;
|
||
-webkit-print-color-adjust: exact;
|
||
print-color-adjust: exact;
|
||
box-sizing: border-box !important;
|
||
}
|
||
body *,
|
||
body *::before,
|
||
body *::after {
|
||
box-sizing: border-box !important;
|
||
}
|
||
/* Allow flex/grid children to shrink so they don't force overflow */
|
||
body * {
|
||
min-width: 0 !important;
|
||
}
|
||
.no-print {
|
||
display: none !important;
|
||
}
|
||
.print-only {
|
||
display: block !important;
|
||
}
|
||
/* Main and content: stay within body width */
|
||
main.container {
|
||
width: 100% !important;
|
||
max-width: 100% !important;
|
||
margin: 0 !important;
|
||
padding: 0.5rem 0.5rem 0 !important;
|
||
min-width: 0 !important;
|
||
}
|
||
#dashboard-content {
|
||
width: 100% !important;
|
||
max-width: 100% !important;
|
||
min-width: 0 !important;
|
||
overflow-x: hidden !important;
|
||
padding: 0.5rem 0 !important;
|
||
}
|
||
/* Keep card backgrounds and colors when printing */
|
||
.card,
|
||
.badge,
|
||
.progress {
|
||
-webkit-print-color-adjust: exact;
|
||
print-color-adjust: exact;
|
||
}
|
||
/* Avoid breaking cards and sections across pages */
|
||
.card {
|
||
break-inside: avoid;
|
||
page-break-inside: avoid;
|
||
}
|
||
section {
|
||
break-inside: avoid;
|
||
page-break-inside: avoid;
|
||
}
|
||
/* Tables: fit to page, allow column shrink */
|
||
.overflow-x-auto {
|
||
max-width: 100% !important;
|
||
overflow-x: visible !important;
|
||
}
|
||
.table {
|
||
table-layout: fixed !important;
|
||
width: 100% !important;
|
||
max-width: 100% !important;
|
||
}
|
||
.table td,
|
||
.table th {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
/* Chart: constrain so it doesn't overflow (canvas has fixed size from Chart.js) */
|
||
section[aria-label="CPU distribution chart"] .card-body {
|
||
max-width: 100% !important;
|
||
overflow: hidden !important;
|
||
}
|
||
section[aria-label="CPU distribution chart"] .h-48,
|
||
section[aria-label="CPU distribution chart"] [class*="h-48"] {
|
||
max-width: 100% !important;
|
||
min-height: 10rem !important;
|
||
}
|
||
section[aria-label="CPU distribution chart"] canvas {
|
||
max-width: 100% !important;
|
||
height: auto !important;
|
||
}
|
||
/* Navbar fits page width */
|
||
.navbar {
|
||
width: 100% !important;
|
||
max-width: 100% !important;
|
||
}
|
||
}
|
||
@media screen {
|
||
.print-only {
|
||
display: none !important;
|
||
}
|
||
}
|
||
|
||
/* Multi-line tooltip (formula): preserve newlines from data-tip */
|
||
.tooltip-formula[data-tip]::before {
|
||
white-space: pre-line;
|
||
text-align: left;
|
||
} |