Four voices
128 · 96 · 64 · 44
32 · 24 · 20 · 14
20 · 17 · 14 · floor 13
tabular · floor 12
15 · 13 · tracked .08em
Headline treatments
Colour by role
Hard shadows
Two families
Product · dark notched
Arcade · torn stickers
Their shape package · 24
frontend-v1/packages/shapes · code names · port, never redraw
More of their surfaces
Effects
Motion
Motion kit
Ported from Scotty's Remotion explainer (2026-10-02), timings measured frame by frame on the 60fps render · /lib/motion.css + /lib/motion.js (window.CadeMotion) · transform and opacity only · one prominent beat in view at a time
--cm-slam--cm-stamp--cm-fall --cm-drop--cm-ripple--cm-pop--cm-roll--cm-coin--cm-shutter --cm-lift--cm-glow--cm-tone--cm-ease-over--cm-ease-in --cm-ease-outslamIn
260ms · 1.55 to .94 to 1Use it for: the selected shout line on a category switch, a section heading the first time it is on screen, a new ticker row. The streak is a clone that trails and fades. Video: the title words, about 270ms each.
already in place, no streak.
stamp
240ms · tilt · 2px knockUse it for: a verdict on a plot. CLOSED yellow at the cut, HIGHER / YES WINS lime and LOWER / NO WINS red at the bell, VOID paper, TOO LATE orange. The rubber-stamp plate (.pnl-stamp), filled as in the video.
the stamp is placed, tilted, no slam or knock.
chipDrop + ripple + YOU
220 fall · 440 total · 3 x 520 ringsUse it for: your pick landing on the line at the entry point. Speed lines while it falls, squash on impact, one bounce, rings in the side's colour, then the YOU tag pops from the disc and follows it. Video: t=6.5 to 7.6 and t=12.8 to 13.6.
the disc and its YOU tag are simply there.
tag · youTag
300 pop · 560 bounceUse it for: naming your own thing (YOU) and a refused late action (TOO LATE, it bounces and leaves after 1.6s). Their speech-bubble button (packages/shapes buttonTime), as a child of its target so it follows it.
the tag is shown, no pop or bounce.
rollNumber · paysPlate
360ms · ease out · 240 kickUse it for: what your pick pays, one plate, only after a pick; the number rolls as the pool moves. Video: the YES PAYS plate, t=25 to 40.
the number is written, no roll.
shutter
240 drop · 260 liftUse it for: the predictions cut. Faint slats over the plot (still readable) and the hazard band on its foot; CLOSED slams after it; it lifts at the bell. Video: t=39 to 43 and t=75.
placed and removed without travel.
coinBurst · coinRain
950ms arc · 7 coinsUse it for: a win, sparingly: a few gold coins tumble out of your chip once. coinRain (the video's t=14 to 17) is for an explainer, not a product page.
no coins; the WINS stamp carries the verdict.
speedLines
560ms · onceUse it for: one tension beat, behind art or a headline, never over data. Optional; the homepage does not use it. Video: t=23.
nothing is drawn.
ground
18s drift · 1200 tone fadeUse it for: the page background. Near-black, a vignette and one calm, low glow in a tone that can shift, placed behind the hero's art (at:[x%,y%]), never under copy; under 760 it steps out. No halftone since 2026-10-03 (Scotty and the owner: too many dots, the glow blobs sat over the text): dots are a component's accent, never a ground. It never moves on scroll. Video: the ground behind every shot, green at t=80.
the glow stands still; a tone change is immediate.
press
300ms · 2 ringsUse it for: the quick-predict bolt: a tiny chip drop on the icon and a small orange ripple. The bolt itself is their art, unchanged. Press it.
the press shows only its own lift and shadow.
Medallion hop
460ms · once per hoverUse it for: a card under the pointer; the identity medallion hops once, nothing else moves and the layout holds. Opt in with .cm-cards on an ancestor. Hover the card.
no hop.
The round, in order
pick · cut · bellHow the homepage strings them, one beat at a time: chipDrop + YOU, the pays plate, then shutter + CLOSED, then lift + WINS stamp + coins. Nothing loops but the ground glow, the LIVE bead and the chart halo.
each beat lands in its end state.
Actions
Their buttons
Product pages: Sign In. Landing only: Get early access. One art slat in both, their CadeFixedArtButton (131 x 60: the black shadow path, the #FFA800 face on a 2px ink stroke), drawn by K.navLive's signIn slot: 188 x 86 at scale .6 on desktop, 157 x 72 at .65 in the phone bar; the long label takes the wide slot (310, the art stretched). Hover and focus press the face 2 / 3 into its shadow and the label follows; focus adds the 3px #FFA800 ring. Sign In opens the sign-in modal on desktop and /login/ on a phone (CadeSitemap.signIn).
Tabs and filters
Their hero shortcut plate (HERO_CTA) as a tablist: selected fills with the tile tone; ink is dark on orange and yellow, white on violet (as their violet CTA). Wide on desktop, compact on the phone (a 44px hit band there). Arrow keys, Home and End move between tabs; o.controls sets aria-controls. /lib/category.js tile().
Their SportsTab (.ntab) with the category's name and the count of markets the board shows for that tab (All is a mix of 8). No glyph on the filter: at tab size it read as a smudge (owner 2026-10-02); the label names the category. Each tab is named "Memecoins, 8 markets" for assistive tech (visually hidden text); o.controls points it at its board. Default All, then Memecoins, Sports, Stocks. /lib/category.js filter().
Badges and tags



The medallion family: every market's identity is their allstar CoinMedallion (octagon, orange ring). Memecoins carry the coin art; stocks the brand mark (Simple Icons 13, one colour) on the brand's face, or the ticker on ink when there is no mark (SPY); sports two smaller octagons in the team colours with the abbreviation (no team marks). The category glyphs (tabs, filter, shout) and their TeamBadge (game rows) stay. /lib/category.js mark(), medallion(), stockMed(), teamMed(), pairMed(), glyph().
Inputs
Search and sort for a board (/markets): their SearchField and DropdownSelect (sort) silhouettes in the dark look, face #161514, the card's keyline, a hard black shadow; the keyline turns orange on focus and the 3px orange ring sits outside the plate. Real <input type=search> and <select>; the caret is their caret-down icon, no magnifier (none in their icon set). Then LOAD MORE: their landing CTA, orange because orange loads more, the label centred, no chevron; lift on hover, press sits on the shadow. /lib/category.js search(), sort(), more().
Data
The battle bar above, recoloured to the market's two sides: the HIGHER / LOWER pool split on the landing demo card. One script, /lib/battle-split.js + .css. Each entry springs the seam, flashes the side that gained and pops its stake; a whale slams the starburst, swings the seam past its mark and shakes the bar; a lead change flies the banner; YOU pins the viewer's side; the VS burst counts the last ten seconds; at the bell the winner floods the track.
04:12
1M market
Closed
Delayed
The round chart, one style on every page (landing, profile, homepage): the plot of their Wager Replay card (frontend-v1 meme-madness/components/replay/MemeMadnessWagerReplay.tsx). A smooth trace against the round's dashed yellow LINE, lime above and red below, cream until you hold a side, the crowd's entries on the curve, YOU at your entry, CLOSED at the bell. One script, /lib/replay-chart.js + .css.
SIDE
Total volume wagered
Active players
Predictions
Their CadeLandingTicker, mixing the three categories; each row carries its glyph. A labelled region with a visible PAUSE / PLAY control (WCAG 2.2.2, a text button, no drawn icon); it also pauses while off screen and stops under reduced motion. /lib/category.js ticker(), tickerToggle(), wireTicker().
The ticker in its band, as a page places it: their CadeLandingFeed (FEED_FACE / FEED_SHADOW stretched to the box), the bolt badge, the [ LIVE PREDICTIONS ] kicker, the pause control. Under 720 it takes their phone band and drops the kicker. Used by /markets; /home draws the same band in its frame. /lib/category.js feed().
Stocks: the ticker badge, the price, their vote bar and the share calling higher. /lib/category.js tape().
Feedback
Loading
Skeleton, empty, unavailable · /lib/skeleton.* · the shape that loads is the shape that stays
Their only skeleton motion is Tailwind's animate-pulse: 2s, cubic-bezier(.4,0,.6,1), opacity 1 to .5 and back (the profile's page ticket pulses at 1.2s ease-in-out to .6). Reduced motion and ?static stop it: the ghost stays, still. All ink is the frame's paper #EFE9D8 at low alpha on the production ground #0E0D0C, black at .12 to .2 on a paper or coloured plate.
SkeletonLine (a bar), SkeletonBlock (a plate, square here: theirs rounds 8px, the house does not), a ghost value on a paper plate, and the Foundation / Skeleton rule: no separate drawing, the plate's own silhouette flattened (CadeSkeleton.flatten(el), filter grayscale(1) brightness(0) invert(1) opacity(.14), children hidden).
AllStarCardGhost on the homepage card's own box (400/310, 9cqw padding, the 24cqw identity band, the 720 branch), so a seat never reflows when its market lands: the medallion (octagon, as our medallion family), the clock chip, the question, the meta line, the split and the bolt. A board announces itself ONCE (one role=status); the seats are aria-hidden.
CadeLandingHeroSkeleton in flow: the panel is known, so it is drawn; copy that is static prints for real (pass it as kicker / lines); the LIVE lockup, the duel seats (their PANEL_INNER clips), the two stats and the three shortcut plates (the real HERO_CTA silhouette, stroked #4A4A4A) are ghosts. Under 720 the plates are not drawn, as their phone hero.
MarketLiveChart while its history loads: the real plate (DS_PANEL_CLIP, #111111 over a #0B0B0B 6/6 shadow) with their read, "Loading market history", the price rail and the time axis as bars. The live predictions band (FEED_FACE / their phone FEED_BAND) with the label and three runs as bars.
SoccerSkeletonRows (42 / 1fr / 48) for any list; ProfileTicketSkeleton for a prediction stub: its torn plate, the hex coin and three lines at white .10, the grey pending flap.
AsyncStatus: loading and refreshing in the quiet tone, stale in orange, error in red, with a last-updated stamp and one action. For a read that is slow but already has something on screen.
Three different claims, drawn differently. Loading: we do not know yet (a pulse). Empty: we know, and there is nothing (the dashed box, their .emptyBoard). Unavailable: we could not read it, which is not zero (the red read notice, role=alert, with Try again; the profile's red-titled plate). Values that failed to read stay as STILL ghosts, never a 0 or an em dash.
A page opts in with <html data-sk> and loads /lib/skeleton.css + /lib/skeleton.js in its head, so the first paint already shows the ghosts. Each region has two twins: [data-sk-ghost] (the ghost) and [data-sk-real] (the content). The page builds its content, then calls CadeSkeleton.gate().ready(dataPromise): the ghost holds until the data, the fonts and every image in the real content are in (capped at 8s). Past 300ms the content fades in over 180ms; under, it swaps at once. Review: ?loading=1 holds the ghost, ?loading=2500 holds it 2.5s, ?state=empty / ?state=unavailable draw the other states.
<!-- head -->
<html lang="en" data-sk> … <link rel="stylesheet" href="/lib/skeleton.css"><script src="/lib/skeleton.js"></script>
<!-- a board: the ghost twin first, the real one after -->
<div id="boardG" data-sk-ghost></div><div id="board" class="your-grid" data-sk-real></div>
// JS: paint the ghosts first, then the page, then open the gate
const SK = window.CadeSkeleton;
boardG.innerHTML = SK.boardGhost(8, { cols: 4, label: 'Loading the markets board.' });
heroG.innerHTML = SK.heroGhost({ kicker: 'Live now', lines: ['Call it.', 'Get paid.'] });
chartG.innerHTML = SK.chartGhost({ height: 380 });
feedG.innerHTML = SK.tickerGhost();
oneSeat.innerHTML = SK.cardGhost(); // one card's seat, e.g. while a single market refreshes
SK.gate().ready(fetchMarkets()); // or .ready() when the data is local
if (SK.query.state === 'empty') board.innerHTML = SK.empty({ title: 'Nothing live', copy: '…' });Cards
Call the
next play.
Short markets on every drive. Pick a side before the snap.

3 minutes01:50Will $POPCAT close higher?
Run or pass on the next snap?
Will $NVDA close above $182?
Card states
Will $DOGE close higher?
Will $DOGE close higher?
Will $PEPE close higher?
Will $SOL close higher?
Day 1 · Sep 14Troll beat Fartcoin


$ANSEM
HIGHER
ENTRY $200 · PAID ×1.86
Their MemeMadnessAllStarCard silhouette, chip, split and bolt, in the default look (dark). Ours: ONE identity slot, the medallion family (coin art, the brand mark on the brand's face, two team octagons), more air (padding 9cqw; on /home 36 between cards, 44 between rows), no category tag (the chip already says it; the tag now speaks only for a state), POOL instead of POOL SIZE. One fixed identity band, so questions in a row share a line. The pool is compact ($64.2K). The whole card is the link, the bolt is its own control (named "Quick predict: get early access", a paper focus ring on the dark faces, black on cream), the split is not a side picker. Hover: their translateY(-4px), and the keyline steps up one tone. /lib/category.js card(), mark().
One card, three looks, set by data-look on the card, the board or any ancestor (on /home: ?look=dark | cream | edge). Dark (default): the hero panel's face #1A1816, a #2E2A26 keyline, paper type; the yellow clock and the green / red split are the only colour, so the board blends with the page. Cream: their paper cleaned to #F3EEE1 with ink #141414 and a real black keyline. Edge: the arena panels' material (#161514) with the keyline in the category tone at rest 55%, full on hover. Hover shown on the second card of each look.
Loading never shows invented numbers; unavailable is not zero. Long names ellipsize on one line.
Their CadeLandingMobileAllStarBoard, in the default look (dark): rows lead with the market's medallion and its clock as the card's yellow chip in small (sports keep the period), then the question, the market's metric and the pool; 44px price buttons and filter tabs, labels floored at 10px. Price buttons: their colours and 54 x 44 size, the shape calmed to the approved parallelogram (a 6px lean, a thin ink keyline, a 2px hard shadow). The filter names every category in full (MEMECOINS, never COINS); its tabs size to their words. On /home the rows are 120px at 390 (theirs 94). /lib/category.js board(), row().
The featured round's two picks on /home, phone and desktop alike: a calm diagonal plate, the parallelogram approved for the /landing/v2 pill (M12 1H189L178 64H1Z), in the outcome colour (green with ink, red with white), a 1.5px ink keyline and a 3px hard shadow; the label in the SHOUT voice. At least 44px tall (a 44px hit band below that). Hover lifts 2px, press and the held pick sit down on the shadow (aria-pressed), the side not taken steps back (aria-disabled). Sports say YES / NO. Replaces their heavier notched CTA plate here (owner 2026-10-02: in our style, not too much shape). /lib/category.js pick().
Their homepage section heading: the orange star, the SHOUT title in paper, a quiet mono count. One part for every board page (/markets uses it as its h1, sized by --ch-fs). /lib/category.js heading().
A memecoin or stock market opened in place (the preview has no market page): a modal dialog on a dimmed ground with no panel of its own, so the live chart's plate is the one box. The medallion, the question, the yellow clock chip and two metrics, their live chart (/lib/live-chart.js), the split, the two round picks; a pick opens early access. Escape, the backdrop and Close dismiss it; focus returns to the card. Shown here inline and still. /lib/category.js sheet().
Their CadeLandingCoinPlate on hero-plate-orange / violet: a coin medallion, a team badge or a ticker badge, with their odds chips. Desktop, arena and phone geometry. /lib/category.js duel().
The top of a category's board, one part per filter (/lib/category.js hero(), styles in category.css): memecoins and stocks carry the shout, the line, the stats, their head to head (DOGE vs PEPE, bulls vs bears on $NVDA) and the category's live round; sports is compact, the door to /sports/ beside the featured game; All opens the three categories by their tiles with the live counts. Swapped with the board filter on /markets with one slam. Shown here in ?static.
Demo · DOGE · 1-minute round
Real-time predictions,
only on cade.market
Used sparingly, never as decoration (/lib/category.css 23). The question plate (.ci-qplate) from Scotty's explainer carries a section's kicker: the round's kicker on /home and /sports, the code on 404 / 500, the rules' lead line; its padding is paid back by negative margins, so nothing moves. The hazard tape (.ci-hazard, the CLOSED shutter's band) marks an empty board (CadeSkeleton.empty). The end card's line sits under the mark in the shared footer.
One live round, one implementation (/lib/category.js round()) for /home, the category heroes and the /sports featured market: our chart (/lib/replay-chart.js, price:true: the smooth line, the dashed yellow LINE, lime above and red below, the live value at the tip, the vs-line readout, the clock), the two round picks that drop the YOU chip, what each side pays under its pick, the note, Pool / Closes / Settles on; the shutter and CLOSED at the cut, the outcome stamp on the picks at the bell. Wide from 760: the copy and picks left, the chart right. The first runs live; the phone one is still.
Their CadeLandingFeed band around the ticker. The pause is inside the band, before its arrow-cut end: no plate (it sat box in box on the cut, owner 2026-10-02), the band's own type in the quiet ink after a hairline, the word saying the action (PAUSE / PLAY), the hit area 44px tall. /home, /markets and /sports share it.
The single market page's parts (/market/?m=DOGE), ported from their duel-frame (MarketDuelPanel, MarketPredictTicket, MarketActivityPanel, MarketTermsPanel, the coin-empty panel): the torn plate and rail card (DS_PANEL_CLIP, compact tear under 1080), the chrome row with the lane tabs (the shared .cfilter / .ntab), the header with the round clock, the MARKET CAP / PRICE reading and its delta plate, the volumes, MARKET ACTIVITY, the ticket (their QuickPredictControls, .qp-*), YOUR POSITIONS, MARKET TERMS, the no-live-market panel. Ours: no FOMO link, fixed stake chips ($10 / $50 / $100, their fixed-usd preset), "--" where theirs prints an em dash. /lib/duel-frame.js + .css.
Sports
The game's two teams as medallions (the NFL in the house helmets, the art of the sports duel; the NBA as team octagons, colour and abbreviation), the score in DATA, the period on the card's yellow clock chip. No plate of its own (/lib/category.js scoreboard(), clock()). The /sports hero and the sports hero on /markets use it.


/football · scheduled, live, halftime, final, feed lost · what the feed drives · the run in four frames · how a play is drawn · the play, timed · in their tokens
/basketball · scheduled, live, halftime, final, feed lost · what the feed drives · the shot in four frames · how a shot is drawn · the shot, timed · in their tokens
Ours, from their parts: two team badges, the score, the win odds on the welded split. Each row opens its game centre. /lib/category.js gameRow().
The /sports/ parts, /lib/sports.js (CadeSports) + /lib/sports.css, no new shapes: the game card on the All Stars shell in its five states (live, halftime, feed delayed, final; scheduled lives in the schedule row), the league tabs (the board filter, leagues not live yet disabled with Soon), the schedule and calls rows of their board, the playoff teaser on their team badges, the round steps, and the featured live game (their MatchScoreboard, the gameday field, MarketOddsSparkline, the Yes / No picks) on DS_PANEL_CLIP.
Brand
Banners · every colourway
App icon and social





Patterns
Daily Titles
The Board
Biggest single win
The Smasher
Not awarded
Payout
–Most predictions
The Grinder
Not awarded
Picks
–gnarzilla
Net P&L
$0.00Predictions
2Win rate
50%1W · 1LVolume
$400.00Best call
$150.00[ 01 · The receipts ]
Eight days. Eight battles.
K.productNav(host) on every page except the landing: K.navLive with the five items from CadeSitemap.NAV (Home · Memecoins · Sports · Stocks · Leaderboard), no gift, Sign In on the right. The current item (CadeSitemap.current(location), never set by hand) wears their cream plate: #F0EAD9 face, 2px ink keyline, ink label, aria-current="page". Transparent at the top of a page, the black band and dot field once it scrolls (.stuck). 961 to 1180 the row tightens to 26px type, 26px gaps. Below 961 the phone bar and the tab bar take over (next). Click Sign In: the real modal.
The page
The page
Below 961: K.tabBar(), mounted by K.productNav on <body>. Their MobileAppBottomNav: 61px, #000 ground, a 2px rgb(52 52 52) top rule; Home · Memecoins · the raised C-mark centre (the live board) · Sports · MORE, glyphs only (the label is the aria-label). Current slot: #FFA800 glyph + a 2px #FFA800 top rule; the centre turns #FFA800 with an ink C. MORE opens their MobileNavMoreSheet: the torn top edge, grabber, KEEP EXPLORING / MORE FROM CADE, rows for Stocks, Leaderboard, Profile, How it works, Terms, Privacy Policy, and the Sign In slat pinned at the foot. Focus trap, Escape, backdrop and the close square shut it; focus returns to MORE. The top bar keeps the mark and Sign In, no hamburger. Here both are drawn inside a phone frame.
lib/signin.js + lib/signin.css, a 1:1 port of their app/login AuthPage: the warm-paper ticket (#F0EAD9) with its torn clip and side dot fields, the red close square, the black CADE mark, SIGN IN over CONNECT WITH EMAIL OR GOOGLE, the orange email slat and the cream Google slat, New to Cade? Create account (early access), the dotted rule, POWERED BY PRIVY. Desktop (961 and up) opens it as a modal in place over rgba(0,0,0,.58): focus trap, Escape, a click outside closes, focus returns to the opener. A phone goes to /login/?returnTo=<path>: the same ticket as a page, no clip, --auth-unit 1.25px. Both are live: walk the email path.
The states, each drawn by CadeSignIn.render() and stepped by its own controls (at --auth-unit .9px to fit the column; live at 1.5px desktop, 1.25px phone). Sign in with email opens the email step; Send link checks the address (an invalid one gets the red keyline and ENTER A VALID EMAIL ADDRESS), the slat goes busy (signin.css [data-busy=true]: grey edge, #d8d6d3 face, the glyph at 42%) while it sends, then CHECK YOUR EMAIL with the green tick, Use a different email and Resend link. This is a preview with no backend: Continue with Google shows their recovery note (a 3px #FF5A1F rule) instead of leaving.
K.cookieBanner(), their AnalyticsConsentBanner: once per visitor, bottom-left, 16px in; #161514 on a 3px #FFA800 keyline, a 7px hard shadow, width min(22rem, 100vw - 2rem). NO and YES are equal in weight, decline first; Customize opens the three categories with their switches (Necessary locked on), Save preferences, Expand details. The choice is kept in localStorage; the footer's Cookie preferences reopens it. On a phone it sits 16px above the tab bar. In this specimen No, Yes and Save are caught so nothing is stored.
500
That one is on us, not you. Nothing you did broke it. Take another swing.
lib/system-pages.css (.sp-status), their ArcadeErrorPage: the landing hero's torn panel (shadow, face and outline art in /assets/status/), the conic rays behind the headline, the code chip ([ 404 ] orange, [ 500 ] the soft red #F24B61), the double-printed Barlow 800 italic line, one line of Futura PT, ONE orange slat (Return home on the 404; Try again on the 500, which goes back to the page that failed or reloads). The product header and footer stay on, so there is no second button. The panel scales with its container (100cqw / 960); below 720 it takes the phone sizes. Pages: /404.html, /500/.
How it works
The rules of a Cade round · Last updated: 2 October 2026
Pick a side. One pot. No house.
Cade is a prediction arcade. Every market asks one question with two answers, and the side that calls it splits the other side's money.
1. The round
Your pick. Choose a side and an amount. You can add to your side while the round is open. A pick is final once it is placed.
4. How winners are paid
Worked example
| Step | What happens | Figures |
|---|---|---|
| 01 | The round closes with $5 on Higher and $20 on Lower. You have $1 on Higher. | Pot $25 · Higher 20% · Lower 80% |
| 03 | The fee comes off the losing pot. | $20 less 5% = $19 |
lib/system-pages.css (.sp-legal), the construction of their LegalDocument (/official-rules, /terms, /privacy-policy): Back to Cade, one black article on a 1px #27272A keyline, the title in Futura PT Cond over a 2px #FFA800 rule, the date line, the JetBrains Mono table of contents in orange, numbered headings on hairlines, bold lead terms, the zinc table (scrolls inside itself below 620px). Gutters 16 / 24 / 32 at 640 and 1024, the article 20 / 40 / 56. An excerpt here; the page is /rules/.
Ours, owner approved 2026-10-03 ("un frame bun, ceva creativ, ceva cade"): the one piece where a new illustrated object is allowed. A vertical explainer plays as the screen of an illustrated Cade arcade cabinet (Cade, the Prediction Arcade), one implementation: CadeExplainer.mount(figure, VIDEO) in lib/explainer.js, dressed by lib/explainer.css; used by /landing/v3/ How it works. The cabinet is one inline SVG on a 400 x 750 grid (marquee, violet rails, bezel, control deck, a short lower body with their starburst and a small coin door; trimmed from 400 x 850 on 2026-10-03 so it fits one 1280 x 800 screen), ink outlines, a hard shadow. On it, house parts only: the CADE display mark lit on the marquee, a CRT glass over the video, the big PLAY plate (HERO_CTA), the split bar lit on the screen's lip as the progress (lime watched, red to come; a range input over it seeks; chapter notches named on hover / focus), two real arcade buttons (green plays / pauses, red turns the sound on / off, both at least 44px), the MarketCard clock chip stuck on the deck counting the video down, their speech bubble YOU, the kit's coins, their starburst as one soft beat of light behind. States: data-state poster, playing, paused and data-sound on, off; nothing changes size between them. Lazy (loads within 600px of the screen), muted autoplay while half in view, pauses off screen, reduced motion and ?static wait on the poster with the big PLAY plate (it starts with sound). No LIVE tag, no INSERT PICK, no caption plate (owner, 2026-10-03): the caption and note are read out as the video's aria-label. The chapter under the playhead is set as data-chapter on the figure and sent as an xf:chapter event, so a page can light its own steps in sync (/landing/v3/ lights its 1, 2, 3). This specimen plays the landing's own files.
Icons
31 glyphs · 32 grid · theirs, 1:1 · click to copy
Layout
Their GridOverlay, 1:1 · ds-tokens dsGrid
Handover
Take the tokens
Same part, two names
| Part | Ours | Theirs |
|---|---|---|
| MarketCard | .mcard · lib/marketcard.js | MemeMadnessAllStarCard |
| Split bar | .ssb | market/ShareSplitBar |
| Battle bar | .race | VolumeRaceBar |
| LIVE tag | .livetag | badges/LiveTag |
| Status badge | .notch | badges/StatusBadge |
| Buttons, plates | .shape[data-s] | CadeLandingShapes |
| Focus | outline 3 #FFA800 +3 | cade-landing .hit |
| Nav | K.nav() | NavItem · WalletButton |
| Category rail | catRail() | SportsTab |
| Gridiron | gridironP() | playfieldviz-gridiron |
| Event slat | eventSlat() | SoccerEventPanel |
| Pick slabs | pickSlab() | SlatButton |
| Clip shapes | chapter 04 | packages/shapes |


