ux: modernize admin settings UI

This commit is contained in:
Marco Allegretti 2026-01-30 09:43:12 +01:00
parent 6e2f34d707
commit b4a5088d88

View file

@ -9,18 +9,20 @@ import { API_BASE as apiBase } from '../../lib/api';
<div class="admin-container"> <div class="admin-container">
<AdminNav currentPage="/admin/settings" /> <AdminNav currentPage="/admin/settings" />
<main class="admin-main"> <main class="admin-content">
<header class="admin-header"> <header class="ui-page-header">
<div class="ui-page-title">
<h1>Instance Settings</h1> <h1>Instance Settings</h1>
<p>Configure global platform settings</p> <p class="ui-subtitle">Configure global platform settings</p>
</div>
</header> </header>
<div id="loading">Loading settings...</div> <div id="loading">Loading settings...</div>
<div id="error" class="error-box" style="display: none;"></div> <div id="error" class="error-box" style="display: none;"></div>
<form id="settings-form" style="display: none;"> <form id="settings-form" class="ui-form" style="display: none;">
<!-- General Settings --> <!-- General Settings -->
<section class="settings-section"> <section class="settings-section ui-card ui-card-soft ui-card-pad-md">
<h2>General</h2> <h2>General</h2>
<div class="form-group"> <div class="form-group">
@ -30,7 +32,7 @@ import { API_BASE as apiBase } from '../../lib/api';
</section> </section>
<!-- Platform Mode --> <!-- Platform Mode -->
<section class="settings-section"> <section class="settings-section ui-card ui-card-soft ui-card-pad-md">
<h2>Community Creation</h2> <h2>Community Creation</h2>
<div class="form-group"> <div class="form-group">
@ -45,7 +47,7 @@ import { API_BASE as apiBase } from '../../lib/api';
</section> </section>
<!-- Registration --> <!-- Registration -->
<section class="settings-section"> <section class="settings-section ui-card ui-card-soft ui-card-pad-md">
<h2>Registration</h2> <h2>Registration</h2>
<div class="form-group"> <div class="form-group">
@ -66,7 +68,7 @@ import { API_BASE as apiBase } from '../../lib/api';
</section> </section>
<!-- Defaults --> <!-- Defaults -->
<section class="settings-section"> <section class="settings-section ui-card ui-card-soft ui-card-pad-md">
<h2>Defaults</h2> <h2>Defaults</h2>
<div class="form-group"> <div class="form-group">
@ -98,7 +100,7 @@ import { API_BASE as apiBase } from '../../lib/api';
</section> </section>
<div class="form-actions"> <div class="form-actions">
<button type="submit" id="save-btn">Save Settings</button> <button type="submit" id="save-btn" class="ui-btn ui-btn-primary">Save Settings</button>
<span id="save-status"></span> <span id="save-status"></span>
</div> </div>
</form> </form>
@ -109,81 +111,24 @@ import { API_BASE as apiBase } from '../../lib/api';
<style> <style>
.admin-container { .admin-container {
display: flex; display: flex;
min-height: 100vh; min-height: calc(100vh - 60px);
} }
.admin-sidebar { .admin-content {
width: 240px;
background: #1a1a2e;
color: white;
padding: 1.5rem;
flex-shrink: 0;
}
.admin-sidebar h2 {
margin: 0 0 1.5rem 0;
font-size: 1.25rem;
color: #667eea;
}
.admin-sidebar nav {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.admin-sidebar a {
color: #aaa;
text-decoration: none;
padding: 0.75rem 1rem;
border-radius: 8px;
transition: all 0.2s;
}
.admin-sidebar a:hover {
background: rgba(255,255,255,0.1);
color: white;
}
.admin-sidebar a.active {
background: #667eea;
color: white;
}
.admin-main {
flex: 1; flex: 1;
padding: 2rem; padding: 2rem;
background: #f5f5f5;
}
.admin-header {
margin-bottom: 2rem;
}
.admin-header h1 {
margin: 0;
color: #333;
}
.admin-header p {
margin: 0.5rem 0 0 0;
color: #666;
} }
.settings-section { .settings-section {
background: white;
border-radius: 8px; border-radius: 8px;
padding: 1.5rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
} }
.settings-section h2 { .settings-section h2 {
margin: 0 0 1rem 0; margin: 0 0 1rem 0;
font-size: 1.1rem; font-size: 1.1rem;
color: #333;
padding-bottom: 0.75rem; padding-bottom: 0.75rem;
border-bottom: 1px solid #eee; border-bottom: 1px solid var(--color-border);
} }
.form-group { .form-group {
@ -198,7 +143,6 @@ import { API_BASE as apiBase } from '../../lib/api';
display: block; display: block;
font-weight: 500; font-weight: 500;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
color: #333;
} }
.form-group input[type="text"], .form-group input[type="text"],
@ -206,15 +150,17 @@ import { API_BASE as apiBase } from '../../lib/api';
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
padding: 0.75rem; padding: 0.75rem;
border: 2px solid #e0e0e0; border: 1px solid var(--color-border);
border-radius: 8px; border-radius: 8px;
font-size: 1rem; font-size: 1rem;
background: var(--color-bg);
color: var(--color-text);
} }
.form-group input:focus, .form-group input:focus,
.form-group select:focus { .form-group select:focus {
outline: none; outline: none;
border-color: #667eea; border-color: var(--color-primary);
} }
.checkbox-label { .checkbox-label {
@ -223,6 +169,7 @@ import { API_BASE as apiBase } from '../../lib/api';
gap: 0.5rem; gap: 0.5rem;
cursor: pointer; cursor: pointer;
font-weight: normal !important; font-weight: normal !important;
color: var(--color-text);
} }
.checkbox-label input { .checkbox-label input {
@ -237,42 +184,21 @@ import { API_BASE as apiBase } from '../../lib/api';
margin-top: 1rem; margin-top: 1rem;
} }
.form-actions button {
padding: 0.75rem 2rem;
background: #667eea;
color: white;
border: none;
border-radius: 8px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: opacity 0.2s;
}
.form-actions button:hover {
opacity: 0.9;
}
.form-actions button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
#save-status { #save-status {
color: #2e7d32; color: var(--color-success);
font-weight: 500; font-weight: 500;
} }
.error-box { .error-box {
background: #ffebee; background: color-mix(in srgb, var(--color-error) 18%, transparent);
color: #c62828; color: var(--color-error);
padding: 1rem; padding: 1rem;
border-radius: 8px; border-radius: 8px;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
#loading { #loading {
color: #666; color: var(--color-text-muted);
padding: 2rem; padding: 2rem;
text-align: center; text-align: center;
} }