feat: settings modal with database export and import
Adds a gear button to the nav that opens a settings modal with: - Export: GET /api/export returns all instances as a JSON backup file with a Content-Disposition attachment header - Import: POST /api/import validates and bulk-replaces all instances; client uses FileReader to POST the parsed JSON, with a confirm dialog before destructive replace Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
38
css/app.css
38
css/app.css
@@ -70,6 +70,19 @@ nav {
|
||||
|
||||
.nav-sep { flex: 1; }
|
||||
|
||||
.nav-btn {
|
||||
background: none;
|
||||
border: 1px solid var(--border2);
|
||||
color: var(--text2);
|
||||
border-radius: 6px;
|
||||
padding: 4px 8px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
margin-left: 10px;
|
||||
line-height: 1;
|
||||
}
|
||||
.nav-btn:hover { border-color: var(--accent); color: var(--accent); }
|
||||
|
||||
.nav-divider { color: var(--border2); }
|
||||
|
||||
.nav-status {
|
||||
@@ -615,6 +628,31 @@ select:focus { border-color: var(--accent); }
|
||||
|
||||
.confirm-actions { display: flex; justify-content: flex-end; gap: 10px; }
|
||||
|
||||
/* ── SETTINGS MODAL ── */
|
||||
.settings-section { padding: 16px 0; border-bottom: 1px solid var(--border); }
|
||||
.settings-section:last-child { border-bottom: none; padding-bottom: 0; }
|
||||
.settings-section-title {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
color: var(--text3);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.settings-desc { font-size: 12px; color: var(--text2); margin: 0 0 14px; line-height: 1.6; }
|
||||
.import-row { display: flex; gap: 10px; align-items: center; }
|
||||
.import-file-input { flex: 1; }
|
||||
|
||||
.btn-secondary {
|
||||
background: var(--bg3);
|
||||
border-color: var(--border2);
|
||||
color: var(--text);
|
||||
}
|
||||
.btn-secondary:hover { border-color: var(--accent); color: var(--accent); }
|
||||
|
||||
.btn-danger { background: var(--red2); border-color: var(--red); color: var(--text); }
|
||||
.btn-danger:hover { background: var(--red); }
|
||||
|
||||
/* ── SCROLLBAR ── */
|
||||
::-webkit-scrollbar { width: 6px; }
|
||||
::-webkit-scrollbar-track { background: var(--bg); }
|
||||
|
||||
Reference in New Issue
Block a user