The Museum

Not a thank-you list. A record of what open source actually did.

Every entry below is compiled from the import ledger at build time. Each one names the file that was read, the licence it carries, what was taken from it verbatim, and what we changed and why. Three of them carry the code on both sides.

Compiled from references/IMPORT_LEDGER.md. Regenerate with node tools/build-museum.mjs. If this page and the ledger disagree, the ledger is right and this page has not been rebuilt.

A moon jar, thrown and glazed. Drag to turn it.
  • 37imports recorded
  • 23named authors
  • 23read line by line
  • 7licence unknown, flagged

The featured stations

Station · book-flip-page-turn

The page turn

BEFORE style.css lines 31–52 of 354

the reference

ExcerptThis page records turn.js as not licensed for our use. Twenty-two lines are quoted to show what was read; the file is not republished.

AFTER ember-book3d.css lines 195–216 of 686

ours

685 linesOurs. Shipped in EMBER as shared/ember-book3d.css. The copy served here is byte-identical to the one the application loads, a check in the build refuses to pass if the two ever differ.

Why this way

A book that turns is the whole reason a reader believes it is a book. The reference is turn.js, and turn.js is not licensed for what we needed, so the mathematics were re-derived from the reflection model rather than copied.

What we rejected, and why

Four sessions of a real 3D page turn were deleted. It never held 60fps on a 2GB device, and at 390px it produced 28 characters per line, below the readability floor, which is the one number a reading application may not lose. The maths survived as the transition; the 3D did not survive at all.

Station · sticky-stretching-cursor

The stretching cursor

BEFORE script.js lines 48–62 of 168

the reference

ExcerptNo licence was stated with the original. Fifteen lines are quoted to show what was read; the file is not republished.

AFTER ember-cursor.js lines 45–59 of 417

ours

416 linesOurs. Shipped in EMBER as shared/ember-cursor.js. The copy served here is byte-identical to the one the application loads, a check in the build refuses to pass if the two ever differ.

Why this way

The cursor stretches toward what it is travelling to, which makes a pointer feel like it has mass. Every constant below is the reference’s own.

What we rejected, and why

The reference imports gsap and vecteur from esm.sh at runtime. A site that fetches its own behaviour from a CDN cannot claim to be offline-first, so the two calls were replaced with a two-line lerp and direct style writes. mix-blend-mode: difference was removed as well: it computes the glyph underneath into the disc, which is the reported "letters show through" artefact.

Every import

Grouped by what it became, never alphabetically.

Licence

Method

18 imports

Interface

What a reader touches. Cursors, palettes, carousels, page turns, the parts of EMBER that respond to a hand, and the places where somebody else had already solved the motion.

08-vantara-hub.html

PARTIAL

Licence unstated · a Framer template, captured as a reference

What was taken

The design system of this entire site, and it is the largest single debt here. Measured off the capture: the ground #F7F4ED, the ink #121820, the muted #5F6670, the bronze #B68A5E and its 30% hairline, the card glass at 0.72, the 24px card radius and the 100px pill, the three blur strengths (8, 9, 18px), and the card shadow, 0 24px 50px -20px over an inset 0 2px 20px white bloom, which is the one declaration that makes a surface read as lit glass instead of a grey rectangle. Later, the plate: a horizontal cream scrim over a photograph at 0%, 35%, 65% and 100% with alphas 1, 0.92, 0.55 and 0, plus a bottom-up fade over the last 23%.

What changed

The scrim’s STOPS are verbatim; its colour is not, and could not be. The reference mixes that gradient against its own ground of #F5F1EB and ours is #F7F4ED, so the literal would have left a two-value seam on every edge where a plate meets the page. Two text tokens are also darkened inside a plate, --muted to #535A64 and --bronze-text to #7A5024, because the reference never puts small grey type over the 0.86 part of its own scrim and we do. At the site values they measured 3.84:1 and 3.66:1 against a dark photograph, which fails AA.

What is unresolved

No licence was stated with the capture. Framer templates are licensed to the subscriber who uses them, and no template file, component or line of its code was copied, what was taken is a set of measurements off a rendered page, which is how you would measure any building you admired. Recorded here because that is still a debt.

stacked-cards-with-autoplay-vanilla-javascript-css

DERIVED

MIT · Ecem Gokdogan · codepen.io/ecemgo/pen/yLWJvQx

What was taken

The rotation mechanic behind the picture panel in the Arc Citizen card. The front layer is the LAST child and rotating means animating it out and moving it to the front of the list, so depth is expressed by :nth-last-child() and there is no index in JavaScript to fall out of step with the DOM.

What changed

The fan is not taken. The reference offsets each layer by 30px and flips the leaving card 65 degrees on its Y axis; inside a panel with a hard edge that reads as a mistake, so these sit exactly on top of one another and the one leaving slides down out of the clip. Crossfading was tried first and abandoned, two photographs this different double-expose at the midpoint. The 1200ms reparent delay is read from the stylesheet at runtime rather than restated in the script, so the animation and the DOM move cannot drift apart.

What is unresolved

Nothing. The licence is stated, the author is named, and the file is at references/stacked-cards-with-autoplay-vanilla-javascript-css/.

Bootstrap Icons, bi-apple, bi-microsoft

VERBATIM

MIT · The Bootstrap Authors · via Fonticons’ Web Awesome sprite

What was taken

Two path definitions, unmodified, for the Apple and Microsoft marks on the sign-in buttons in the Arc Citizen card.

What changed

Microsoft’s single path is split into its four rectangles at the same coordinates so each can carry its own colour, because the real mark is four coloured squares and a monochrome grid is a different logo. Apple’s is untouched and inherits currentColor.

What is unresolved

The paths are MIT. The MARKS are trademarks of Apple Inc. and Microsoft Corporation, used only to label a button that signs you in with that service, which is the use both companies publish brand guidance for. Neither company endorses this.

Google identity mark

VERBATIM

Trademark · Google LLC · the mark Google publishes for this button

What was taken

The four-path “G”, unmodified, in its published colours #4285F4, #34A853, #FBBC05 and #EA4335.

What changed

Nothing. A redrawn or recoloured version of this mark would be worse in every way, including legally.

What is unresolved

It is a trademark, not a licensed asset, and it appears only on a “Continue with Google” control, the use Google’s own branding guidelines are written for. Google does not endorse this.

night-depot hero devices

PARTIAL

Licence unstated · generated by an outside model

What was taken

Two devices, both on /ember-schools. THE HEADLINE PAIRING, a light italic line in the display face with a much larger heavy line beneath it, one sentence broken across the two. THE TICKET, a perforated ticket whose notches are two radial-gradient masks, one anchored to each end at 51% width so they overlap and leave no seam, with a hard offset shadow (3px 4px 0, no blur) and a dashed rule between serial and action.

What changed

The source is a nocturne: plum, near-black, a train at bedtime. This page is for schools, so the ground stayed cream and the ticket is printed on it: the devices are the loan, the mood is not. The heavy line is weight 700 rather than the original 900 because the Fraunces file this site ships genuinely stops at 700; asking for 900 would render 700 anyway and leave a number in the stylesheet that lies about what is on screen.

What is unresolved

No licence was stated with it. Produced to a brief written for this project; the original is kept at DOCS/ChatGPT Prompt to Ox Alpha v5.html.

moon-jar raymarcher

DERIVED

Licence unstated · generated by an outside model, brief written here

What was taken

The entire fragment shader: the revolved vessel SDF (ellipsoid body, foot, neck, lip torus, smooth-min blended, minus an inner cavity so the wall has thickness), the single spot with cone falloff and inverse-square attenuation, the sphere-traced soft shadow, the five-tap AO, and the glaze treatment, throwing rings as an analytic banded normal slope, iron speckle as a world-space cell hash, and the wavy glaze boundary with runnels that is the best thing in it.

What changed

The room was removed. The original stands the jar in a dark interior; here the canvas writes alpha 0 for background rays and fades the floor out with the same curve that fades its colour, so the page’s own ground is the backdrop and there is no canvas edge. The vermilion accent became bronze. The wheel-zoom and its preventDefault were deleted: this site does not take the scroll from the reader. The loop parks off-screen behind an IntersectionObserver and the pixel budget was cut from 2.6M to 900k, which is 1.42ms a frame here.

What is unresolved

No licence was stated with it. It was produced to a brief written for this project (DOCS/13-OUTSIDE-MODEL-BRIEF.md) and is treated as ours to use, but the provenance is recorded rather than assumed. The unmodified original is kept at DOCS/Ox Alpha AI.html and the build that derives from it at tools/vessel/.

sticky-note-aside

VERBATIM

MIT · Christian Alder

What was taken

transform: perspective(1px) rotate() [37]; shadow as ::before on the wrapper with border-radius: 0 0 100px/5px 0 and filter: blur(2px) [41-48]; aspect-ratio: 1/1 [58]; noise + linear-gradient(165deg, transparent 84%, dark-25) [64-65]; border-radius: 0 0 75%/10% 0 [70]; border-bottom 2px / outline 1px / outline-offset -1px [74-76]

What changed

Shantell Sans is a Google Fonts fetch, cannot be used. The hand is --font-hand (book serif, italic), which is the distinction ember-annotate already drew.

sticky-notes

VERBATIM

MIT · Gibson

What was taken

perspective: 1600px [13]; rotateX(5deg) [27]; the box-shadow pair [28-29]; textarea rules [35-56]; rotation = velocity × -0.003 [56]; grab/release timelines [136-183]; isOverlapping [188-200]; focus-disables-drag [99-116]; save/restore [239-272]

What changed

GSAP Draggable is a paid Club GreenSock plugin, the reference's own first line says so. Rewritten on pointer events; InertiaPlugin.getVelocity → two-sample finite difference. Positions stored as fractions of the anchoring block, not viewport pixels (the reference's rect.left + scrollX would misplace every note on reflow). Its trash bin deletes on overlap; ours tucks.

sticky-stretching-cursor

VERBATIM

MIT · Sikriti Dakua

What was taken

lerp 0.1 both axes [20,26]; atan2(delta)·180/π [53]; `distance = \

What changed

delta\

carousel-with-drag-and-wheel

VERBATIM

MIT · Fabio Ottaviani

What was taken

speedWheel 0.02 [12]; speedDrag -0.1 [13]; getZindex [18] transcribed; displayItems [26-30]; clamp + floor [36-38]; click bias [47-48]; transform-origin: 0% 100% [36]; transition .8s cubic-bezier(0,0.02,0,1) [41]; the four --x/--y/--rot/--opacity expressions [19-22]

What changed

Renders 11 nodes for any page count, the window is the reference's own constant: solve its opacity ramp and only 7 of its 10 cards are ever visible. $items.length splits into a spread divisor (stays 10) and a fade divisor (live window). Fixed step → ballistic. Seven document listeners → three pointer listeners. Axis is three multipliers; the expressions are untouched.

parallax-depth-cards

PARTIAL

no LICENSE.txt

What was taken

The two-easing pairing: cubic-bezier(0.23,1,0.32,1) into the tilt, cubic-bezier(0.445,0.05,0.55,0.95) out

What changed

Only the easing pair was taken, as --ease-tilt / --ease-untilt. Licence unknown, flagged. Two cubic-bezier values are not copyrightable expression, but the folder should be licence-checked before anything structural is taken from it.

book-store-ui

PARTIAL

no LICENSE.txt

What was taken

Shelf geometry, .book-card / .book-cell proportions, sticky header pattern

What changed

Colours, type and spacing all ours. Licence unknown, flagged.

evasion-e-commerce-template

DERIVED

no LICENSE.txt

What was taken

Introduction/landing structure only

What changed

No CSS copied. Licence unknown, flagged.

book-storewebsite-design

DERIVED

see folder

What was taken

3D cover treatment approach

What changed

Its backdrop-filter deliberately not taken, violates NO BLUR.

solid-command-palette-main

VERBATIM

MIT · Aditya Agarwal · v1.0.0

What was taken

getFormattedKey() copied value for value from src/lib/KbdShortcut/utils.ts:4-18: Meta → ⌘, Control → Ctrl, Escape → Esc, everything else through unchanged. The nested <kbd> structure from src/lib/KbdShortcut/KbdShortcut.tsx:22-30: a shortcut is a list of GROUPS, each group a list of KEYS, every level its own <kbd>. The $mod convention it binds through in src/lib/createKbdShortcuts.ts:28, Meta on Apple, Control elsewhere.

What changed

It is SolidJS + tinykeys, and this codebase has no dependencies, so parseKeybinding is written in shared/ember-shortcuts.js, to tinykeys' semantics, not invented ones: + joins simultaneous keys, a space separates sequential chords, $mod resolves per platform. A different grammar would have made the reference's own formatter meaningless. CSS modules → tokens. Unchanged: the glyph map, the nesting, $mod.

pressure-sensitive-canvas-master

UNSTATED

⚠️ NO LICENCE, no LICENSE file, no license field in package.json

What was taken

Nothing.

What changed

Opened src/components/PressureCanvas.vue, all 136 lines. Its entire pressure model is lineWidth = pressure * brushSize (:39-40) with no tilt, no smoothing, no thinning, no palm rejection, shared/ember-draw.js is already a strict superset (pressure + tilt at TILT_GAIN 0.55/TILT_CAP 60° + palm rejection + per-tool thinning/smoothing/streamline). The one useful thing in it is :113's event.buttons != 32, the stylus eraser-button bit; that is the Pointer Events spec's constant, not the reference's expression, and it is implemented in EMBER from the spec. Licence unknown, flagged, and nothing taken.

2048-game → games/g2048.js + g2048.css

VERBATIM

MIT · Cam Song · codepen.io/camsong/pen/poveQM

What was taken

The whole game: dist/script.js and dist/style.css. The grid model, the merge rules, the tile colour ramp from 2 to 2048, the slide and pop animations, the score actuator and the keyboard and touch input managers are all the reference's, unchanged.

What changed

Two things, both forced. Every CSS selector is scoped under .g2048. The original styles .container, .title, .heading, .lower and .important at the top level; none of them collide on this site today, which is exactly the condition under which this project has shipped the same one-name-two-meanings bug fifteen times. And its bootstrap ran on DOMContentLoaded, which is right for a script in its own page and useless here: the games load on approach, long after that event, so the board would have stayed empty. It now starts immediately if the document is already parsed. No value, colour or rule was touched.

Why it is in here

Because it is somebody else's work and this page records those. A game in the museum is still an import.

t-rex-runner → games/dino.js + dino.css

PARTIAL

BSD 3-Clause · 牛さん · github.com/wayou/t-rex-runner

What was taken

The whole game, and the whole game is index.js: the physics, the 600×150 sprite sheet and its two densities, the speed ramp, the obstacle generator with its duplication limits, the night cycle, the three sound buffers and every tuning constant. All of it is the reference's. The sprite PNGs ship beside the file, unmodified.

Where it came from before that

This is a fork of Chromium's neterror/resources/offline.js — the game a browser gives you when the connection drops — also BSD. So the museum now contains a browser's error page, which is a reasonable thing for a room about where things come from to hold.

What changed

Six scopings and one restoration. The reference assumes it is the whole page, which is true of an error screen and false inside a card: it put arcade-mode and inverted on document.body, measured its scale against window.innerHeight, looked up .icon globally, gave its touch catcher 100vw × 100vh, and booted on DOMContentLoaded — an event long past by the time a deferred file arrives. Left alone, the night sequence would have inverted the entire museum.

And one thing it binds that it should not

The reference listens for keys on document and calls preventDefault on space. On an error page that is correct. On a page this long it means the space bar stops scrolling. Every event now passes an arming gate first: a pointer inside the strip takes the keyboard, a pointer anywhere else gives it back, and the line under the game says which it currently is. The game itself is untouched — the gate only decides whether you are in it.

What is unresolved

Nothing in the licence. One thing in the code: the reference reads e.keyCode, which is deprecated, and a keydown can arrive carrying a correct e.key and a keyCode of 0 — measured here, on this page, with the game refusing to start. The value is filled in from e.key before the reference reads it. That is the same defect the 2048 port had one property up, and it is now two.

And it arrived less complete than its own source

Chromium's stylesheet carries .inverted { filter: invert(100%) }. The fork's index.css does not — the word does not appear in the file. The runner has been toggling that class against no rules, so the night sequence has never actually worked on the page it is published on. The declaration is put back here, scoped to the strip. It is the only import on this page that was repaired rather than adapted.

15 imports

Text and page

How a page is set. Layout, typography, the reading column and the shape of a book, the oldest problems here, and the ones with the most prior art.

book-layout

VERBATIM

MIT · Erin E. Sullivan

What was taken

.open-book 2em padding; cast shadow rgba(0,0,0,.5) 0 1em 3em; board bleeding -1em at radius .25em; the spine gradient stop for stop (7 stops); measure 28.125em; 2em paragraph indent; drop cap 3em/0.65; two columns above 50em at 6em gutter

What changed

Colours → tokens. Measure capped at min(28.125em, 62ch) so the constitution can never be widened by an import. .rd__book deliberately creates no stacking context, preserve-3d or isolation there makes the negative-z board paint over the paper.

pure-css-book-loader

VERBATIM

MIT · Aaron Iker

What was taken

6.8s duration, 18 leaves, per-leaf stagger i*1.86 / i*1.74

What changed

Keyframes are generated from the formula rather than hand-transcribed, so what ships is the reference's arithmetic and not my copy of it. Loader later removed from the reader entirely (it caused the ResizeObserver feedback loop); the token --dur-loader: 6.8s remains.

grid-experiment-no-3

VERBATIM

MIT · Jules Forrest

What was taken

Section grid 1fr 1fr with 1px rule; label riding the rule at top:-8px; headline spanning both columns; 58px lead headline; 22px deck; 40px page title; 44px stat at letter-spacing:-2px

What changed

Alfa Slab One / Source Serif Pro / Merriweather are Google Fonts fetches, cannot be used, offline-first. Display face is --font-display; weight and tracking carry the voice. Sizes → cqw clamps so proportion holds at every viewport.

stan-leein-memoriam-css-grid

VERBATIM

MIT · Brad Bales

What was taken

grid-template-columns: repeat(3, 1fr), grid-auto-rows: 1fr, gap: 1em; and the identity of the layout, clip-path: polygon() diagonals on the tiles with negative margins pulling them together

What changed

Eight tile-cut variants driven by --t so no two neighbours are cut alike. Demo's comic-book background images dropped.

css-coffee-table-book-effect

VERBATIM

MIT · Lynn Fisher

What was taken

The object transform perspective(60em) rotateX(58deg) rotateZ(-34deg) skewY(-7deg); the three-layer box-shadow; the layered gradient stack that draws the case

What changed

The reference is unreadable by design, a display object photographed at an angle. A book you cannot read is not a layout, so the case ships as .cf__case furniture and the tilt is not applied to live text. Stated rather than silently dropped.

responsive-comic-book-layout

VERBATIM

MIT · Chris Smith

What was taken

The nine-panel rhythm 400/200/200/200/200/200/400/200/200

What changed

Pages take blocks in runs of nine rather than by measured height.

css-grid-recipe-layout

VERBATIM

MIT · Olivia Ng

What was taken

The landscape ingredients/method split and its grid areas

What changed

Landscape fold physics added (leaf pivots about its bottom edge and tucks under), ours, not the reference's; the reference does not turn pages.

book-flip-page-turn

SUPERSEDED

MIT · Anya M

What was taken

Nothing in the shipping codebase

What changed

It is turn.js. Replaced entirely by a clean-room rederivation.

fonts.gstatic.com → assets/fonts/fraunces-*.woff2

VERBATIM

SIL OFL 1.1 · Copyright 2018 The Fraunces Project Authors

What was taken

Five .woff2 files: the variable roman (400 700) and italic (400 600) in latin, latin-ext, plus vietnamese for both. Byte-for-byte the files the @import fetched at runtime.

What changed

Nothing in the bytes. Location only: fonts.gstatic.comassets/fonts/. Not subset, not re-hinted, not renamed, not re-compressed. The unicode-range declarations were copied verbatim from Google's css2 response so the subset gating is unchanged.

fonts.gstatic.com → assets/fonts/dm-sans-*.woff2

VERBATIM

SIL OFL 1.1 · Copyright 2014 The DM Sans Project Authors

What was taken

Two .woff2 files, latin and latin-ext.

What changed

Four @font-face declarations collapsed into one. Google served the *same file* for each of the requested weights 400/500/600/700, DM Sans is variable and the API serves the axis, not instances. Four identical src: url(...) rules were replaced by a single font-weight: 400 700 range face. Bytes unchanged.

fonts.gstatic.com → assets/fonts/atkinson-hyperlegible-*.woff2

VERBATIM

SIL OFL 1.1 · Copyright 2020 Braille Institute of America, Inc.

What was taken

Six .woff2 files: normal 400, normal 700, italic 400, each in latin and latin-ext. Static faces, not variable.

What changed

Nothing in the bytes. Still gated behind html.easyread; no rule matches until a student turns easyread on, so the 81KB is never fetched by default.

FileExplorer/animated-file-upload/components/kokonutui/file-upload.tsx (kokonutui · MIT) → shared/ember-drop.js + shared/ember-drop.css

VERBATIM

MIT · kokonutui

What was taken

The idle illustration is SMIL and ports untouched: outer ring r=45, stroke-dasharray "4 4", animateTransform rotate 0→360 about 50 50, dur 60s; the envelope animate attributeName="d" dur 2s with both path stops byte-identical; the flap path; the arrow y2 "60;55;60" and the polyline points list, both dur 2s. The working ring: 14 circles, r from 150 stepping down by 10, cx=cy=120, stroke-width 10, stroke-dasharray "18% 40%", transform-origin 120px 120px, odd cw / even ccw at 8s linear infinite, nth-child(2n/3n/5n/7n) delays 0.2/0.3/0.5/0.7s, and the progress-mask arithmetic (progress/100) * 754. Asserted against the reference file itself in tools/fswrite.test.cjs §7, the path strings are compared byte-for-byte, so this row cannot drift without a red test.

What changed

The simulated progress is gone, and that is the substantive change. The reference fakes the upload: UPLOAD_STEP_SIZE = 5 stepped on a setInterval of uploadDelay / (100/5) = 100ms, so the ring always takes exactly 2000ms and always succeeds. Here the write is real and lands on the student's disk, so a ring filling on a timer would be reporting a completion nobody observed, the same class of thing as printing a latency nobody measured. The ring keeps its geometry and becomes indeterminate; where a real fraction exists (files completed / files total) it drives the mask through the reference's own 754 arithmetic. Colours are tokens: the four saturated hues would be raw hex outside foundation.css (a gate failure) and would fight R2 besides. The 8s and the four delays are tokens holding the same numbers: --dur-ring-spin: 8000ms, and the delays are --dur-row-stagger (100ms) × 2/3/5/7, which is what the nth-child series already was. linear is kept, spelled var(--ease-progress). The 5MB maxFileSize is not enforced: it guards a demo upload, and a local disk write is bounded by the student's own free space. Under reduced motion the CSS spin is animation-play-state: paused and the SMIL is stopped with pauseAnimations(), CSS animation properties have no authority over SMIL, so the obvious animation: none rule would have been inert.

FileExplorer/json-file-comparator/app/page.tsx → shared/ember-compare2.js + .css

VERBATIM

MIT · v0/shadcn scaffold

What was taken

findDifferences() at :100-186 is ported branch for branch: the primitive/null test with !==, the three difference types (missing_left when the left is undefined, missing_right when the right is, value_different otherwise), the array-vs-non-array branch that emits ONE difference and does not descend, the Math.max(objA.length, objB.length) array walk with an index past either end becoming a missing_*, the new Set([...keys(a), ...keys(b)]) union key walk with !(key in obj) deciding direction, and the dotted path built as path ? path + '.' + key : key for object keys and array indices alike. The four line states (none/changed/added/removed) at :21-22 are kept. tools/compare2.test.cjs §1 runs the ported function against twelve cases and §5 asserts the reference file still contains Math.max(objA.length, objB.length) and the same four type names, so this row cannot drift without a red test.

What changed

The line diff is CORRECTED, not copied, and that is the substantive change. The reference marks a line by searching the text for the differing KEY and tinting the line it appears on. That is wrong whenever a key name occurs twice, and it is wrong for every line below an insertion, add one line at the top of a file and the reference marks every line under it as changed. A real longest-common-subsequence replaces it; measured, inserting one line at the top now yields {added:1, changed:0, removed:0, same:3}. A removed run immediately followed by an added run is then zipped into changed rows so a one-line edit reads as one change rather than an add plus a delete, and the two halves sit on the same screen row. The LCS is O(n·m) so it is capped at 4000 lines a side, past that the two sides align by line number and the surface SAYS "aligned by line number (too large to align exactly)" rather than presenting a degraded diff as an exact one. Also: the reference is JSON-only and refuses anything that fails JSON.parse; EMBER's explorer holds .md, .csv and code, so the structural pass runs only when BOTH sides parse and a line pass runs otherwise, with the header naming which one ran. Colours are tokens, the reference fills added green and removed red; raw hex outside foundation.css is a gate failure and R2 keeps one ground, so each state carries a gutter character (+ ~) as well as an ink tint, which also survives print and colour-blindness.

FileExplorer/music-player-app/components/music-player.tsx + music-visualization.tsx → shared/ember-player.js + .css

VERBATIM

MIT · v0/shadcn scaffold

What was taken

The transport is copied value for value: play button h-12 w-12 (48px) rounded-full with hover:scale-105 over duration-300 ease-out (:230-236); skip buttons h-6 w-6 (:224, :246); shuffle and repeat h-5 w-5 (:216, :252); artwork aspect-square object-cover with hover:scale-110 at 500ms (:182-187); title text-xl font-bold truncate (:192); volume slider w-24 at a 0.7 default (:80, :278); playlist rows p-2 rounded-md space-x-3 with a w-10 h-10 art slot, text-xs sub-line and a w-2 h-2 animate-pulse dot on the track that is playing (:290-310); formatTime as m:ss zero-padded below ten (:154-158); the transport order shuffle · previous · play · next · repeat (:213-255); handleVolumeChange where a zero sets muted and any non-zero clears it (:136-144); and handleNext/handlePrevious wrapping at both ends (:122-134). From music-visualization.tsx the whole draw is copied: 64 bars, barWidth = canvas.width / bars, maxBarHeight = canvas.height / 2, the height + (target - height) * 0.1 smoothing (:44), the one-pixel gap as barWidth - 1 (:62, :65), the top-and-bottom mirror about the midline, the resizeCanvas that assigns only when the size differs, and opacity-60 (:83).

What changed

THE REFERENCE DOES NOT PLAY ANYTHING, and that half is replaced rather than imported. There is no <audio> element in it: setInterval(…, 1000) advances a counter against a hard-coded 30-second duration shared by all five songs, audioError is declared at :82 and never set by anything that can fail, and every cover is /placeholder.svg. It is a transport with nothing behind it, the exact class of defect this session was opened to remove, so importing it verbatim would have imported the bug. Behind the imported shape: a real <audio>, a real object URL from EMBER.places.read(), real duration from loadedmetadata, real position from timeupdate, seeking by assigning currentTime, and the error path wired to the element's own error event so the four MediaError codes each get their own sentence. The visualiser is fed by the audio: every number in its draw survives, but the target heights come from a real AnalyserNode (fftSize 256, smoothingTimeConstant 0.8) instead of Math.random(), with the reference's random walk kept as the fallback where WebAudio is unavailable. The playlist is the folder rather than five literals, so a Quick Access "Music" collection queues every track it walked. R3: backdrop-blur-md dropped. R2: the zinc-800/900 shell and white text become the one ground and its inks, and the bg-gradient-to-t caption scrim becomes one flat tone. bg-emerald-500 and the visualiser's rgba(52,211,153,.5) are a green product's accent, tokens here, and R1 keeps the play button as the only amber action while shuffle, repeat, mute, previous and next stay neutral chrome, which is what the reference does in its own palette. app/login/page.tsx and app/register/page.tsx are not imported: EMBER has no accounts. The per-card dropdown menu is not imported either, EMBER has one command surface, and a second menu of verbs on the same objects is how two catalogues drift apart.

FileExplorer/file-manager/file-manager.tsx → shared/ember-explorershell.js + ember-explorer.css (checkbox column and card grid)

VERBATIM

MIT · v0/shadcn scaffold

What was taken

Completes the row that shipped breadcrumb-only in P1.C2s. The select column is copied from :453-459, <TableHead className="w-[40px]"> with a header Checkbox whose checked state is selectedFiles.length === filteredFiles.length && filteredFiles.length > 0 and an aria-label of "Select all", and the per-row box from :469-475 with its Select ${file.name} label. toggleSelectAll at :207-213 is copied including the detail that matters: it selects every filtered row, not every row in the folder. Checkbox geometry from components/ui/checkbox.tsx: 16px square, rounded-sm 2px, 1px border, focus ring 2px at a 2px offset, and lucide's Check inside. The card grid is copied from :579-610: gap-4/p-4 16px, rounded-lg 8px, tile p-2 8px, checkbox inset top-2 right-2, icon text-4xl 36px with mb-2, name font-medium truncate max-w-[120px], sub-line text-xs, ring-2 ring-primary when selected, hover:shadow-md, and a More button at bottom-2 right-2 that is opacity-0 until group-hover.

What changed

The grid is not display: grid. The reference lays 2/3/4/5 columns with sm:/md:/lg: breakpoints over a real CSS grid; this list is virtualised, and an absolutely-positioned child cannot participate in grid layout, the same collision that turned the table sideways in P1.C2o. shared/ember-window.js already derives a column count from --xp-col-min against the real viewport and positions by left/top, so the breakpoints become one 180px minimum tile width, which yields the same counts at the same viewports and survives four thousand photographs. The checkbox is a <button role="checkbox"> rather than an <input>: the row is itself a click target and a native input inside one fights it for the event. Two departures on touch, the reference's 24px tile checkbox and 32px More button are drawn at the reference's size but given the 44px target this codebase holds itself to, since the reference never considered touch. One addition: an aria-checked="mixed" state on the header box, which the reference has no equivalent for because its Checkbox is binary, a partial selection rendering as "none" is a lie about what Delete will act on. bg-muted/50 on a selected row and ring-primary become tokens.

4 imports

Infrastructure

What holds the rest up. Indexing, storage and search: nothing a reader sees directly, and everything they would notice missing.

flexsearch-master → dist/flexsearch.light.min.js

VERBATIM

Apache-2.0 · Thomas Wilkerling · v0.8.215

What was taken

The light build, whole and unmodified: 11,539 bytes, byte-identical to dist/flexsearch.light.min.js as published. It powers the search field at the top of this ledger: one FlexSearch.Index with tokenize: 'forward', one document per station built from the name, the licence line, the SPDX and method attributes, and the body text.

What changed

Nothing in the file. Two decisions around it are ours and are stated here rather than left to be discovered. The light build, not the bundle: the bundle is 51,410 bytes and is built for tens of thousands of documents; this record holds 35, so shipping 40KB more of index machinery than the data justifies would be a cost with no reader on the other end of it. Vendored, not fetched: the reference documents a CDN tag, and this site makes zero third-party requests and says so in its own footer. The file is served from /vendor/ with its Apache-2.0 licence text beside it.

Why it is in here at all

This page argues that every import is credited and read line by line. It acquired a dependency in the act of becoming searchable, and a record that exempts its own tooling is not a record. The search box you used to find this entry is the entry.

scrollama-main

VERBATIM

MIT · Russell Samora · v3.2.0

What was taken

createProgressThreshold(height, threshold) copied exactly [src/createProgressThreshold.js]; parseOffset [src/parseOffset.js]; the step observer's marginTop = height/2 - offset / marginBottom = height/2 - (h - offset) at threshold: 0.5 [src/entry.js:178-195]; the progress observer's marginTop = -offset + height / marginBottom = offset - h [src/entry.js:200-218]; intersectProgress gating on state === 'enter' [:151-155]; the exit-endpoint correction [:118-120]; the ResizeObserver rebuild [:130-139]

What changed

err() dropped from parseOffset (it logs to a console EMBER does not use). Callback names shortened. The arithmetic is untouched and tools/museum.test.cjs T4 asserts each expression literally, because a "tidied" rootMargin silently moves the trigger line rather than failing.

syntax-highlight-element-main

PARTIAL

MIT · André Ruffert · v1.2.0

What was taken

setupTokenHighlights [src/utils.js] copied; paintTokenHighlights: the pos accumulator walk, new Range(), setStart/setEnd, CSS.highlights.get(type).add(range), the internal highlights Set [src/syntax-highlight-element.js:88-113]; clearTokenHighlights; getFlatToken [src/tokenizer/prism.js]; the 32 standard Prism token type names [:48-81]; the CSS.highlights capability check [:10-13]; attachInternals() + role='code' [:68-71]; tabindex on connect [:76-79]

What changed

Its setup() could not come across. It appends <script src="https://cdn.jsdelivr.net/npm/prismjs@1.30.0/…"> to document.head, one more per language; tools/gate.sh fails the session on any remote <script src> and EMBER is offline-first. The tokenizer is therefore ours, DERIVED, stated as one, emitting Prism's exact token shape {type, content, length} under Prism's exact type names, so every ::highlight() rule in src/themes/prism.css transfers unchanged. The theme's selector groupings are the reference's, line for line; only the colours became tokens.

lexical-main → packages/lexical-devtools/safari-xcode/

VERBATIM

MIT · Meta

What was taken

Opened all three .entitlements files. The host app's, Lexical Developer Tools/Lexical Developer Tools/Lexical Developer Tools.entitlements, is exactly three keys: com.apple.security.app-sandbox, com.apple.security.files.user-selected.*, com.apple.security.network.client. src-tauri/entitlements.plist is that same set, in that order, and nothing else. The two extension targets drop network.client, which confirms the set is deliberate rather than boilerplate.

What changed

read-onlyread-write. The reference is a devtools panel that only opens files; EMBER writes exports through the save picker, so it needs the write half of the same entitlement. That single word is the whole diff. Plist header and DTD unchanged.

How a thing gets from a reference into this

Contributors

The people whose work is inside this.

Select a name to open what they wrote and where it went. Upstream projects are listed as projects rather than as people, the two typefaces credit their own authors, and that credit is carried through instead of being rewritten into somebody's name.

Social handles are not listed because they are not recorded in the ledger. An invented handle on a credits page is the exact failure this page exists to prevent, so the field is absent rather than guessed.

Every name, and what each one wrote