SlabEye · Ledger reference
48,136 certs tracked

Canonical reference · 2026-07-30

The Ledger system: one token block, every component, six verdict states.

Swiss-institutional and light — a register entry, not a newspaper spread and not app chrome. This page is the source every other surface is built from: the :root block below is copied verbatim into the public site and the app, and no downstream file forks a token value. Green marks the consistent verdict and the one primary action. Nothing else is coloured.

Every figure on this page is sample data for layout. Population counts, sub-grades, reference images, sighting dates and quality readouts are rendered here to fix the design. The live app fills those slots only from data it actually holds — a grader record, a population figure, a SecureScan image, a measured capture metric — and otherwise prints the honest “not available for this grader” row. Nothing is ever invented to fill a slot.

01 · Tokens

Eleven colours, two families, one radius

Paper, ink and hairlines carry the whole layout. The four signal values are restricted to verdict surfaces and the single primary action — a signal colour used for decoration is a bug, because it spends the meaning of the seal.

Paper
--paper · #F6F7F5
Page ground. Also the seal field.
Card
--card · #FFFFFF
Input surface, coaching card, token tiles.
Ink
--ink · #141414
Primary text, strong rules, selected segment.
Sub
--sub · #5A5F58
Labels, captions, secondary text. 6.1:1 on paper.
Hairline
--hair · #CDD1CA
The fine rule between ledger rows.
Hair strong
--hair-strong · #9AA097
Control borders; the rule that opens a ledger.
Placeholder
--placeholder · #71766F
Input placeholder only. 4.7:1 on card.
Green
--green · #0B6B4F
Consistent / no-conflicts seal + the one primary action. Never decorative.
Green pressed
--green-press · #095A42
Hover and active of that action only.
Caution
--caution · #8A4B00
Caution seal, caution wording, the required-shot marker.
Red
--red · #8A1C13
Reserved. Strongest negative signal only, and only when data backs it.

The block, to copy

:root{
  /* ground + ink */
  --paper:#F6F7F5;         /* page ground */
  --card:#FFFFFF;          /* input + seal field surface */
  --ink:#141414;           /* primary text, strong rules */
  --sub:#5A5F58;           /* secondary text, labels, captions */
  --hair:#CDD1CA;          /* fine hairline between ledger rows */
  --hair-strong:#9AA097;   /* control borders, opening rule */
  --placeholder:#71766F;   /* input placeholder (AA on --card) */

  /* signal — verdict surfaces and the one primary action ONLY */
  --green:#0B6B4F;         /* consistent / no-conflicts + Verify */
  --green-press:#095A42;   /* that action, hover + pressed */
  --caution:#8A4B00;       /* caution signal */
  --red:#8A1C13;           /* RESERVED: strongest negative only */

  /* type — production intent first, system fallback after */
  --font:"Inter","Söhne",-apple-system,BlinkMacSystemFont,"Segoe UI",
         Roboto,Helvetica,Arial,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,"SF Mono",SFMono-Regular,
         Menlo,Consolas,monospace;

  /* geometry */
  --radius:3px;            /* one small radius; no corner inflation */
  --maxw:clamp(760px, 40vw + 250px, 1180px);            /* measure; margins carry the authority */

  /* type scale — fluid, mobile -> desktop. Premium reads LARGE +
     LIGHT + TIGHT, so display and h2 carry weight 400. */
  --fs-display: clamp(2.5rem, 1.1rem + 5.6vw, 4.5rem);   /* 40 -> 72px  H1 */
  --fs-h2:      clamp(1.5rem, 1.1rem + 1.6vw, 2.125rem); /* 24 -> 34px    */
  --fs-h3:      clamp(1.125rem, 1rem + 0.5vw, 1.375rem); /* 18 -> 22px    */
  --fs-body:    1rem;        /* 16px                                */
  --fs-small:   0.9375rem;   /* 15px  secondary prose               */
  --fs-caption: 0.8125rem;   /* 13px  captions, notes               */
  --fs-eyebrow: 0.6875rem;   /* 11px  mono, uppercase, tracked      */
  --fs-cert:    clamp(1.25rem, 1rem + 1vw, 1.75rem); /* 20 -> 28px cert */

  --lh-display: 0.98;   --ls-display: -0.022em;   --fw-display: 400;
  --lh-h2:      1.12;   --ls-h2:      -0.012em;   --fw-h2:      400;
  --lh-body:    1.6;    --ls-eyebrow: 0.14em;

  /* motion — one interaction curve, one duration ladder */
  --dur-micro:  120ms;  /* the focus ring leaving         */
  --dur-color:  150ms;  /* colour only                    */
  --dur-enter:  200ms;  /* the two one-shot keyframes     */
  --dur-state:  300ms;  /* control + hover                */
  --dur-reveal: 500ms;  /* entrance and scroll reveal     */
  --ease:       cubic-bezier(0.2, 0, 0, 1);     /* seal press ONLY */
  --ease-soft:  cubic-bezier(0.4, 0, 0.2, 1);   /* interaction     */
}

Light only, pinned. html{color-scheme:light} plus explicit values on every surface, and a prefers-color-scheme:dark block that re-declares the same eleven values rather than inverting them. A viewer who forces dark keeps the institutional register and never gets invisible text.

Layout rules that travel with the tokens. Strict grid, generous margins, everything left-aligned. Results are labeled ledger rows separated by fine hairlines — a register entry, never a card stack. No drop shadows, no gradients, no decorative icons; the only glyphs in the system are the six seal marks.

The ground is plain paper

The hero band used to carry a ruled “ledger paper” ground: a repeating hairline behind the eyebrow and the display headline, on a 32px rhythm. On a real screen it read as banding across the page rather than as paper, so it is gone and nothing replaces it.

Do not reintroduce a page texture. The ground is flat --paper. Every hairline that remains is structural — the rule between two ledger rows, the rule that opens a section, a control border — and each one separates two things a reader can name. A rule that separates nothing is decoration, and decoration is what made the page look like a rendering artefact.

02 · Type

Grotesk for language, tabular mono for figures

Premium is LARGE, LIGHT and TIGHT; mass-market is small, heavy and loose. Display and h2 therefore sit at weight 400 — confidence comes from size, not bold. Every cert number, grade and population figure is tabular mono, which is the precision cue and is not optional. Each row below renders through the token it names.

--fs-display
40 → 72px · 400
lh 0.98 · ls -0.022em
Check a cert number before you pay.
--fs-h2
24 → 34px · 400
lh 1.12 · ls -0.012em
Every verdict state
--fs-h3
18 → 22px · 600
Result anatomy
--fs-body
16px · lh 1.6
Body copy sits at 16px. Prose never goes below 15px, and its measure is capped at 68ch.
--fs-small
15px
Secondary prose: ledes, verdict bodies, disclosure answers.
--fs-caption
13px
Captions, notes, the ceiling line, the footer.
--fs-eyebrow
11px · ls 0.14em
Certificate number
--fs-cert
20 → 28px · ls 0.04em
mono · tabular-nums
8477 1904
mono 19 · readout48,136
mono 13.5 · row valueBGS 9.5 · 1,438 · 0087 4531 12
mono 8 · seal labelConsistent

The rules that travel with the scale. The cert number is the hero datum: --fs-cert, mono, tabular figures, letter-spacing:.04em. Body copy is never set below 15px, and eyebrows are the only 11px text. Maximum measure for prose is 68ch — a longer paragraph is a density smell, not a layout to widen.

Sentence case everywhere. Uppercase is reserved for mono micro-labels (eyebrows, seal labels, badges, table headers) where letter-spacing does the work.

03 · Signature

The embossed letterpress seal

The one signature element. A flat matte field pressed into the page: hairline edge, inset shadow at the top-left, inset light at the bottom-right, an engraved inner ring, and a debossed glyph over a mono label. Never glossy, no gradient, no shadow cast onto the page. The seal carries the verdict colour; nothing else on the result does.

Consistent
green · consistent, or no conflicts observed
Caution
caution · seen on other live listings
Mismatch
caution, edged · resolves to a different card
No record
neutral · no record found
Format
neutral, stop · format does not fit
Flagged
red, reserved · flagged by a report

Why the seal is allowed one filter. The glyph carries drop-shadow(0 1px 0 rgba(255,255,255,.9)) — a 1px light cast directly beneath the stroke. That is the letterpress highlight that makes the glyph read as pressed in rather than drawn on. It is the emboss, not a shadow effect, and it is the only filter in the system.

04 · Components · the hero control

Cert input, grader selector, one action

One oversized mono field, one segmented grader selector, one green action. Nothing competes with it. Focus the field to see the hairline turn green; the scan line sweeps once, at --dur-enter, while the lookup is in flight.

Grading service
Try one:
48,136
certs tracked
306
live under 2+ sellers
10
graders covered

The masthead readout at the top of every surface carries the same figure as the first stat. One number, one source — and on these static pages it is dated, because it is a snapshot rather than a live count.

Empty field · placeholder

Loading · the scan line sweeps the input

PSA · 84771904 reading the grader record and the sighting graph

Motion is near-none. Production sweeps the line once (.certwrap.scanning, --dur-enter). The field above is a still frame of that sweep (.sg-line) so the line can be read on a static page: the loop that used to stand in for it is gone, because there is no looping animation anywhere in this system. The sweep and the result entrance both sit inside prefers-reduced-motion guards and vanish entirely when reduced motion is requested — no motion in this system carries information.

The interaction system

One curve and one duration ladder. Every transition uses --ease-soft; --ease is spent on a single thing, the seal press. A new interaction picks a rung of this ladder or it does not move — there is no second scale.

Every duration and curve in the product, and what spends it.
TokenValueWhat uses it
--dur-micro120msThe focus ring leaving, and nothing else
--dur-color150msColour-only change: a link on hover, the ledger-row wash
--dur-enter200msThe two one-shot keyframes: the seal press, the lookup sweep
--dur-state300msStandard control and hover: quiet buttons, chips, segments, the cert field, disclosure, nav links
--dur-reveal500msEntrances and scroll reveals, and the whole of the one primary action
--easecubic-bezier(0.2, 0, 0, 1)The decisive ease-out. RESERVED: the verdict seal press, nothing else
--ease-softcubic-bezier(0.4, 0, 0.2, 1)The default curve: every transition on every surface

Why two tiers for colour. A colour change a reader is not looking at — a row washing under the cursor, a link warming — settles in 150ms. A control they are aiming at takes 300ms, because that is long enough to read as a response and short enough not to lag the cursor. The one primary action takes the whole 500ms, on transition:all, so its fill, its border and its lift arrive as a single movement.

What every surface owes a reader

Transitions, not keyframes. Three keyframes exist in the whole system — the seal press, the lookup sweep and the result's rise — and each runs once. Everything else a reader can trigger is a transition between two states. No animation loops, and nothing moves that a reader did not ask to move.

Reduced motion, and the rule that outranks it. Under prefers-reduced-motion: reduce every transform and reveal is off, opacity fades survive at --dur-micro, the seal appears without the press, and the scan line does not sweep. Content outranks the animation. The reveal can only hide a section behind .js-reveal, a class the boot script sets solely when an observer exists and motion is allowed; the observer stops watching an element the moment it reveals; a 1.6s failsafe drops the class if the observer never fires at all; a catch drops it on any script error; and the reduced-motion block states opacity:1 outright. No reader can be left looking at an empty page.

Error · the field rejects before any lookup

999 is too short for a PSA number — check the digits, or the grader.

Buttons, links, badges, focus

Inline link: jump to the verdict states. Badges: psa reviewed re-verify reported

Focus. One ring everywhere: 2px solid green at 2px offset, on buttons, chips, links, the field, each segment of the grader selector, and every disclosure summary. Tab through this page to check it. Every interactive target is at least 44px tall.

05 · Components · the ledger row block

Result anatomy

Identity first, then labeled rows for grade and sub-grades, population, and the reference-image slot — each separated by a fine hairline, with a heavier rule opening the ledger. Labels sit left in sub, values sit right in mono. The verdict and its seal close the entry.

Card identity
0087 4531 12
Set · year · language — the identity line
GradeBGS 9.5 · Gem Mint
Centering / Corners9.5 · 9.5
Edges / Surface9.0 · 9.5
Population at grade812
Graded higher41
Sub-gradesNot issued by this grader
Reference-image slot — filled from the grader's own record image when one exists, for a side-by-side.
Not available for this grader. The honest fallback that replaces the slots above when population, sub-grades and a reference image are not published in a record SlabEye can read.

Data honesty. Three slot classes exist for exactly this reason: .row .v for a figure we hold, .row .v.na for a field the grader does not issue, and .naslot for a whole group we cannot read. A slot is never filled with an estimate, an average, or a plausible-looking number.

06 · Components · verdict states

All six verdict states

The vocabulary is fixed. SlabEye reports what it observed against the record and the sighting graph — it never states that a card is or is not what the label says, because it cannot see inside a holder. State 01 has two copy variants: one when a grader record was actually read, one when only the sighting graph was checked. State 06 is designed but not emitted live.

01a · consistent with the record

Blastoise
0087 4531 12
Base Set · 1999 · English — BGS record read
GradeBGS 9.5 · Gem Mint
Centering / Corners9.5 · 9.5
Edges / Surface9.0 · 9.5
Population at grade812
Graded higher41
Other live listingsNone seen

Consistent with the record. The grader's record for this number describes the same card, set and grade as the listing, and our last sweep saw the number on no other live listing. A matching scan doesn't confirm the specific card sealed inside the holder.

Open BGS's record for 0087453112 →

01b · no conflicts observed · collision check only

Certificate 242548
242548
ACE · sighting graph only, no record lookup
FormatFits ACE's shape
Grader recordNot readable for this grader
Other live listingsNone seen
Not available for this grader. ACE publishes no lookup record SlabEye can read, so there is no population, sub-grade or reference image to show.

No conflicts observed. The number fits ACE's format and our last sweep saw it on no other live listing. That is the absence of an observed conflict within our coverage — no record was read, so nothing here describes the card. A matching scan doesn't confirm the specific card sealed inside the holder.

Open ACE's record for 242548 →

02 · seen on other live listings

Venonat
8477 1904
Jungle · 1999 · English — PSA record read
GradePSA 9 · Mint
Sub-gradesNot issued by PSA
Population at grade1,438
Graded higher512
Live listings carrying this number3

Seen on other live listings. A graded slab is a single physical item, and our last sweep observed this number on three then-active listings from different sellers. The ordinary explanation is one seller's photo reused across items, and that alone is not a problem. Confirm which copy PSA sealed before any money changes hands.

Open PSA's record for 84771904 →

03 · resolves to a different card than the listing claims

Record does not match the listing
7011 2233
PSA · record read, identity disagrees
Listing claimsCharizard · Base Set · Holo
Record resolves toMachop · Base Set · Common
Grade on recordPSA 8 · NM-Mint
Population at grade2,905

Resolves to a different card than the listing claims. The number returns a record, and that record describes another card entirely. The disagreement is between the listing and the record behind the number — which is the thing worth resolving before you pay.

Open PSA's record for 70112233 →

04 · no record found for this cert

Certificate 1401006127021
1401 0061 27021
CGC · lookup returned nothing
FormatFits CGC's shape
Grader recordNone returned
Other live listingsNone seen
Not available for this cert. No population, sub-grades or reference image came back with the lookup.

No record found for this cert. The number fits CGC's format, but no matching record came back and our sweeps saw no conflicting activity. Neither clear nor flagged — open CGC's own record before relying on the number.

Open CGC's record for 1401006127021 →

05 · doesn't match this grader's cert format

PSA · 999
Format check — stopped before any lookup
Entered999
PSA issues7 to 9 digits

Doesn't match this grader's cert format. 999 cannot be a PSA number — it does not fit the shape PSA issues. Usually that is a typo or the wrong grader selected. Check both and re-enter; if it still does not fit, don't rely on the number.

06 · flagged by a report · designed state, not emitted live

Venusaur
6600 6600
Base Set · 1999 · English
GradePSA 8 · NM-Mint
Reports on record1
First reported6 days ago

Flagged by a report. A dealer or collector filed a report against this number. SlabEye records the observation and points at the grader's own page; it makes no claim about any person. Treat a filed report as a strong prompt to slow down and check.

Open PSA's record for 66006600 →

State 06 is design-only. Reserved red, and the one state with no data behind it — no report corpus exists. It is rendered here and in the demo so the design is settled; the live app must not emit it until real reports exist on a record.

Vocabulary discipline. Four words are barred from every SlabEye surface: the noun for deliberate deception, the adjective for an object that is a copy passed off as the original, and the two adjectives that assert an object is the real article. The list lives in DESIGN-BUILD-SPEC.md and is deliberately not reproduced here, so a grep of any shipped surface returns nothing. No surface claims a card is or is not what the label says. The six statements above are the whole vocabulary — a new state needs a new honest sentence, not a stronger adjective.

07 · Components · the ceiling line

The same-print ceiling line

Persistent, never dismissible, and attached to every green verdict. It is the structural limit of the whole product: two copies of the same print scan identically, so a clean screen cannot reach the object inside the holder.

Consistent with the record. A matching scan doesn't confirm the specific card sealed inside the holder.

Where it must appear. On state 01a and 01b, always, in the verdict body — not in a footnote, not behind a disclosure. It rides inside .vtext as .ceiling: a left hairline rule, sub colour, one sentence.

One contracted variant. The app's live string is asserted by its embedded test suite as “A matching scan does not confirm the specific card sealed inside the holder.” — the same sentence, uncontracted. Either is canonical; do not reword the clause itself.

08 · Components · record-check outcomes

What you saw on the grader's own page

After the deep link out, one tap records the comparison. Three equal-weight quiet buttons — deliberately not colour-coded, because colouring one answer steers the log. The log is append-only; undo appends a retraction rather than deleting anything.

Opened PSA's own record? Log what you saw — one tap, stored as a comparison result only, never what the grader's page showed.

Recorded: this cert matches the grader's record (PSA).
  • no record found2026-07-24
  • retracted (undo)2026-07-24
  • record matches2026-07-30

Append-only, in the UI too. The retraction shows in the log as its own row. Nothing disappears, so the surface cannot imply a cleaner history than the data holds.

09 · Components · capture

The honest 3-shot indicator, and retake coaching

Three shots, each gated on its own. The indicator shows which are in and which is next, and marks the label shot required because the cert read comes from it. It does not pretend to be a locked wizard: the server can only advise after a shot arrives, so the copy says so.

  1. 01 Front — full slab In. The anchor shot: it sets the scale and the flat plane every other measurement is taken against. in
  2. 02 Cert labelrequired Next. The number is read from this shot, so glare over the label zone is checked hardest here. next
  3. 03 Edge / corner macro Not in yet. Adds surface and edge context through the plastic; macros are the most blur-prone shot, so the bar is tighter. pending

Nothing here is locked. Each shot is checked on its own once it arrives — the check happens on the server, so it can advise and ask for a retake, not stop you mid-shot. Shoot them in any order, redo one without losing the others, or stop after the label: that is the only shot the cert read needs. Photos are read, then discarded.

No forced camera. These inputs carry accept="image/*" and nothing else. The capture attribute was removed on 2026-07-30 because it forces the rear camera and strips the Photo Library and Files out of the picker. Do not re-add it.

Retake coaching — one instruction, one physical fix

Glare on the slab.

Tilt the slab a few degrees or step out of direct light — a bright hotspot is hiding part of the surface.

shot labelglare 6.4% of print area bar ≤1.0%sharpness ok

Third glare refusal in a row on this shot: move away from the overhead light, or shoot near a window.

One reason, never a list. The gate short-circuits on the most fatal failure and names exactly one fix. After three consecutive refusals for the same reason the copy escalates from a nudge to a concrete change of light, because on a phone the only real lever is the room. A refusal to read a shot is never a verdict — a verdict only exists for a shot that cleared the bar.

10 · Components · dense table

Listings carrying the same number

Hairline rows, mono for anything countable, sellers as opaque handles. The table scrolls inside its own container so the page never scrolls sideways.

Sightings of 8477 1904 in the last sweep — sample data.
SellerMarketplace First seenLast seen Read fromState
s-4c19eBay US2026-07-242026-07-30titlelive
s-8b70eBay UK2026-07-282026-07-30imagelive
s-1f52eBay DE2026-07-302026-07-30titlelive
s-4c19eBay US2026-06-022026-06-19titleended

Sightings are seller-entered and unverified until a collision review runs. The same handle appearing twice is a relisting, not a second slab — the table shows the observation, and the wording never converts it into an accusation.

Empty state

No other live listing carried this number in our last sweep. Absence of an observed conflict, within our coverage — not a clean bill of health.

11 · Components · structure

Steps, facts, rules, disclosure

Numbered ledger rows · .steps

  1. Enter the number and pick the grader.Checked against the grader's real format before anything else runs.
  2. SlabEye screens it against the record and the sighting graph.
  3. Read the ledger — the verdict, plus a one-tap link to the grader's own record.

Fact rows · .facts

Hairline rule above · .rule

Strong ink rule above · .rule-strong

Disclosure · .qa

Is SlabEye telling me a card is what the label says?
No, and it cannot. It reports discrepancies it observed within its coverage. A clear screen is the absence of observed conflicts, not a verdict on the object inside the holder.
Which graders are covered?
Ten: PSA, CGC, BGS, SGC, TAG, ACE, PGS, AGS, DSG and CGA. Only some publish a record SlabEye can read; for the rest the check is the sighting graph and the number's format.
Why did it ask me to retake a photo?
Because the detail it needs was not in the shot — glare, blur or an angle. A guess helps no one at a counter, so it asks for one clean shot instead and names the single fix.

Error state · the lookup itself failed

The grader's site didn't answer, so nothing was screened. No verdict was produced — try again, or open the record directly.

12 · The three hero screens

The system on a dealer's phone

Same tokens, same components, no new pieces. This is the canvas that matters: a phone held at a counter, one hand, bright ambient light.

SlabEye · cert screen
48,136 certs tracked

Check a cert number before you pay.

Scan the slab

  1. 01Cert labelrequirednext
  2. 02Front — full slabpending
  3. 03Edge / cornerpending

or type the number

Grading service
48,136
certs tracked
10
graders
Decision support, not a grading or verification service. A clear screen is the absence of observed conflicts. Photos are read, then discarded.
01 · Scan homeWordmark and cert-count readout, the label shot as the one required capture, the honest step indicator, and the typed-number path under it.
SlabEye · cert screen
48,136 certs tracked
Venonat
8477 1904
Jungle · 1999 · English
GradePSA 9 · Mint
Sub-gradesNot issued by PSA
Population1,438
Live listings3

Seen on other live listings. A graded slab is one physical item. Our last sweep saw this number on three then-active listings from different sellers — likeliest one seller's photo reused. Confirm which copy PSA sealed first.

Open PSA's record →
SellerMarketFirst seen
s-4c19eBay US07-24
s-8b70eBay UK07-28
s-1f52eBay DE07-30

Opened PSA's page? Log what you saw.

02 · Caution resultThe ledger rows, the pressed caution seal with the innocent explanation, the sightings behind the claim, and the three outcome buttons.
SlabEye · cert screen
48,136 certs tracked

Capture · shot 2 of 3

Glare on the slab.

Tilt the slab a few degrees or step out of direct light — a bright hotspot is hiding part of the surface.

shot labelglare 6.4%bar ≤1.0%

  1. 01Front — full slabIn.in
  2. 02Cert labelrequiredRetake this one.next
  3. 03Edge / cornerNot in yet.pending

Nothing is locked — the check runs after a shot arrives, so it can advise and ask again, not stop you mid-shot. No verdict is produced from a shot that didn't clear the bar.

Photos are read, then discarded — never stored.
03 · Retake coachingOne named defect, one physical fix, the measured readout in mono, and the step indicator showing exactly which shot is being asked for again.