diff --git a/data_visualization_web_ui/css/components.css b/data_visualization_web_ui/css/components.css new file mode 100644 index 0000000..778764c --- /dev/null +++ b/data_visualization_web_ui/css/components.css @@ -0,0 +1,180 @@ +:root { + --primary-color: #2a4d69; + --secondary-color: #4b86b4; + --background-color: #f4f6f8; + --text-color: #1e1e1e; + --panel-bg: #ffffff; + --border-color: #d0d7de; + --spacing-xs: 0.25rem; + --spacing-sm: 0.5rem; + --spacing-md: 1rem; + --spacing-lg: 1.5rem; + --radius-sm: 4px; + --radius-md: 8px; + --font-base: 'system-ui', sans-serif; + --font-size-sm: 0.9rem; + --font-size-md: 1rem; + --font-size-lg: 1.25rem; +} + +/* ============================= */ +/* Header und Navigation */ +/* ============================= */ +.app-header { + background-color: var(--primary-color); + color: #fff; + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--spacing-md) var(--spacing-lg); + font-family: var(--font-base); + flex-wrap: wrap; +} + +.app-header h1 { + font-size: var(--font-size-lg); + margin: 0; + letter-spacing: 0.5px; +} + +.app-header__filters { + display: flex; + gap: var(--spacing-sm); + align-items: center; +} + +.app-header__filters select, +.app-header__filters input[type="date"] { + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: var(--radius-sm); + border: 1px solid var(--border-color); + background-color: #fff; + color: var(--text-color); + font-size: var(--font-size-sm); +} + +/* ============================= */ +/* Filter Panel */ +/* ============================= */ +.filter-panel { + background-color: var(--panel-bg); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: var(--spacing-md); + margin: var(--spacing-md) 0; + display: flex; + flex-wrap: wrap; + gap: var(--spacing-sm); +} + +.filter-panel__group { + display: flex; + flex-direction: column; +} + +.filter-panel label { + font-size: var(--font-size-sm); + color: var(--text-color); + margin-bottom: var(--spacing-xs); +} + +.filter-panel select, +.filter-panel input { + padding: var(--spacing-xs) var(--spacing-sm); + border: 1px solid var(--border-color); + border-radius: var(--radius-sm); +} + +/* ============================= */ +/* Chart Container */ +/* ============================= */ +.chart-container { + background-color: var(--panel-bg); + border-radius: var(--radius-md); + border: 1px solid var(--border-color); + padding: var(--spacing-md); + display: flex; + flex-direction: column; + gap: var(--spacing-md); + overflow-x: auto; +} + +.chart { + width: 100%; + height: 320px; + position: relative; +} + +.chart canvas { + width: 100%; + height: 100%; + display: block; +} + +/* ============================= */ +/* Analysis Panel */ +/* ============================= */ +.analysis-panel { + background-color: var(--panel-bg); + border-radius: var(--radius-md); + border: 1px solid var(--border-color); + padding: var(--spacing-md); + margin-top: var(--spacing-md); +} + +.analysis-panel__stats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); + gap: var(--spacing-md); +} + +.analysis-panel__stat { + text-align: center; + padding: var(--spacing-sm); + background-color: var(--background-color); + border-radius: var(--radius-sm); + border: 1px solid var(--border-color); +} + +.analysis-panel__stat-label { + font-size: var(--font-size-sm); + color: var(--text-color); + opacity: 0.8; +} + +.analysis-panel__stat-value { + font-size: var(--font-size-lg); + font-weight: bold; + color: var(--secondary-color); +} + +/* ============================= */ +/* Footer */ +/* ============================= */ +.app-footer { + text-align: center; + padding: var(--spacing-md); + background-color: var(--primary-color); + color: #fff; + font-size: var(--font-size-sm); + margin-top: auto; +} + +.app-footer p { + margin: 0; +} + +/* ============================= */ +/* Responsiveness */ +/* ============================= */ +@media (min-width: 640px) { + .chart { + height: 400px; + } +} + +@media (min-width: 1024px) { + .chart { + height: 500px; + } +}