diff --git a/data_visualization/css/components.css b/data_visualization/css/components.css new file mode 100644 index 0000000..834ca34 --- /dev/null +++ b/data_visualization/css/components.css @@ -0,0 +1,195 @@ +:root { + --primary: #2d7df4; + --primary-light: #e8f1fe; + --accent: #f4a261; + --bg: #ffffff; + --bg-alt: #f7f9fc; + --text: #1d1f21; + --text-muted: #6c757d; + --border: #d0d7de; + --radius-md: 4px; + --spacing-xs: 0.25rem; + --spacing-sm: 0.5rem; + --spacing-md: 1rem; + --spacing-lg: 2rem; + --font-base: 'system-ui', sans-serif; + --transition-fast: 0.2s ease; +} + +/* =============================================== */ +/* Charts & Panels */ +/* =============================================== */ +.chart-panel { + background-color: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: var(--spacing-md); + margin-bottom: var(--spacing-lg); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); + display: flex; + flex-direction: column; + gap: var(--spacing-md); +} + +.bandwidth-chart, +.retry-tailp99-chart { + width: 100%; + height: 280px; + display: flex; + justify-content: center; + align-items: center; + background: var(--bg-alt); + border-radius: var(--radius-md); + position: relative; +} + +.bandwidth-chart canvas, +.retry-tailp99-chart canvas { + width: 100%; + height: 100%; +} + +.chart-panel__title { + font-weight: 600; + font-size: 1.1rem; + color: var(--text); + margin-bottom: var(--spacing-sm); +} + +.chart-panel__description { + font-size: 0.9rem; + color: var(--text-muted); +} + +/* =============================================== */ +/* Filters & Sidebar */ +/* =============================================== */ +.filter-panel { + display: flex; + flex-wrap: wrap; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: var(--spacing-md); + gap: var(--spacing-md); + align-items: center; +} + +.filter-panel label { + font-weight: 500; + color: var(--text); + font-size: 0.95rem; +} + +.filter-panel select, +.filter-panel input[type="text"], +.filter-panel input[type="number"] { + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: var(--spacing-xs) var(--spacing-sm); + font-size: 0.95rem; + color: var(--text); + background: var(--bg); + transition: border-color var(--transition-fast); +} + +.filter-panel select:focus, +.filter-panel input:focus { + outline: none; + border-color: var(--primary); +} + +.sidebar { + display: flex; + flex-direction: column; + gap: var(--spacing-md); + padding: var(--spacing-md); + background: var(--bg-alt); + border-right: 1px solid var(--border); + min-width: 220px; +} + +.sidebar__group { + display: flex; + flex-direction: column; + gap: var(--spacing-sm); +} + +.sidebar__title { + font-size: 1rem; + font-weight: 600; + color: var(--text); + margin-bottom: var(--spacing-xs); +} + +/* =============================================== */ +/* Tables */ +/* =============================================== */ +.data-table, +.results-table { + width: 100%; + border-collapse: collapse; + font-size: 0.95rem; + font-family: var(--font-base); + margin-top: var(--spacing-md); + border: 1px solid var(--border); +} + +table.data-table th, +table.results-table th { + text-align: left; + background: var(--primary-light); + color: var(--text); + padding: var(--spacing-sm); + border-bottom: 1px solid var(--border); + font-weight: 600; +} + +table.data-table td, +table.results-table td { + padding: var(--spacing-sm); + border-bottom: 1px solid var(--border); + color: var(--text); +} + +table.data-table tr:nth-child(even), +table.results-table tr:nth-child(even) { + background: var(--bg-alt); +} + +table.data-table tr:hover, +table.results-table tr:hover { + background: var(--primary-light); +} + +/* Responsive Behaviour */ +@media (max-width: 768px) { + .chart-panel { + padding: var(--spacing-sm); + } + .filter-panel { + flex-direction: column; + align-items: stretch; + } + .sidebar { + display: none; + } + table.data-table, + table.results-table { + font-size: 0.85rem; + } +} + +/* Footer */ +footer { + text-align: center; + font-size: 0.8rem; + color: var(--text-muted); + padding: var(--spacing-md); +} + +footer::after { + content: "© 2026 Donau2Space.de"; + display: block; + margin-top: var(--spacing-xs); +} \ No newline at end of file