diff --git a/internal/views/static/css/kafka.css b/internal/views/static/css/kafka.css index ef45d58..f01b22c 100644 --- a/internal/views/static/css/kafka.css +++ b/internal/views/static/css/kafka.css @@ -24,6 +24,22 @@ --font-mono: "IBM Plex Mono", ui-monospace, monospace; } +[data-theme="dark"] { + --bg: #0f0f0f; + --bg-secondary: #1a1a1a; + --bg-tertiary: #242424; + --border: #2e2e2e; + --border-focus: #404040; + --text-primary: #e8eaed; + --text-secondary: #9aa0a6; + --text-muted: #6b7280; + --accent: #14b8a6; + --accent-hover: #2dd4bf; + --accent-soft: #134e4a; + --shadow-sm: 0 1px 3px rgba(0,0,0,0.3); + --shadow-md: 0 4px 12px rgba(0,0,0,0.4); +} + *, *::before, *::after { box-sizing: border-box; margin: 0; @@ -592,3 +608,224 @@ footer a:hover { gap: 0.5rem; } } + +/* ============================================================ + Preferences Page + ============================================================ */ + +.preferences-container { + max-width: 640px; + margin: 2rem auto; + padding: 0 1.5rem; +} + +.preferences-title { + font-size: 1.5rem; + font-weight: 600; + margin-bottom: 2rem; + color: var(--text-primary); +} + +.preferences-form { + display: flex; + flex-direction: column; + gap: 2rem; +} + +.pref-section { + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 1.25rem; +} + +.pref-section-title { + font-size: 0.7rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--text-muted); + margin-bottom: 1rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--border); +} + +.pref-desc { + font-size: 0.8rem; + color: var(--text-muted); + margin-bottom: 1rem; +} + +.pref-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 0.75rem 0; + border-bottom: 1px solid var(--border); +} + +.pref-row:last-child { + border-bottom: none; + padding-bottom: 0; +} + +.pref-row label:first-child { + font-size: 0.9rem; + color: var(--text-primary); +} + +.pref-row-info { + flex: 1; +} + +.pref-row-info label { + font-weight: 500; +} + +.pref-row select { + padding: 0.5rem 0.75rem; + font-size: 0.85rem; + font-family: inherit; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg); + color: var(--text-primary); + cursor: pointer; + min-width: 120px; +} + +.pref-row select:focus { + outline: none; + border-color: var(--accent); +} + +.theme-buttons { + display: flex; + gap: 0.5rem; +} + +.theme-btn { + padding: 0.5rem 1rem; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg); + color: var(--text-secondary); + font-size: 0.85rem; + font-family: inherit; + cursor: pointer; + transition: all 0.15s; +} + +.theme-btn:hover { + background: var(--bg-secondary); +} + +.theme-btn.active { + background: var(--accent-soft); + border-color: var(--accent); + color: var(--accent); + font-weight: 500; +} + +.engine-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + gap: 0.5rem; + margin-top: 0.75rem; +} + +.engine-toggle { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 0.75rem; + background: var(--bg-secondary); + border-radius: var(--radius-sm); + font-size: 0.85rem; + cursor: pointer; + transition: background 0.15s; +} + +.engine-toggle:hover { + background: var(--bg-tertiary); +} + +.engine-toggle input[type="checkbox"] { + width: 16px; + height: 16px; + accent-color: var(--accent); + cursor: pointer; +} + +.engine-toggle span { + color: var(--text-secondary); +} + +.pref-actions { + display: flex; + gap: 1rem; + justify-content: flex-end; + padding-top: 1rem; +} + +.btn-primary, +.btn-secondary { + padding: 0.65rem 1.25rem; + border-radius: var(--radius-sm); + font-size: 0.9rem; + font-family: inherit; + cursor: pointer; + text-decoration: none; + display: inline-flex; + align-items: center; + justify-content: center; + transition: all 0.15s; +} + +.btn-primary { + background: var(--accent); + color: #fff; + border: none; +} + +.btn-primary:hover { + background: var(--accent-hover); +} + +.btn-secondary { + background: var(--bg); + color: var(--text-secondary); + border: 1px solid var(--border); +} + +.btn-secondary:hover { + background: var(--bg-secondary); + color: var(--text-primary); +} + +@media (max-width: 600px) { + .engine-grid { + grid-template-columns: 1fr 1fr; + } + + .pref-row { + flex-direction: column; + align-items: flex-start; + gap: 0.5rem; + } + + .pref-row select { + width: 100%; + } + + .pref-actions { + flex-direction: column; + } + + .btn-primary, + .btn-secondary { + width: 100%; + text-align: center; + } +} diff --git a/internal/views/templates/base.html b/internal/views/templates/base.html index 103385f..6ef250d 100644 --- a/internal/views/templates/base.html +++ b/internal/views/templates/base.html @@ -1,6 +1,6 @@ {{define "base"}} - +
@@ -11,6 +11,7 @@ +