diff --git a/data_visualization/css/components.css b/data_visualization/css/components.css new file mode 100644 index 0000000..826f7ea --- /dev/null +++ b/data_visualization/css/components.css @@ -0,0 +1,161 @@ +:root { + --primary: #1e90ff; + --secondary: #f5f7fa; + --accent: #ffb300; + --text-color: #222; + --text-muted: #666; + --border-color: #ddd; + --radius: 6px; + --spacing-sm: 0.5rem; + --spacing-md: 1rem; + --spacing-lg: 2rem; + --font-base: 'Arial', sans-serif; + --font-size-base: 1rem; + --font-size-sm: 0.9rem; + --font-size-lg: 1.2rem; +} + +/* =============================== + FILTER PANEL + =============================== */ +.filter-panel { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--spacing-md); + background-color: var(--secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius); + padding: var(--spacing-md); + font-family: var(--font-base); + color: var(--text-color); +} + +.filter-panel label { + font-weight: 600; + font-size: var(--font-size-sm); + color: var(--text-muted); +} + +.filter-panel input[type="date"], +.filter-panel select { + padding: var(--spacing-sm); + border-radius: var(--radius); + border: 1px solid var(--border-color); + font-size: var(--font-size-base); +} + +.filter-panel button { + background-color: var(--primary); + border: none; + border-radius: var(--radius); + color: #fff; + font-weight: 600; + cursor: pointer; + padding: var(--spacing-sm) var(--spacing-md); + transition: background-color 0.2s ease-in-out; +} + +.filter-panel button:hover { + background-color: #0075e0; +} + +/* =============================== + CHART PANEL + =============================== */ +.chart-panel { + position: relative; + flex: 1 1 100%; + background-color: #fff; + border: 1px solid var(--border-color); + border-radius: var(--radius); + margin-top: var(--spacing-lg); + padding: var(--spacing-md); + display: flex; + flex-direction: column; + justify-content: center; + align-items: stretch; + min-height: 300px; +} + +.chart-panel__title { + font-size: var(--font-size-lg); + font-weight: 600; + color: var(--text-color); + margin-bottom: var(--spacing-md); +} + +.chart-panel__canvas { + flex: 1; + width: 100%; + height: auto; +} + +.chart-panel__highlight { + stroke: var(--accent); + stroke-width: 2; + opacity: 0.7; +} + +/* =============================== + SUMMARY PANEL + =============================== */ +.summary-panel { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: var(--spacing-md); + margin-top: var(--spacing-lg); + border-top: 1px solid var(--border-color); + padding-top: var(--spacing-md); + font-family: var(--font-base); +} + +.summary-panel__item { + background-color: var(--secondary); + border-radius: var(--radius); + padding: var(--spacing-md); + text-align: center; +} + +.summary-panel__label { + font-size: var(--font-size-sm); + color: var(--text-muted); +} + +.summary-panel__value { + font-size: var(--font-size-lg); + font-weight: bold; + color: var(--text-color); +} + +/* =============================== + RESPONSIVE DESIGN + =============================== */ +@media (min-width: 640px) { + .filter-panel { + justify-content: space-between; + } +} + +@media (min-width: 1024px) { + .chart-panel { + min-height: 400px; + } + .summary-panel__value { + font-size: 1.4rem; + } +} + +/* =============================== + FOOTER + =============================== */ +footer { + text-align: center; + font-size: var(--font-size-sm); + color: var(--text-muted); + padding: var(--spacing-md) 0; +} + +footer::after { + content: "© 2026 Donau2Space.de"; +}