Files
pinkudex/mockups/settings-panel-mockups.html
T
2026-05-26 22:46:00 +02:00

824 lines
32 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Pinkudex · Settings Panel — Layout Comparison</title>
<style>
:root {
--bg-0: #0a0710;
--bg-1: #14101e;
--bg-2: #1a1428;
--fg: #e8e6f0;
--fg-dim: #a8a4b8;
--fg-muted: #6e6a80;
--cyan: #22d3ee;
--violet: #a78bfa;
--mint: #34d399;
--coral: #fb7185;
--amber: #fbbf24;
--glass: rgba(255,255,255,0.04);
--glass-strong: rgba(255,255,255,0.08);
--border: rgba(255,255,255,0.08);
--border-strong: rgba(255,255,255,0.18);
}
* { box-sizing: border-box; }
body {
margin: 0;
background: var(--bg-0);
color: var(--fg);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
line-height: 1.45;
}
/* --- Page chrome --- */
.page {
max-width: 1600px;
margin: 0 auto;
padding: 24px;
}
.page-header {
margin-bottom: 24px;
padding: 16px 20px;
border-radius: 16px;
background: linear-gradient(135deg, rgba(34,211,238,0.08), rgba(167,139,250,0.05));
border: 1px solid var(--border);
}
.page-header h1 {
margin: 0 0 8px 0;
font-size: 24px;
font-weight: 600;
letter-spacing: -0.01em;
}
.page-header p {
margin: 0;
color: var(--fg-dim);
font-size: 14px;
}
.nav {
display: flex;
gap: 6px;
margin-bottom: 24px;
flex-wrap: wrap;
}
.nav button {
background: var(--glass);
border: 1px solid var(--border);
color: var(--fg-dim);
padding: 8px 14px;
font-size: 13px;
border-radius: 10px;
cursor: pointer;
font-family: inherit;
transition: all 0.15s;
}
.nav button:hover {
color: var(--fg);
background: var(--glass-strong);
}
.nav button.active {
background: var(--cyan);
color: #000;
border-color: transparent;
font-weight: 600;
}
/* --- Mockup frame --- */
.mockup {
display: none;
}
.mockup.active {
display: block;
}
.mockup-meta {
margin-bottom: 16px;
padding: 14px 18px;
background: var(--glass);
border: 1px solid var(--border);
border-radius: 12px;
}
.mockup-meta h2 {
margin: 0 0 6px 0;
font-size: 16px;
font-weight: 600;
color: var(--cyan);
}
.mockup-meta .pros, .mockup-meta .cons {
font-size: 12px;
color: var(--fg-dim);
margin-top: 4px;
}
.mockup-meta .pros::before { content: "✓ "; color: var(--mint); font-weight: bold; }
.mockup-meta .cons::before { content: "✗ "; color: var(--coral); font-weight: bold; }
/* --- The actual settings drawer mockup --- */
.drawer {
position: relative;
background: rgba(10,7,16,0.96);
border: 1px solid var(--border-strong);
border-radius: 18px;
overflow: hidden;
backdrop-filter: blur(20px);
}
.drawer-narrow { max-width: 560px; margin-left: auto; } /* old panel */
.drawer-wide { max-width: 1024px; margin-left: auto; } /* current */
.drawer-xwide { max-width: 1280px; margin-left: auto; } /* 3-col */
.drawer-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 24px;
border-bottom: 1px solid var(--border);
background: rgba(10,7,16,0.88);
}
.drawer-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 18px;
font-weight: 600;
}
.drawer-title .icon {
width: 18px; height: 18px;
color: var(--cyan);
}
.drawer-close {
width: 32px; height: 32px;
display: grid; place-items: center;
border-radius: 8px;
color: var(--fg-dim);
cursor: pointer;
}
.drawer-body {
padding: 24px;
}
/* --- Section card --- */
.section {
background: var(--glass);
border: 1px solid var(--border);
border-radius: 16px;
padding: 18px;
}
.section + .section { margin-top: 14px; }
.section h3 {
margin: 0 0 12px 0;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--fg-muted);
font-family: ui-monospace, SFMono-Regular, monospace;
font-weight: 500;
}
.section.collapsible h3 {
cursor: pointer;
user-select: none;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 0;
}
.section.collapsible.open h3 { margin-bottom: 12px; }
.section.collapsible .body { display: none; }
.section.collapsible.open .body { display: block; }
.section.collapsible .chevron::after {
content: "▾";
transition: transform 0.15s;
display: inline-block;
}
.section.collapsible:not(.open) .chevron::after {
transform: rotate(-90deg);
}
/* --- Setting rows (toggles, sliders, buttons) --- */
.row {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
padding: 8px 0;
}
.row + .row {
border-top: 1px solid var(--border);
}
.row .label { font-size: 13px; font-weight: 500; }
.row .desc { font-size: 11px; color: var(--fg-muted); margin-top: 2px; line-height: 1.4; }
.row .control { flex-shrink: 0; }
.toggle {
width: 36px; height: 20px;
border-radius: 999px;
background: var(--glass-strong);
border: 1px solid var(--border-strong);
position: relative;
}
.toggle::after {
content: "";
position: absolute;
top: 2px; left: 2px;
width: 14px; height: 14px;
border-radius: 999px;
background: var(--fg-dim);
}
.toggle.on {
background: rgba(34,211,238,0.3);
border-color: var(--cyan);
}
.toggle.on::after {
left: 18px;
background: var(--cyan);
}
.slider-row .slider {
width: 100%;
height: 4px;
background: var(--glass-strong);
border-radius: 2px;
margin-top: 8px;
position: relative;
}
.slider-row .slider::after {
content: "";
position: absolute;
width: 14px; height: 14px;
border-radius: 999px;
background: var(--cyan);
top: -5px;
left: 30%;
}
.slider-row .value {
font-size: 11px;
font-family: ui-monospace, monospace;
color: var(--cyan);
}
.btn {
background: var(--glass);
border: 1px solid var(--border);
color: var(--fg-dim);
padding: 6px 12px;
border-radius: 8px;
font-size: 12px;
cursor: pointer;
font-family: inherit;
}
.btn-primary {
background: rgba(34,211,238,0.15);
color: var(--cyan);
border-color: rgba(34,211,238,0.4);
}
.btn-warn {
background: rgba(251,113,133,0.1);
color: var(--coral);
border-color: rgba(251,113,133,0.3);
}
.btn-amber {
color: var(--amber);
border-color: rgba(251,191,36,0.4);
}
.row.btn-row { padding: 10px 0; }
.row.btn-row .label { font-size: 13px; }
/* --- Stat rows (Library, Storage) --- */
dl.stat-list {
margin: 0;
display: grid;
gap: 8px;
}
dl.stat-list .item {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 12px;
font-size: 13px;
}
dl.stat-list dt { color: var(--fg-dim); }
dl.stat-list dd { margin: 0; font-family: ui-monospace, monospace; font-size: 12px; text-align: right; word-break: break-all; }
/* --- Tabs (mockup 2) --- */
.tabs {
display: flex;
gap: 4px;
border-bottom: 1px solid var(--border);
padding: 0 24px;
background: rgba(10,7,16,0.6);
}
.tabs button {
background: none;
border: none;
color: var(--fg-dim);
padding: 12px 16px;
font-size: 13px;
cursor: pointer;
font-family: inherit;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
}
.tabs button.active {
color: var(--cyan);
border-bottom-color: var(--cyan);
font-weight: 600;
}
/* --- Sidebar nav (mockup 5) --- */
.sidenav-layout {
display: grid;
grid-template-columns: 200px 1fr;
gap: 0;
}
.sidenav {
border-right: 1px solid var(--border);
padding: 18px 12px;
background: rgba(10,7,16,0.5);
}
.sidenav .item {
display: flex;
align-items: center;
gap: 10px;
padding: 8px 12px;
border-radius: 8px;
color: var(--fg-dim);
font-size: 13px;
cursor: pointer;
margin-bottom: 2px;
}
.sidenav .item.active {
background: rgba(34,211,238,0.12);
color: var(--cyan);
}
.sidenav .item:hover:not(.active) {
background: var(--glass);
}
.sidenav .badge {
margin-left: auto;
font-size: 10px;
padding: 1px 6px;
border-radius: 6px;
background: var(--glass-strong);
color: var(--fg-muted);
font-family: ui-monospace, monospace;
}
.sidenav-content {
padding: 24px;
}
/* --- 2-col grid (mockup 1, 4) --- */
.grid-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px;
}
.grid-3 {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 14px;
}
/* --- Section sub-icons --- */
.icon-pill {
display: inline-flex;
align-items: center;
gap: 4px;
color: var(--fg-muted);
}
/* Mini chip used to suggest a count or status */
.pill {
display: inline-flex;
align-items: center;
padding: 1px 8px;
border-radius: 999px;
font-size: 10px;
font-family: ui-monospace, monospace;
background: var(--glass-strong);
color: var(--fg-muted);
}
.pill.cyan {
background: rgba(34,211,238,0.15);
color: var(--cyan);
}
</style>
</head>
<body>
<div class="page">
<header class="page-header">
<h1>Settings panel — six layout options</h1>
<p>Click each option above to see how the same content reorganises. Each mockup uses identical copy and controls so you can compare information density and scan-ability.</p>
</header>
<nav class="nav">
<button data-show="m1" class="active">1. Two-column groups (refined)</button>
<button data-show="m2">2. Top tabs</button>
<button data-show="m3">3. Accordion</button>
<button data-show="m4">4. Three-column wide</button>
<button data-show="m5">5. Sidebar nav</button>
<button data-show="m6">6. Pinned + advanced</button>
</nav>
<!-- ============================================================ -->
<!-- MOCKUP 1: Two-column groups (refined version of current) -->
<!-- ============================================================ -->
<section class="mockup active" id="m1">
<div class="mockup-meta">
<h2>Option 1 — Two-column groups, retighter labels</h2>
<div class="pros">Closest to today; minimal change. Better at-a-glance scan once labels are sharper.</div>
<div class="cons">Right column still longer than left. Maintenance still scrolls within its section.</div>
</div>
<div class="drawer drawer-wide">
<header class="drawer-header">
<div class="drawer-title"><span class="icon"></span> Settings</div>
<div class="drawer-close">×</div>
</header>
<div class="drawer-body">
<div class="grid-2">
<!-- LEFT col -->
<div>
<section class="section">
<h3>Appearance</h3>
<div class="row">
<div><div class="label">Default sort</div><div class="desc">New library views start in this order.</div></div>
<div class="control"><button class="btn">Newest First ▾</button></div>
</div>
<div class="row">
<div><div class="label">Accent — Primary</div><div class="desc">Cyan highlights & active state.</div></div>
<div class="control"><button class="btn">#22D3EE</button></div>
</div>
<div class="row">
<div><div class="label">Accent — Secondary</div><div class="desc">Tag pills & secondary chrome.</div></div>
<div class="control"><button class="btn">#A78BFA</button></div>
</div>
</section>
<section class="section">
<h3>Display</h3>
<div class="row slider-row">
<div><div class="label">Grid columns (Landscape)</div><div class="desc">Cover columns in L-mode.</div></div>
<div class="control"><span class="value">3 per row</span></div>
</div>
<div class="row slider-row">
<div><div class="label">Grid columns (Portrait)</div><div class="desc">Cover columns in P-mode.</div></div>
<div class="control"><span class="value">6 per row</span></div>
</div>
<div class="row">
<div><div class="label">Fade transitions</div><div class="desc">Soft cross-fade on navigation.</div></div>
<div class="control"><div class="toggle on"></div></div>
</div>
<div class="row slider-row">
<div><div class="label">Fade duration</div><div class="desc"></div></div>
<div class="control"><span class="value">400ms</span></div>
</div>
</section>
<section class="section">
<h3>Library</h3>
<dl class="stat-list">
<div class="item"><dt>Images</dt><dd>422</dd></div>
<div class="item"><dt>Tags</dt><dd>38</dd></div>
<div class="item"><dt>Collections</dt><dd>12</dd></div>
</dl>
</section>
<section class="section">
<h3>Storage</h3>
<dl class="stat-list">
<div class="item"><dt>Library folder</dt><dd>D:/.../library</dd></div>
<div class="item"><dt>Database</dt><dd>D:/.../data/library.db</dd></div>
</dl>
</section>
</div>
<!-- RIGHT col -->
<div>
<section class="section">
<h3>Trash & deletion</h3>
<div class="row">
<div><div class="label">Use recycle bin</div><div class="desc">Soft-delete to bin instead of permanent.</div></div>
<div class="control"><div class="toggle on"></div></div>
</div>
<div class="row slider-row">
<div><div class="label">Trash retention</div><div class="desc">Auto-purge after N days. 0 = never.</div></div>
<div class="control"><span class="value">30 days</span></div>
</div>
<div class="row">
<div><div class="label">Delete files from disk</div><div class="desc">When emptying trash, unlink originals + thumbs.</div></div>
<div class="control"><div class="toggle on"></div></div>
</div>
</section>
<section class="section">
<h3>Maintenance</h3>
<div class="row btn-row"><div><div class="label">Re-organize library</div><div class="desc">Move covers into letter buckets.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Regenerate thumbnails</div><div class="desc">Rebuild WebP previews. Migrates legacy filenames.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Find undersized covers</div><div class="desc">Flag covers under 750×500.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Purge orphan files</div><div class="desc">Remove on-disk files not referenced by DB.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Clear cache</div><div class="desc">Drop all server-side cached pages.</div></div><div class="control"><button class="btn">Clear</button></div></div>
</section>
<section class="section">
<h3>Backup</h3>
<div class="row btn-row">
<div><div class="label">Export & import</div><div class="desc">JSON dump of all metadata. Image files copy separately.</div></div>
<div class="control" style="display:flex; gap:6px;">
<button class="btn btn-primary">Export</button>
<button class="btn btn-amber">Import…</button>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================================ -->
<!-- MOCKUP 2: Top tabs -->
<!-- ============================================================ -->
<section class="mockup" id="m2">
<div class="mockup-meta">
<h2>Option 2 — Top tabs (General · Display · Trash · Maintenance · Backup · About)</h2>
<div class="pros">Tightest visual: only one section visible at a time. No scroll for any single tab.</div>
<div class="cons">More clicks; can hide settings you forgot exist. Best when settings rarely-used overall.</div>
</div>
<div class="drawer drawer-narrow">
<header class="drawer-header">
<div class="drawer-title"><span class="icon"></span> Settings</div>
<div class="drawer-close">×</div>
</header>
<div class="tabs">
<button>General</button>
<button class="active">Display</button>
<button>Trash</button>
<button>Maintenance</button>
<button>Backup</button>
<button>About</button>
</div>
<div class="drawer-body">
<section class="section">
<h3>Display</h3>
<div class="row slider-row"><div><div class="label">Grid columns (Landscape)</div><div class="desc">Cover columns in L-mode.</div></div><div class="control"><span class="value">3 per row</span></div></div>
<div class="row slider-row"><div><div class="label">Grid columns (Portrait)</div><div class="desc">Cover columns in P-mode.</div></div><div class="control"><span class="value">6 per row</span></div></div>
<div class="row"><div><div class="label">Fade transitions</div><div class="desc">Soft cross-fade on navigation.</div></div><div class="control"><div class="toggle on"></div></div></div>
<div class="row slider-row"><div><div class="label">Fade duration</div><div class="desc">How long the fade lasts.</div></div><div class="control"><span class="value">400ms</span></div></div>
</section>
<p style="font-size:12px; color: var(--fg-muted); margin-top: 16px; padding: 0 4px;">
(Showing one tab at a time — switch tabs above for the others.)
</p>
</div>
</div>
</section>
<!-- ============================================================ -->
<!-- MOCKUP 3: Accordion -->
<!-- ============================================================ -->
<section class="mockup" id="m3">
<div class="mockup-meta">
<h2>Option 3 — Accordion / collapsible sections</h2>
<div class="pros">Skim all section names at once; expand only what you need. Section count stays visible.</div>
<div class="cons">Extra click per section. Scroll re-flows when sections open/close.</div>
</div>
<div class="drawer drawer-narrow">
<header class="drawer-header">
<div class="drawer-title"><span class="icon"></span> Settings</div>
<div class="drawer-close">×</div>
</header>
<div class="drawer-body">
<section class="section collapsible open">
<h3>Defaults <span class="chevron"></span></h3>
<div class="body">
<div class="row"><div><div class="label">Default sort</div></div><div class="control"><button class="btn">Newest First ▾</button></div></div>
</div>
</section>
<section class="section collapsible">
<h3>Theme <span class="chevron"></span></h3>
</section>
<section class="section collapsible open">
<h3>Display <span class="chevron"></span></h3>
<div class="body">
<div class="row slider-row"><div><div class="label">Grid columns (Landscape)</div></div><div class="control"><span class="value">3 per row</span></div></div>
<div class="row slider-row"><div><div class="label">Grid columns (Portrait)</div></div><div class="control"><span class="value">6 per row</span></div></div>
<div class="row"><div><div class="label">Fade transitions</div></div><div class="control"><div class="toggle on"></div></div></div>
</div>
</section>
<section class="section collapsible">
<h3>Trash & deletion <span class="chevron"></span></h3>
</section>
<section class="section collapsible">
<h3>Maintenance <span class="pill cyan">5</span> <span class="chevron"></span></h3>
</section>
<section class="section collapsible">
<h3>Backup <span class="chevron"></span></h3>
</section>
<section class="section collapsible">
<h3>Library & storage <span class="chevron"></span></h3>
</section>
</div>
</div>
</section>
<!-- ============================================================ -->
<!-- MOCKUP 4: Three-column wide -->
<!-- ============================================================ -->
<section class="mockup" id="m4">
<div class="mockup-meta">
<h2>Option 4 — Three columns at full width</h2>
<div class="pros">Almost everything visible without scrolling. Great on a wide monitor.</div>
<div class="cons">Drawer takes up more screen real estate. Awkward on smaller laptops.</div>
</div>
<div class="drawer drawer-xwide">
<header class="drawer-header">
<div class="drawer-title"><span class="icon"></span> Settings</div>
<div class="drawer-close">×</div>
</header>
<div class="drawer-body">
<div class="grid-3">
<!-- COL 1 -->
<div>
<section class="section">
<h3>Defaults & Theme</h3>
<div class="row"><div><div class="label">Default sort</div></div><div class="control"><button class="btn">Newest First ▾</button></div></div>
<div class="row"><div><div class="label">Accent primary</div></div><div class="control"><button class="btn">#22D3EE</button></div></div>
<div class="row"><div><div class="label">Accent secondary</div></div><div class="control"><button class="btn">#A78BFA</button></div></div>
</section>
<section class="section">
<h3>Display</h3>
<div class="row slider-row"><div><div class="label">Grid cols — Landscape</div></div><div class="control"><span class="value">3</span></div></div>
<div class="row slider-row"><div><div class="label">Grid cols — Portrait</div></div><div class="control"><span class="value">6</span></div></div>
<div class="row"><div><div class="label">Fade transitions</div></div><div class="control"><div class="toggle on"></div></div></div>
<div class="row slider-row"><div><div class="label">Fade duration</div></div><div class="control"><span class="value">400ms</span></div></div>
</section>
</div>
<!-- COL 2 -->
<div>
<section class="section">
<h3>Trash & deletion</h3>
<div class="row"><div><div class="label">Use recycle bin</div></div><div class="control"><div class="toggle on"></div></div></div>
<div class="row slider-row"><div><div class="label">Retention</div></div><div class="control"><span class="value">30d</span></div></div>
<div class="row"><div><div class="label">Delete from disk</div></div><div class="control"><div class="toggle on"></div></div></div>
</section>
<section class="section">
<h3>Library</h3>
<dl class="stat-list">
<div class="item"><dt>Images</dt><dd>422</dd></div>
<div class="item"><dt>Tags</dt><dd>38</dd></div>
<div class="item"><dt>Collections</dt><dd>12</dd></div>
</dl>
</section>
<section class="section">
<h3>Storage</h3>
<dl class="stat-list">
<div class="item"><dt>Library</dt><dd>D:/.../library</dd></div>
<div class="item"><dt>Database</dt><dd>D:/.../library.db</dd></div>
</dl>
</section>
</div>
<!-- COL 3 -->
<div>
<section class="section">
<h3>Maintenance</h3>
<div class="row btn-row"><div><div class="label">Re-organize</div><div class="desc">Letter buckets.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Regen thumbnails</div><div class="desc">Rebuild WebP.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Find undersized</div><div class="desc">Flag &lt;750×500.</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Purge orphans</div></div><div class="control"><button class="btn">Scan</button></div></div>
<div class="row btn-row"><div><div class="label">Clear cache</div></div><div class="control"><button class="btn">Clear</button></div></div>
</section>
<section class="section">
<h3>Backup</h3>
<div class="row btn-row">
<div><div class="label">JSON metadata dump</div><div class="desc">Image files copy separately.</div></div>
</div>
<div style="display:flex; gap:6px; margin-top: 6px;">
<button class="btn btn-primary">Export</button>
<button class="btn btn-amber">Import…</button>
</div>
</section>
</div>
</div>
</div>
</div>
</section>
<!-- ============================================================ -->
<!-- MOCKUP 5: Sidebar nav -->
<!-- ============================================================ -->
<section class="mockup" id="m5">
<div class="mockup-meta">
<h2>Option 5 — Vertical sidebar nav inside the panel (macOS / VSCode style)</h2>
<div class="pros">Beautiful focused single-section view. Sidebar count badges hint at activity.</div>
<div class="cons">More clicks. Padding-heavy at narrow drawer width — needs the wide drawer.</div>
</div>
<div class="drawer drawer-wide">
<header class="drawer-header">
<div class="drawer-title"><span class="icon"></span> Settings</div>
<div class="drawer-close">×</div>
</header>
<div class="sidenav-layout">
<nav class="sidenav">
<div class="item">⊕ General</div>
<div class="item active">▭ Display</div>
<div class="item">⌫ Trash <span class="badge">3</span></div>
<div class="item">🔧 Maintenance <span class="badge">5</span></div>
<div class="item">⤓ Backup</div>
<div class="item">📚 Library stats</div>
<div class="item">📁 Storage</div>
</nav>
<div class="sidenav-content">
<h2 style="margin: 0 0 4px 0; font-size: 18px;">Display</h2>
<p style="margin: 0 0 18px 0; font-size: 13px; color: var(--fg-muted);">Grid density, transitions, and the front-only portrait toggle.</p>
<section class="section">
<h3>Grid columns</h3>
<div class="row slider-row"><div><div class="label">Landscape (full cover)</div><div class="desc">L-mode card count.</div></div><div class="control"><span class="value">3 per row</span></div></div>
<div class="row slider-row"><div><div class="label">Portrait (front-only)</div><div class="desc">P-mode card count.</div></div><div class="control"><span class="value">6 per row</span></div></div>
</section>
<section class="section">
<h3>Animations</h3>
<div class="row"><div><div class="label">Fade transitions</div><div class="desc">Soft cross-fade on navigation.</div></div><div class="control"><div class="toggle on"></div></div></div>
<div class="row slider-row"><div><div class="label">Fade duration</div></div><div class="control"><span class="value">400ms</span></div></div>
</section>
</div>
</div>
</div>
</section>
<!-- ============================================================ -->
<!-- MOCKUP 6: Pinned + Advanced -->
<!-- ============================================================ -->
<section class="mockup" id="m6">
<div class="mockup-meta">
<h2>Option 6 — Pinned common settings, advanced collapsed by default</h2>
<div class="pros">Surfaces 90% of what you use; hides the destructive/rarely-used 10%. Lowest cognitive load.</div>
<div class="cons">"Advanced" implies expert-only — folks who'd benefit from re-organize won't go looking.</div>
</div>
<div class="drawer drawer-narrow">
<header class="drawer-header">
<div class="drawer-title"><span class="icon"></span> Settings</div>
<div class="drawer-close">×</div>
</header>
<div class="drawer-body">
<section class="section">
<h3>Common</h3>
<div class="row"><div><div class="label">Default sort</div></div><div class="control"><button class="btn">Newest First ▾</button></div></div>
<div class="row slider-row"><div><div class="label">Grid cols — Landscape</div></div><div class="control"><span class="value">3</span></div></div>
<div class="row slider-row"><div><div class="label">Grid cols — Portrait</div></div><div class="control"><span class="value">6</span></div></div>
<div class="row"><div><div class="label">Use recycle bin</div></div><div class="control"><div class="toggle on"></div></div></div>
<div class="row"><div><div class="label">Fade transitions</div></div><div class="control"><div class="toggle on"></div></div></div>
<div class="row"><div><div class="label">Accent — Primary</div></div><div class="control"><button class="btn">#22D3EE</button></div></div>
</section>
<section class="section collapsible">
<h3>Advanced — Theme, accents, fade duration <span class="chevron"></span></h3>
</section>
<section class="section collapsible">
<h3>Maintenance — Reorganize, regen, scans <span class="pill cyan">5</span> <span class="chevron"></span></h3>
</section>
<section class="section collapsible">
<h3>Backup — Export & import <span class="chevron"></span></h3>
</section>
<section class="section collapsible">
<h3>Library & storage info <span class="chevron"></span></h3>
</section>
</div>
</div>
</section>
</div>
<script>
document.querySelectorAll(".nav button").forEach((btn) => {
btn.addEventListener("click", () => {
const target = btn.dataset.show;
document.querySelectorAll(".nav button").forEach((b) => b.classList.toggle("active", b === btn));
document.querySelectorAll(".mockup").forEach((m) => m.classList.toggle("active", m.id === target));
});
});
// Tabs in mockup 2
document.querySelectorAll(".tabs button").forEach((b) => {
b.addEventListener("click", () => {
b.parentElement.querySelectorAll("button").forEach((x) => x.classList.toggle("active", x === b));
});
});
// Accordion toggle
document.querySelectorAll(".section.collapsible h3").forEach((h) => {
h.addEventListener("click", () => {
h.parentElement.classList.toggle("open");
});
});
</script>
</body>
</html>