Refine slab mark proportions; stack header+banner instead of magic top offset

This commit is contained in:
Barely Removable 2026-08-22 12:26:11 -07:00
parent 527558bef2
commit 3c98373ad6
3 changed files with 28 additions and 12 deletions

View file

@ -2,8 +2,8 @@
<!-- Matches the in-app brand mark: a graded slab — case, label, and the
card sealed inside. Kept in step with .brand-mark in style.css. -->
<rect width="128" height="128" rx="26" fill="#0e1522"/>
<rect x="38.5" y="20.5" width="51" height="87" rx="9" fill="none"
<rect x="41.5" y="18.5" width="45" height="91" rx="7.5" fill="none"
stroke="#4d9bff" stroke-width="5"/>
<rect x="48" y="31" width="32" height="9" rx="3.5" fill="#3ddcc0"/>
<rect x="48" y="49" width="32" height="45" rx="4.5" fill="#4d9bff" opacity="0.34"/>
<rect x="50" y="30" width="28" height="8" rx="3" fill="#3ddcc0"/>
<rect x="50" y="49" width="28" height="46" rx="3.5" fill="#4d9bff" opacity="0.48"/>
</svg>

Before

Width:  |  Height:  |  Size: 548 B

After

Width:  |  Height:  |  Size: 548 B

Before After
Before After

View file

@ -22,6 +22,10 @@
</head>
<body>
<!-- Header and banner stick as one unit, so the banner sits under the header
by stacking rather than by a hardcoded top offset — that offset silently
went stale (and overlapped) the moment the header's height changed. -->
<div class="chrome">
<header class="topbar">
<div class="topbar-inner">
<div class="brand">
@ -29,10 +33,14 @@
This is the literal object the whole app estimates, so it says
what this is without belonging to any one card game — which a
checkmark (or any single game's iconography) doesn't. -->
<svg class="brand-mark" viewBox="0 0 24 30" fill="none" aria-hidden="true" focusable="false">
<rect class="mark-case" x="1.15" y="1.15" width="21.7" height="27.7" rx="3.4" stroke-width="1.7"/>
<rect class="mark-label" x="5.2" y="5.3" width="13.6" height="3.3" rx="1.3"/>
<rect class="mark-card" x="5.2" y="11.9" width="13.6" height="12.9" rx="1.6"/>
<!-- Proportioned to a real slab (18:28 ≈ 0.64, against PSA's ~0.62)
with restrained corners. Squarer, rounder earlier drafts read as
a phone icon at topbar size, which is the failure mode for any
small rounded rectangle. -->
<svg class="brand-mark" viewBox="0 0 20 30" fill="none" aria-hidden="true" focusable="false">
<rect class="mark-case" x="1" y="1" width="18" height="28" rx="2.6" stroke-width="1.6"/>
<rect class="mark-label" x="4.2" y="4.6" width="11.6" height="3" rx="1.2"/>
<rect class="mark-card" x="4.2" y="10.6" width="11.6" height="14.2" rx="1.4"/>
</svg>
<h1>Card Grader</h1>
</div>
@ -44,6 +52,7 @@
</header>
<div id="banner" class="banner" hidden></div>
</div><!-- /.chrome -->
<main>

View file

@ -88,8 +88,13 @@ main {
/* ------------------------------------------------------------- topbar */
/* The sticky unit is the header + banner together (see index.html) the
banner used to sticky itself to a hardcoded top offset matching the
header's height, which broke the moment the header grew. */
.chrome { position: sticky; top: 0; z-index: 20; }
.topbar {
position: sticky; top: 0; z-index: 20;
position: relative; /* containing block for the holo edge below */
background: rgba(8, 12, 20, .82);
-webkit-backdrop-filter: blur(14px) saturate(1.4);
backdrop-filter: blur(14px) saturate(1.4);
@ -136,10 +141,13 @@ main {
Drawn as flat two-tone geometry rather than the gradient-blob-with-a-
checkmark it replaced: that read as a generic app badge and said nothing
about grading. Thin strokes and no glow keep it legible at 22px. */
.brand-mark { flex: none; width: 21px; height: 26px; display: block; }
.brand-mark { flex: none; width: 18px; height: 27px; display: block; }
.brand-mark .mark-case { stroke: var(--accent); }
.brand-mark .mark-label { fill: var(--accent-2); }
.brand-mark .mark-card { fill: var(--accent); opacity: .34; }
/* .48, not the .34 this started at below roughly .45 the card window
stops separating from the case interior at topbar size and the mark
collapses into an empty outline. Checked by rendering it at 42px. */
.brand-mark .mark-card { fill: var(--accent); opacity: .48; }
.topbar-actions { display: flex; gap: 9px; flex-wrap: wrap; }
@ -394,7 +402,6 @@ textarea { resize: vertical; min-height: 64px; }
/* -------------------------------------------------------------- banner */
.banner {
position: sticky; top: 60px; z-index: 15;
padding: 12px 24px; font-size: 13.5px;
background: color-mix(in srgb, var(--accent) 22%, var(--ground));
color: var(--ink);
@ -492,7 +499,7 @@ textarea { resize: vertical; min-height: 64px; }
.grid td { padding: 11px 8px; }
.grid th { padding: 9px 8px; }
.cardcell img, .cardcell .thumb-blank { width: 40px; height: 56px; }
.banner { top: 54px; padding: 11px 14px; }
.banner { padding: 11px 14px; }
/* The slab stays horizontal stacking it would bury the number, which is
the one thing someone opens this app to see. Just tighter. */