Files
pinkudex/mockups/selection-bar-options.html
2026-05-26 22:46:00 +02:00

352 lines
13 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Pinkudex — Selection Bar Layout Options</title>
<style>
:root {
--bg-0: #0e0a14;
--bg-1: #18121f;
--fg: #ece6f5;
--fg-dim: #b9b1c6;
--fg-muted: #7d7388;
--cyan: #4dd9e6;
--violet: #b87cf6;
--coral: #ff7a8a;
--mint: #79e6b2;
--amber: #fbbf24;
--glass-border: #2a2434;
--glass-border-strong: #3d3548;
--glass: rgba(40, 32, 56, 0.5);
--glass-strong: rgba(56, 46, 76, 0.7);
}
* { box-sizing: border-box; }
html, body {
margin: 0;
background: radial-gradient(1200px 600px at 70% -10%, rgba(184,124,246,0.08), transparent),
radial-gradient(800px 500px at 10% 110%, rgba(77,217,230,0.06), transparent),
var(--bg-0);
color: var(--fg);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
font-size: 14px;
}
.page { max-width: 1200px; margin: 0 auto; padding: 32px 24px 96px; }
h1 { font-size: 26px; margin: 0 0 8px; font-weight: 600; }
.lede { color: var(--fg-dim); margin: 0 0 32px; max-width: 760px; line-height: 1.5; }
h2 {
margin: 32px 0 4px;
font-size: 13px;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--cyan);
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.desc { color: var(--fg-dim); font-size: 13px; margin: 0 0 12px; max-width: 820px; line-height: 1.5; }
.stage {
background: var(--bg-1);
border: 1px solid var(--glass-border);
border-radius: 16px;
padding: 28px 20px;
margin-bottom: 24px;
position: relative;
min-height: 120px;
display: flex;
align-items: center;
justify-content: center;
}
/* selection bar — mimics SelectionBar.tsx */
.sb {
border: 1px solid var(--glass-border-strong);
background: color-mix(in oklch, var(--bg-0) 85%, transparent);
backdrop-filter: blur(20px);
border-radius: 16px;
padding: 10px 16px;
display: inline-flex;
align-items: center;
gap: 12px;
box-shadow: 0 12px 30px rgba(0,0,0,0.4);
}
.sel-count {
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.sel-count .n { color: var(--cyan); font-weight: 600; }
.sel-count .l { color: var(--fg-dim); }
.sep { width: 1px; height: 20px; background: var(--glass-border); }
.btn {
display: inline-flex; align-items: center; gap: 6px;
padding: 6px 12px;
border-radius: 8px;
border: 1px solid var(--glass-border);
background: var(--glass);
color: var(--fg-dim);
font-size: 12px;
cursor: default;
}
.btn svg { width: 13px; height: 13px; }
.btn-mint { background: rgba(121,230,178,0.15); border-color: rgba(121,230,178,0.4); color: var(--mint); }
.btn-coral { background: rgba(255,122,138,0.15); border-color: rgba(255,122,138,0.4); color: var(--coral); }
.btn-cyan { background: rgba(77,217,230,0.15); border-color: rgba(77,217,230,0.4); color: var(--cyan); }
.btn-amber { background: rgba(251,191,36,0.15); border-color: rgba(251,191,36,0.4); color: var(--amber); }
.btn-icon-only { padding: 6px 8px; }
.btn .caret { font-size: 9px; opacity: 0.7; }
.btn-clear { color: var(--fg-muted); border-color: transparent; background: transparent; }
.pros-cons {
display: flex; gap: 12px; margin-top: 12px; font-size: 12px;
}
.pros, .cons {
flex: 1; padding: 8px 10px; border-radius: 8px;
border: 1px solid var(--glass-border);
}
.pros { border-color: rgba(121,230,178,0.2); }
.cons { border-color: rgba(255,122,138,0.2); }
.pros strong { color: var(--mint); font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; }
.cons strong { color: var(--coral); font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; }
.pros ul, .cons ul { margin: 4px 0 0; padding-left: 16px; color: var(--fg-dim); }
.pros li, .cons li { margin: 2px 0; }
/* Mock dropdown */
.menu {
position: absolute;
top: calc(100% + 6px);
right: 0;
background: var(--bg-0);
border: 1px solid var(--glass-border-strong);
border-radius: 10px;
padding: 4px;
width: 180px;
box-shadow: 0 16px 40px rgba(0,0,0,0.7);
z-index: 5;
}
.menu .row {
display: flex; align-items: center; gap: 8px;
padding: 7px 10px;
border-radius: 6px;
color: var(--fg-dim);
font-size: 13px;
}
.menu .row svg { width: 14px; height: 14px; }
.menu .row:hover { background: var(--glass); color: var(--fg); }
.menu .row.mint { color: var(--mint); }
.menu .row.cyan { color: var(--cyan); }
.menu .row.amber { color: var(--amber); }
.menu .row.muted { color: var(--fg-muted); }
.menu .divider { height: 1px; background: var(--glass-border); margin: 4px 0; }
.has-menu { position: relative; }
.stage-label {
position: absolute; top: 8px; left: 12px;
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--fg-muted);
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
code {
background: var(--glass); padding: 1px 5px; border-radius: 4px;
font-size: 12px; color: var(--cyan);
}
</style>
</head>
<body>
<div class="page">
<h1>Selection Bar — Bulk VIP / Favorite Options</h1>
<p class="lede">
Five layouts for adding bulk VIP / Favorite to the selection bar without it becoming a 7-button mess.
All assume 2 covers selected. Dropdowns are shown "open" inline so you can see their content.
</p>
<!-- Current -->
<h2>Current — for reference</h2>
<p class="desc">5 buttons. No way to bulk Mark / Favorite.</p>
<div class="stage">
<div class="stage-label">Current</div>
<div class="sb">
<span class="sel-count"><span class="n">2</span><span class="l"> selected</span></span>
<div class="sep"></div>
<span class="btn">📋 All (26)</span>
<span class="btn btn-mint">👁 Watched</span>
<span class="btn">🚫 Unwatched</span>
<span class="btn btn-coral">🗑 Delete</span>
<span class="btn btn-clear">✕ Clear</span>
</div>
</div>
<!-- Option A -->
<h2>Option A — Just add two more buttons</h2>
<p class="desc">Straightforward: VIP and Favorite chips alongside Watched/Unwatched. Quick and obvious; bar gets crowded.</p>
<div class="stage">
<div class="stage-label">A · 7 buttons</div>
<div class="sb">
<span class="sel-count"><span class="n">2</span><span class="l"> selected</span></span>
<div class="sep"></div>
<span class="btn">📋 All (26)</span>
<span class="btn btn-mint">👁 Watched</span>
<span class="btn">🚫 Unwatched</span>
<span class="btn btn-cyan">💎 VIP</span>
<span class="btn btn-amber">★ Favorite</span>
<span class="btn btn-coral">🗑 Delete</span>
<span class="btn btn-clear">✕ Clear</span>
</div>
<div class="pros-cons">
<div class="pros"><strong>Pros</strong><ul>
<li>One click for everything</li>
<li>All actions visible</li>
</ul></div>
<div class="cons"><strong>Cons</strong><ul>
<li>7 buttons — visually busy</li>
<li>Doesn't scale to more bulk actions</li>
</ul></div>
</div>
</div>
<!-- Option B -->
<h2>Option B — Collapse all toggles into one <code>Set ▾</code> menu <span style="color:var(--fg-muted)">(my recommendation)</span></h2>
<p class="desc">Single "Set ▾" dropdown houses Watched/Unwatched and VIP/Favorite/Unmark. Bar drops to 4 buttons.</p>
<div class="stage" style="padding-top: 60px; padding-bottom: 60px;">
<div class="stage-label">B · 4 buttons + 1 menu</div>
<div class="sb">
<span class="sel-count"><span class="n">2</span><span class="l"> selected</span></span>
<div class="sep"></div>
<span class="btn">📋 All (26)</span>
<span class="has-menu">
<span class="btn">⚙ Set <span class="caret"></span></span>
<div class="menu">
<div class="row mint">👁 Watched</div>
<div class="row">🚫 Unwatched</div>
<div class="divider"></div>
<div class="row cyan">💎 VIP</div>
<div class="row amber">★ Favorite</div>
<div class="row muted">⊘ Unmark</div>
</div>
</span>
<span class="btn btn-coral">🗑 Delete</span>
<span class="btn btn-clear">✕ Clear</span>
</div>
<div class="pros-cons">
<div class="pros"><strong>Pros</strong><ul>
<li>Cleanest bar</li>
<li>Scales to more actions (e.g. "Add to Collection…", "Tag…")</li>
<li>Consistent with FilterBar's dropdown pattern</li>
</ul></div>
<div class="cons"><strong>Cons</strong><ul>
<li>2 clicks for Watched (was 1)</li>
<li>Bulk Watched is your most-frequent action — extra click hurts</li>
</ul></div>
</div>
</div>
<!-- Option C -->
<h2>Option C — Keep Watched/Unwatched, add only <code>Mark ▾</code></h2>
<p class="desc">Preserves one-click Watched. Adds a single "Mark ▾" dropdown for VIP / Favorite / Unmark. 6 buttons.</p>
<div class="stage" style="padding-top: 60px; padding-bottom: 60px;">
<div class="stage-label">C · 5 buttons + 1 menu</div>
<div class="sb">
<span class="sel-count"><span class="n">2</span><span class="l"> selected</span></span>
<div class="sep"></div>
<span class="btn">📋 All (26)</span>
<span class="btn btn-mint">👁 Watched</span>
<span class="btn">🚫 Unwatched</span>
<span class="has-menu">
<span class="btn">🔖 Mark <span class="caret"></span></span>
<div class="menu">
<div class="row cyan">💎 VIP</div>
<div class="row amber">★ Favorite</div>
<div class="row muted">⊘ Unmark</div>
</div>
</span>
<span class="btn btn-coral">🗑 Delete</span>
<span class="btn btn-clear">✕ Clear</span>
</div>
<div class="pros-cons">
<div class="pros"><strong>Pros</strong><ul>
<li>One-click Watched preserved (your most-used)</li>
<li>Mark grouped logically (VIP/Favorite are one axis)</li>
</ul></div>
<div class="cons"><strong>Cons</strong><ul>
<li>Still 6 visible buttons — middle ground</li>
<li>Two click-patterns: direct vs dropdown</li>
</ul></div>
</div>
</div>
<!-- Option D -->
<h2>Option D — Single <code>Actions ▾</code> kebab</h2>
<p class="desc">Hide everything except Delete behind one "Actions" menu. Most minimal but loses quick-access to Watched.</p>
<div class="stage" style="padding-top: 60px; padding-bottom: 100px;">
<div class="stage-label">D · 3 buttons + 1 menu</div>
<div class="sb">
<span class="sel-count"><span class="n">2</span><span class="l"> selected</span></span>
<div class="sep"></div>
<span class="btn">📋 All (26)</span>
<span class="has-menu">
<span class="btn">⋯ Actions <span class="caret"></span></span>
<div class="menu" style="width: 200px;">
<div class="row mint">👁 Mark Watched</div>
<div class="row">🚫 Mark Unwatched</div>
<div class="divider"></div>
<div class="row cyan">💎 Set VIP</div>
<div class="row amber">★ Set Favorite</div>
<div class="row muted">⊘ Unmark</div>
</div>
</span>
<span class="btn btn-coral">🗑 Delete</span>
<span class="btn btn-clear">✕ Clear</span>
</div>
<div class="pros-cons">
<div class="pros"><strong>Pros</strong><ul>
<li>Smallest bar — 4 visible items</li>
<li>Easy to add more actions (Add to Collection, Tag, Export, …)</li>
</ul></div>
<div class="cons"><strong>Cons</strong><ul>
<li>2 clicks for any state-change action</li>
<li>Discoverability hit — new users won't know the menu's there</li>
</ul></div>
</div>
</div>
<!-- Option E -->
<h2>Option E — Icon-only Watched buttons + <code>Mark ▾</code></h2>
<p class="desc">Trim Watched/Unwatched to bare icons (with tooltip), add Mark ▾. Saves horizontal space without hiding actions.</p>
<div class="stage" style="padding-top: 60px; padding-bottom: 60px;">
<div class="stage-label">E · 6 buttons (compact) + 1 menu</div>
<div class="sb">
<span class="sel-count"><span class="n">2</span><span class="l"> selected</span></span>
<div class="sep"></div>
<span class="btn">📋 All (26)</span>
<span class="btn btn-mint btn-icon-only" title="Mark watched">👁</span>
<span class="btn btn-icon-only" title="Mark unwatched">🚫</span>
<span class="has-menu">
<span class="btn">🔖 Mark <span class="caret"></span></span>
<div class="menu">
<div class="row cyan">💎 VIP</div>
<div class="row amber">★ Favorite</div>
<div class="row muted">⊘ Unmark</div>
</div>
</span>
<span class="btn btn-coral">🗑 Delete</span>
<span class="btn btn-clear">✕ Clear</span>
</div>
<div class="pros-cons">
<div class="pros"><strong>Pros</strong><ul>
<li>One-click Watched preserved, takes less space</li>
<li>Mark dropdown adds bulk VIP/Favorite cleanly</li>
</ul></div>
<div class="cons"><strong>Cons</strong><ul>
<li>Icons less discoverable than labels</li>
<li>Mixed style (label + icon-only on the same row)</li>
</ul></div>
</div>
</div>
<p style="margin-top: 24px; font-size: 11px; color: var(--fg-muted); font-family: ui-monospace;">
Pick based on what you do most: B if you mark covers more than you watch, C/E if you watch more than mark.
</p>
</div>
</body>
</html>