Embedding • 20,721 player-seasonsjapandi v4 • 64-d→2-d • LOD 4k/8k • DPR1 • zero-deps

Twenty thousand seven hundred nineteen chimera.

One model, three sports, 20,721 player-seasons. Basketball back to 1996-97, American football from 2016, and football by competition — each encoded to the same 64 dimensions so a player's nearest neighbour can come from a game they never played. The map below is the first two principal components of that space, drawn from the model's own export rather than a stand-in.

paper #F9F6F0void #1E2022pop #C17C6044px mono navstone hairlineradius 12/16soft shadowmodular IIFEs
1START • void #1E2022

Who moves like this, in another sport?

One space holding 20,721 player-seasons from three sports — basketball, American football and football — encoded by one model so that a point's neighbours can come from a different game than its own. That is the whole question this map exists to answer.

Click Start exploring or scroll. Stone hairline, 12px radius, soft shadow.
2ALL • 20,721 player-seasons

Every player-season, one dot.

20,721 of them: 12,966 basketball, 5,325 American football, 2,430 football. Each is one player in one season, encoded to 64 dimensions and shown here as the first two principal components of that space. Gray for now, so you read the shape before the labels.

LOD 4000 scrolling, 8000 idle. DPR1 crisp, battery kind. Canvas only.
3SPORTS • three, almost on top of each other

The sports do not separate. That is the result.

Colour the same dots by sport and the three centroids sit within 0.11 of each other across the map's width, while a single sport's own spread averages 0.24. They overlap far more than they separate — and that is the model working as designed. Stage 2 trains a gradient-reversal head whose job is to make the sport unguessable from the embedding. A classifier manages 0.632 against a 0.626 majority baseline: six thousandths better than always answering "basketball".

Centroids are computed in your browser from the dots on screen.
4BASKETBALL • 12,966

The biggest contributor, and the widest.

12,966 player-seasons, 63% of the map, reaching back to 1996-97. It has the largest spread of the three, so lighting it alone lights most of the cloud rather than one region of it.

Terracotta #C17C60. Highlighting a sport is a filter, not a ranking.
5AMERICAN FOOTBALL • 5,325

The most displaced of the three.

5,325 player-seasons from 2016 on. Its centroid sits furthest from football's of any pair on this map, at 0.111 — which is still less than half the average within-sport spread, so "furthest apart" here means the two clouds still sit inside one another.

Stone blue #7A9BB5.
6FOOTBALL • 2,430

The smallest, and the tightest.

2,430 player-seasons, grouped by competition rather than league year — World Cup 2018, Euro 2020, Serie A 2015/2016. It has the smallest spread of the three. 64 dimensions down to 2 loses local distance; we do not claim tighter than truth.

Moss #8A9A8B. Terracotta stays the only filled action colour.
7NEWS — TOWER 4

What's being said — currently nothing.

The news tower is wired and its fetch is honest, but the file it reads (assets/news/news_features.json) carries 0 entities and 0 items as of 2026-08-21, so it is contributing a zero vector. It is shown here because it exists, not because it is doing anything. It does not feed the map above.

Recency exp(-days/7), burst_3d z, league_sent. SHAP ≤0.15 prevents narrative overfit.
8ROSTER • 12 tiles

Then, the names — and who they rhyme with.

Four player-seasons per sport, and for each one the closest player-season from a different sport in the same 64-d space. That pairing is the only thing a joint embedding can do that three separate models cannot. Click a tile to ring it on the map.

Scroll to Ranks or News.

Roster — 12 real player-seasons

Left stripe = sport, same colours as the map. Four per sport: the one nearest that sport's mean embedding, then three chosen by farthest-point sampling so the tiles span the sport instead of resampling its centre. Each tile's two figures are the closest player-season from a different sport and the cosine similarity to it, both computed in the 64-d joint space and read from assets/unified_roster.json.
NEWS TOWER • AI AGGREGATION • JAPANDI v4 • 16-d 0.15 weight • honest 503

What’s being said about them.

Real RSS — union of all espn_all / reuters_sports / sec_8k / yahoo_finance / nfl.com / nba.com. This describes what the news tower is built to read. It is not currently reading it: assets/news/news_features.json was last written 2026-08-21 and holds 0 entities and 0 items, so the tower contributes a zero vector and there is no daily ingest running behind this page. The tower does not feed the embedding map above. Fusion 0.60*tca+0.25*taa+0.15*news L2 prevents narrative overfit. Zero-vector fallback if 503 >3 days.

Loading news tower… honest 503 if sources down — provenance 7/7/0→14/14 LCG 20260813→189831298 triple[11205,19448,14209] fusion 0.60*tca+0.25*taa+0.15*news
Sources: espn_all / reuters_sports / sec_8k / yahoo_finance / nfl.com / nba.com • LCG 20260813→189831298 triple[11205,19448,14209] • ?daily=YYYYMMDD&n=1/3/5 same-link-same-stars • 12,966 pts • PWA v67 offline13k • CORE20 • stone-200 hairline • terracotta single pop • JAPANDI • NEWS TOWER

Editorial void card inside warm paper

Paper #F9F6F0 page, soft charcoal #1E2022 inset 16px radius. Same move as Pudding Similes — text warm white, margin calm 24px, single terracotta action only when you mean it. Grain radial 24px subtle.

Zero-deps • LCG triple same-link-same-stars • modular IIFEs

Same tech as hoops v2 daily: ?daily=YYYYMMDD&n=1/3/5 → [11205,19448,14209] deterministic. Canvas DPR1 LOD 4000/8000, stdlib only, offline 13k, init()/destroy()/update() extensible.