Files
pinkudex/mockups/actress-spacing-mockup.html
2026-05-26 22:46:00 +02:00

322 lines
18 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Actress Page — Spacing Pass (Layout Untouched)</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
:root {
--color-bg-0: oklch(0.13 0.025 280);
--color-bg-1: oklch(0.17 0.04 285);
--color-fg: oklch(0.97 0.01 280);
--color-fg-dim: oklch(0.72 0.025 280);
--color-fg-muted: oklch(0.55 0.02 280);
--color-glass: color-mix(in oklch, white 6%, transparent);
--color-glass-strong: color-mix(in oklch, white 10%, transparent);
--color-glass-border: color-mix(in oklch, white 14%, transparent);
--color-cyan: oklch(0.82 0.16 200);
--color-violet: oklch(0.72 0.22 305);
--color-mint: oklch(0.80 0.16 155);
--color-coral: oklch(0.72 0.20 25);
--color-amber: oklch(0.84 0.14 80);
--spacing-card: 15px;
--spacing-label: 7px;
}
body {
background: var(--color-bg-0);
color: var(--color-fg);
font-family: ui-sans-serif, system-ui, -apple-system, sans-serif;
}
.glass { background: var(--color-glass); border: 1px solid var(--color-glass-border); }
.label { font-family: ui-monospace, monospace; font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--color-fg-muted); margin-bottom: 8px; }
.label.after { color: var(--color-cyan); }
.why { font-size: 12px; color: var(--color-fg-muted); }
.pg {
background: oklch(0.10 0.025 280);
border: 1px solid var(--color-glass-border);
border-radius: 12px;
overflow: hidden;
}
.pg-h {
padding: 12px 16px;
background: oklch(0.20 0.04 285);
border-bottom: 1px solid var(--color-glass-border);
font-family: ui-monospace, monospace;
font-size: 12px;
color: var(--color-fg-dim);
display: flex; justify-content: space-between; align-items: center;
}
.pg-h .tag { color: var(--color-cyan); font-weight: 600; }
.pg-body { padding: 18px; }
.pill-sm {
display: inline-flex; align-items: center; gap: 6px;
padding: 0 12px; height: 28px;
border-radius: 999px; font-size: 12px; font-family: ui-monospace, monospace;
border: 1px solid var(--color-glass-border); color: var(--color-fg-dim);
background: var(--color-glass);
}
.pill-sm.cyan-fill { background: var(--color-cyan); color: black; border-color: transparent; font-weight: 600; }
.pill-sm.amber { background: var(--color-amber); color: black; border-color: transparent; font-weight: 600; }
/* portrait card placeholder */
.pcard {
aspect-ratio: 2/3;
background: linear-gradient(135deg, oklch(0.30 0.05 290), oklch(0.20 0.04 280));
border: 1px solid var(--color-glass-border);
border-radius: 8px;
position: relative;
}
.pcard .name { position: absolute; bottom: 8px; left: 10px; right: 10px; font-size: 12px; color: var(--color-fg); font-weight: 600; }
.ltr-bar { display: flex; gap: 4px; width: 100%; }
.ltr-bar > button {
flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
padding: 8px 0; border-radius: 8px;
border: 1px solid var(--color-glass-border);
background: var(--color-glass);
font-family: ui-monospace, monospace;
color: var(--color-fg-muted);
}
.ltr-bar > button.active { background: var(--color-cyan); color: black; border-color: transparent; }
.ltr-bar > button.disabled { opacity: 0.4; }
.ltr-bar > button .big { font-size: 14px; font-weight: 600; }
.ltr-bar > button .sm { font-size: 9px; opacity: 0.7; }
</style>
</head>
<body class="space-y-6 max-w-[1600px] mx-auto p-6">
<header class="space-y-1">
<h1 class="text-2xl font-semibold tracking-tight">Actress Page · Spacing Pass</h1>
<p class="why max-w-[820px]">
Same layout as <code class="text-[var(--color-cyan)]">app/actress/page.tsx</code> + <code class="text-[var(--color-cyan)]">ActressDirectory.tsx</code>: title row + create bar, search field + bulk button, category pills, letter bar, then the cast grid (or section-by-letter when a letter is active). Only padding/margin changes — no components moved.
</p>
</header>
<!-- ====================================================================
Audit table
==================================================================== -->
<section class="glass rounded-2xl" style="padding: var(--spacing-card);">
<div class="label">Spacing changes only — 4 lines total</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-x-6 gap-y-2 text-[12px] font-mono text-[var(--color-fg-dim)]">
<div>1 · page-level empty state</div>
<div><code class="text-[var(--color-fg-muted)]">p-12 · mb-2</code><code class="text-[var(--color-cyan)]">p-card · mb-label</code></div>
<div>2 · "no matches" empty state in directory</div>
<div><code class="text-[var(--color-fg-muted)]">p-12</code><code class="text-[var(--color-cyan)]">p-card</code></div>
<div>3 · letter-bar wrapper top margin</div>
<div><code class="text-[var(--color-fg-muted)]">mt-[13px]</code> 13 px → <code class="text-[var(--color-cyan)]">mt-4</code> 16 px</div>
<div>4 · letter-bar wrapper bottom margin</div>
<div><code class="text-[var(--color-fg-muted)]">mb-5</code> 20 px → <code class="text-[var(--color-cyan)]">mb-4</code> 16 px</div>
</div>
<p class="why mt-3">
The current letter-bar margins (13 / 20) are off-rhythm with everything else on the page (which uses 16). Bringing them to 16/16 matches the row above (search + bulk row mb-4) without altering layout.
</p>
<p class="why mt-2">
<strong>Untouched:</strong> page outer <code class="text-[var(--color-cyan)]">px-6 py-6</code>, title-to-create-bar row <code class="text-[var(--color-cyan)]">mb-6</code>, search row <code class="text-[var(--color-cyan)]">mb-4</code>, category-pill gaps <code class="text-[var(--color-cyan)]">gap-1.5</code>, grid gap <code class="text-[var(--color-cyan)]">gap-4</code>, per-letter section spacing <code class="text-[var(--color-cyan)]">space-y-8</code>.
</p>
</section>
<!-- ====================================================================
BEFORE
==================================================================== -->
<div class="pg">
<div class="pg-h"><span><span class="tag">BEFORE</span> · current Actress page</span><span>app/actress/page.tsx + ActressDirectory.tsx</span></div>
<div class="pg-body">
<!-- Title row (mb-6) -->
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px;">
<div>
<h1 class="text-3xl font-semibold tracking-tight">Cast</h1>
<p class="text-[var(--color-fg-dim)] mt-1 text-sm">324 total</p>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
<span class="pill-sm" style="background: var(--color-glass-strong); height: 32px;">+ Create actress</span>
<span class="pill-sm" style="height: 32px;">⤓ Import…</span>
</div>
</div>
<!-- Search + bulk row (mb-4) -->
<div style="display: flex; align-items: center; gap: 12px; margin-bottom: 16px;">
<div class="glass rounded-lg" style="flex: 1; padding: 8px 12px; padding-left: 32px; font-size: 13px; color: var(--color-fg-muted); position: relative;">
<span style="position: absolute; left: 12px; top: 50%; transform: translateY(-50%); opacity: 0.6;"></span>
Filter Cast — Name, Reversed, Alt Names…
</div>
<div class="pill-sm" style="width: 180px; height: 36px; justify-content: center;">☐ Select All Visible <span style="opacity: 0.6;">324</span></div>
</div>
<!-- Category pills (no mb on this block; mt comes from next block's mt-[13px]) -->
<div style="display: flex; flex-wrap: wrap; gap: 6px;">
<span class="pill-sm cyan-fill">ALL <span style="opacity: 0.7;">324</span></span>
<span class="pill-sm">★ Favorite <span style="opacity: 0.7;">42</span></span>
<span class="pill-sm">⬢ VIP <span style="opacity: 0.7;">18</span></span>
<span class="pill-sm">Not Assigned <span style="opacity: 0.7;">203</span></span>
<span class="pill-sm">Newcomer <span style="opacity: 0.7;">14</span></span>
<span class="pill-sm">Veteran <span style="opacity: 0.7;">22</span></span>
</div>
<!-- Letter bar wrapper (mt-[13px] mb-5 — out of rhythm) -->
<div style="margin-top: 13px; margin-bottom: 20px;">
<div class="ltr-bar">
<button class="active"><span class="big">ALL</span><span class="sm">324</span></button>
<button><span class="big">A</span><span class="sm">12</span></button>
<button><span class="big">B</span><span class="sm">8</span></button>
<button><span class="big">C</span><span class="sm">5</span></button>
<button><span class="big">D</span><span class="sm">14</span></button>
<button><span class="big">E</span><span class="sm">3</span></button>
<button><span class="big">F</span><span class="sm">7</span></button>
<button><span class="big">G</span><span class="sm">9</span></button>
<button><span class="big">H</span><span class="sm">11</span></button>
<button><span class="big">I</span><span class="sm">16</span></button>
<button><span class="big">J</span><span class="sm">8</span></button>
<button><span class="big">K</span><span class="sm">22</span></button>
<button><span class="big">L</span><span class="sm">7</span></button>
<button><span class="big">M</span><span class="sm">19</span></button>
<button class="disabled"><span class="big">N</span><span class="sm">0</span></button>
<button><span class="big">O</span><span class="sm">6</span></button>
<button><span class="big">P</span><span class="sm">4</span></button>
<button><span class="big">R</span><span class="sm">9</span></button>
<button><span class="big">S</span><span class="sm">28</span></button>
<button><span class="big">T</span><span class="sm">14</span></button>
<button class="disabled"><span class="big">U</span><span class="sm">0</span></button>
<button><span class="big">V</span><span class="sm">2</span></button>
<button><span class="big">W</span><span class="sm">3</span></button>
<button><span class="big">Y</span><span class="sm">88</span></button>
</div>
</div>
<!-- Grid (untouched) -->
<div style="display: grid; grid-template-columns: repeat(6, 1fr); gap: 16px;">
<div class="pcard"><span class="name">Ichika Matsumoto</span></div>
<div class="pcard"><span class="name">Yua Mikami</span></div>
<div class="pcard"><span class="name">Suzu Honjo</span></div>
<div class="pcard"><span class="name">Mei Washio</span></div>
<div class="pcard"><span class="name">Kana Momonogi</span></div>
<div class="pcard"><span class="name">Maria Aine</span></div>
</div>
<!-- Empty-state inside directory (BEFORE p-12) -->
<div style="margin-top: 20px;">
<div class="label" style="margin-bottom: 4px;">Or — when no matches in current filter:</div>
<div class="glass rounded-2xl text-center" style="padding: 48px;">
<p class="text-[var(--color-fg-dim)] text-sm">No matches.</p>
</div>
</div>
</div>
</div>
<!-- ====================================================================
AFTER
==================================================================== -->
<div class="pg">
<div class="pg-h"><span><span class="tag" style="color: var(--color-mint);">AFTER</span> · spacing-only</span><span>letter bar mt-4 mb-4 · empty p-card</span></div>
<div class="pg-body">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px;">
<div>
<h1 class="text-3xl font-semibold tracking-tight">Cast</h1>
<p class="text-[var(--color-fg-dim)] mt-1 text-sm">324 total</p>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
<span class="pill-sm" style="background: var(--color-glass-strong); height: 32px;">+ Create actress</span>
<span class="pill-sm" style="height: 32px;">⤓ Import…</span>
</div>
</div>
<div style="display: flex; align-items: center; gap: 12px; margin-bottom: 16px;">
<div class="glass rounded-lg" style="flex: 1; padding: 8px 12px; padding-left: 32px; font-size: 13px; color: var(--color-fg-muted); position: relative;">
<span style="position: absolute; left: 12px; top: 50%; transform: translateY(-50%); opacity: 0.6;"></span>
Filter Cast — Name, Reversed, Alt Names…
</div>
<div class="pill-sm" style="width: 180px; height: 36px; justify-content: center;">☐ Select All Visible <span style="opacity: 0.6;">324</span></div>
</div>
<div style="display: flex; flex-wrap: wrap; gap: 6px;">
<span class="pill-sm cyan-fill">ALL <span style="opacity: 0.7;">324</span></span>
<span class="pill-sm">★ Favorite <span style="opacity: 0.7;">42</span></span>
<span class="pill-sm">⬢ VIP <span style="opacity: 0.7;">18</span></span>
<span class="pill-sm">Not Assigned <span style="opacity: 0.7;">203</span></span>
<span class="pill-sm">Newcomer <span style="opacity: 0.7;">14</span></span>
<span class="pill-sm">Veteran <span style="opacity: 0.7;">22</span></span>
</div>
<!-- Letter bar wrapper — mt-4 mb-4 (16/16) -->
<div style="margin-top: 16px; margin-bottom: 16px;">
<div class="ltr-bar">
<button class="active"><span class="big">ALL</span><span class="sm">324</span></button>
<button><span class="big">A</span><span class="sm">12</span></button>
<button><span class="big">B</span><span class="sm">8</span></button>
<button><span class="big">C</span><span class="sm">5</span></button>
<button><span class="big">D</span><span class="sm">14</span></button>
<button><span class="big">E</span><span class="sm">3</span></button>
<button><span class="big">F</span><span class="sm">7</span></button>
<button><span class="big">G</span><span class="sm">9</span></button>
<button><span class="big">H</span><span class="sm">11</span></button>
<button><span class="big">I</span><span class="sm">16</span></button>
<button><span class="big">J</span><span class="sm">8</span></button>
<button><span class="big">K</span><span class="sm">22</span></button>
<button><span class="big">L</span><span class="sm">7</span></button>
<button><span class="big">M</span><span class="sm">19</span></button>
<button class="disabled"><span class="big">N</span><span class="sm">0</span></button>
<button><span class="big">O</span><span class="sm">6</span></button>
<button><span class="big">P</span><span class="sm">4</span></button>
<button><span class="big">R</span><span class="sm">9</span></button>
<button><span class="big">S</span><span class="sm">28</span></button>
<button><span class="big">T</span><span class="sm">14</span></button>
<button class="disabled"><span class="big">U</span><span class="sm">0</span></button>
<button><span class="big">V</span><span class="sm">2</span></button>
<button><span class="big">W</span><span class="sm">3</span></button>
<button><span class="big">Y</span><span class="sm">88</span></button>
</div>
</div>
<div style="display: grid; grid-template-columns: repeat(6, 1fr); gap: 16px;">
<div class="pcard"><span class="name">Ichika Matsumoto</span></div>
<div class="pcard"><span class="name">Yua Mikami</span></div>
<div class="pcard"><span class="name">Suzu Honjo</span></div>
<div class="pcard"><span class="name">Mei Washio</span></div>
<div class="pcard"><span class="name">Kana Momonogi</span></div>
<div class="pcard"><span class="name">Maria Aine</span></div>
</div>
<!-- Empty-state inside directory (AFTER p-card) -->
<div style="margin-top: 16px;">
<div class="label after" style="margin-bottom: 4px;">Or — no matches in current filter:</div>
<div class="glass rounded-2xl text-center" style="padding: var(--spacing-card);">
<p class="text-[var(--color-fg-dim)] text-sm">No matches.</p>
</div>
</div>
</div>
</div>
<!-- ====================================================================
Empty state at page level (no actresses at all)
==================================================================== -->
<div class="pg">
<div class="pg-h"><span><span class="tag">BEFORE / AFTER</span> · page-level empty state when no actresses exist</span><span>app/actress/page.tsx</span></div>
<div class="pg-body">
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px; align-items: start;">
<div>
<div class="label">BEFORE — <code>p-12 · mb-2</code></div>
<div class="glass rounded-2xl text-center" style="padding: 48px;">
<div style="font-size: 32px; opacity: 0.4; margin-bottom: 8px;">👥</div>
<p class="text-[var(--color-fg-dim)] text-sm">No actresses yet. Create one above or add from any cover.</p>
</div>
</div>
<div>
<div class="label after">AFTER — <code>p-card · mb-label</code></div>
<div class="glass rounded-2xl text-center" style="padding: var(--spacing-card);">
<div style="font-size: 32px; opacity: 0.4; margin-bottom: var(--spacing-label);">👥</div>
<p class="text-[var(--color-fg-dim)] text-sm">No actresses yet. Create one above or add from any cover.</p>
</div>
</div>
</div>
</div>
</div>
<footer class="text-[11px] text-[var(--color-fg-muted)]">
Tell me <strong>go</strong> to apply, or point at anything you want different. Then I'll move on to <strong>Database</strong>.
</footer>
</body>
</html>