{"$schema":"https://ui.artbloom.tech/schema/registry-item.json","name":"ui.artbloom","homepage":"https://ui.artbloom.tech","items":[{"name":"text-shimmer","type":"registry:ui","title":"Text Shimmer","description":"A light band that sweeps across text, clipped to the glyphs themselves so it inherits weight and tracking.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/text-shimmer.json","docs":"https://ui.artbloom.tech/artbloom/animations/text-shimmer"},{"name":"number-ticker","type":"registry:ui","title":"Number Ticker","description":"Counts to a target when it scrolls into view. The spring writes straight to textContent, so React never re-renders mid-count.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/number-ticker.json","docs":"https://ui.artbloom.tech/artbloom/animations/number-ticker"},{"name":"marquee","type":"registry:ui","title":"Marquee","description":"Seamless infinite scroller, horizontal or vertical, with edge fades and pause-on-hover.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/marquee.json","docs":"https://ui.artbloom.tech/artbloom/animations/marquee"},{"name":"chip-pile","type":"registry:ui","title":"Chip Pile","description":"A tag list where every chip is a rigid body as wide as its own label, solved by sequential impulses with real friction. Drag one out and the pile answers.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/chip-pile.json","docs":"https://ui.artbloom.tech/artbloom/animations/chip-pile"},{"name":"liquid-nav","type":"registry:ui","title":"Liquid Nav","description":"A tab indicator that is fifteen masses on a spring chain, so it necks and catches up instead of easing. Drop-in for a real nav.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/liquid-nav.json","docs":"https://ui.artbloom.tech/artbloom/animations/liquid-nav"},{"name":"pull-cord","type":"registry:ui","title":"Pull Cord","description":"A switch you pull. Eighteen masses on inextensible links, and the click fires when the plunger runs out of travel — not when the angle looks right.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/pull-cord.json","docs":"https://ui.artbloom.tech/artbloom/animations/pull-cord"},{"name":"shadow-caster","type":"registry:ui","title":"Shadow Caster","description":"A feature grid lit by a source with real area, so every shadow has a penumbra that widens as it lengthens. The occluders are the live card rects.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/shadow-caster.json","docs":"https://ui.artbloom.tech/artbloom/animations/shadow-caster"},{"name":"slosh-gauge","type":"registry:ui","title":"Slosh Gauge","description":"A stat card whose liquid obeys the shallow-water equations, so it lands on the exact number with no easing and the wave crosses the tank at its own speed.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/slosh-gauge.json","docs":"https://ui.artbloom.tech/artbloom/animations/slosh-gauge"},{"name":"pressure-button","type":"registry:ui","title":"Pressure Button","description":"A button whose face is a pressure vessel. Holding it compresses the gas inside, the shell deforms under the real load, and letting go vents it — so the press has weight instead of a scale transform.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/pressure-button.json","docs":"https://ui.artbloom.tech/artbloom/animations/pressure-button"},{"name":"balance-progress","type":"registry:ui","title":"Cart-Pole Progress","description":"A progress bar with an inverted pendulum riding it. The controller drives away from the fall before it drives toward the target, so the bar leans into its own travel and settles with no easing curve.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/balance-progress.json","docs":"https://ui.artbloom.tech/artbloom/animations/balance-progress"},{"name":"heat-grid","type":"registry:ui","title":"Heat Grid","description":"A contribution calendar where activity is heat and the heat obeys the diffusion equation, so a busy week bleeds into the days beside it and cools back to ambient on its own.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/heat-grid.json","docs":"https://ui.artbloom.tech/artbloom/animations/heat-grid"},{"name":"flock-search","type":"registry:ui","title":"Flock Search","description":"An empty state that is not empty. Reynolds boids fill the space behind the message, split around the pointer as it passes and close back up behind it — separation, alignment and cohesion, no path to follow.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/flock-search.json","docs":"https://ui.artbloom.tech/artbloom/animations/flock-search"},{"name":"morphogen-wordmark","type":"registry:ui","title":"Morphogen Wordmark","description":"A hero background grown out of the wordmark itself. Two reagents react and diffuse from the glyphs as the seed, and the front feeds outward into stripes — every load braids differently because nothing is keyframed.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/morphogen-wordmark.json","docs":"https://ui.artbloom.tech/artbloom/animations/morphogen-wordmark"},{"name":"euler-disk-spinner","type":"registry:ui","title":"Euler Disk Spinner","description":"A loading state that spends energy instead of looping. The coin's tilt carries the remaining work and its rattle rises as the disk lies down, the way a real Euler disk finishes — audibly close before it stops.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/euler-disk-spinner.json","docs":"https://ui.artbloom.tech/artbloom/animations/euler-disk-spinner"},{"name":"aurora-thread-loom","type":"registry:ui","title":"Aurora Thread Loom","description":"Forty-eight gradient threads waving out of phase and hue-rotating as they cross. One keyframe, indexed per thread by a custom property.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/aurora-thread-loom.json","docs":"https://ui.artbloom.tech/artbloom/animations/aurora-thread-loom"},{"name":"bubble-burst","type":"registry:ui","title":"Bubble Burst","description":"Four bubbles rise, pop, and spray eight drops each on a shared clock. A liquid loader with no JS timer.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/bubble-burst.json","docs":"https://ui.artbloom.tech/artbloom/animations/bubble-burst"},{"name":"curtain-sequence","type":"registry:ui","title":"Curtain Sequence","description":"Six coloured panels sweep in, hinge from the far edge, and leave — the title resolves mid-pass. Press to run.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/curtain-sequence.json","docs":"https://ui.artbloom.tech/artbloom/animations/curtain-sequence"},{"name":"destructible-membrane","type":"registry:ui","title":"Destructible Membrane","description":"A canvas sheet you tear with the pointer. Springs hold the cloth, the rupture propagates to neighbouring cells, and the noise buffer is rebuilt on resize.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/destructible-membrane.json","docs":"https://ui.artbloom.tech/artbloom/animations/destructible-membrane"},{"name":"domino-word","type":"registry:ui","title":"Domino Word","description":"Letter tiles fall into each other in sequence, each with a cast side and a real ground shadow. Any word, one tile per letter.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/domino-word.json","docs":"https://ui.artbloom.tech/artbloom/animations/domino-word"},{"name":"kinetic-kerning","type":"registry:ui","title":"Kinetic Kerning","description":"Letters slide out of true and settle back into precise spacing, one after another, with the caption arriving last.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/kinetic-kerning.json","docs":"https://ui.artbloom.tech/artbloom/animations/kinetic-kerning"},{"name":"kinetic-texture-mesh","type":"registry:ui","title":"Kinetic Texture Mesh","description":"Drag to pluck a grid of textured cells and release a wave through the mesh. Canvas, pointer capture, one animation frame loop.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/kinetic-texture-mesh.json","docs":"https://ui.artbloom.tech/artbloom/animations/kinetic-texture-mesh"},{"name":"lenticular-shift","type":"registry:ui","title":"Lenticular Shift","description":"Eighteen slats turn in place so two words trade positions, the way a lenticular print changes with the angle you hold it at.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/lenticular-shift.json","docs":"https://ui.artbloom.tech/artbloom/animations/lenticular-shift"},{"name":"mercury-droplet-choir","type":"registry:ui","title":"Mercury Droplet Choir","description":"Twenty-five chrome droplets breathe in and out of formation, deforming as they travel. Offsets are computed per cell from the centre of the grid.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/mercury-droplet-choir.json","docs":"https://ui.artbloom.tech/artbloom/animations/mercury-droplet-choir"},{"name":"pulse-choir","type":"registry:ui","title":"Pulse Choir","description":"Thirty-two bars on one clock, each with a fixed peak, so the field reads as a single waveform rather than thirty-two loaders.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/pulse-choir.json","docs":"https://ui.artbloom.tech/artbloom/animations/pulse-choir"},{"name":"rollback-orbit","type":"registry:ui","title":"Rollback Orbit","description":"A weighted ball rolls to its target and back, rocking the rail it runs on and settling the shadow underneath. Press to roll.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/rollback-orbit.json","docs":"https://ui.artbloom.tech/artbloom/animations/rollback-orbit"},{"name":"split-shutter","type":"registry:ui","title":"Split Shutter","description":"Nine shutters part to reveal a word, each slat carrying its own printed label so the mechanism stays visible.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/split-shutter.json","docs":"https://ui.artbloom.tech/artbloom/animations/split-shutter"},{"name":"snap-toggle","type":"registry:ui","title":"Snap Toggle","description":"A settings toggle whose off and on are two real resting positions of a buckled arch. Drag the knob to the middle and let go: it hangs for a third of a second and then commits on its own, and which way it goes is settled by a fraction of a pixel rather than by a threshold.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/snap-toggle.json","docs":"https://ui.artbloom.tech/artbloom/animations/snap-toggle"},{"name":"toast-stack","type":"registry:ui","title":"Toast Stack","description":"A notification stack where every card lands on the air trapped underneath it. The squeeze is algebraic rather than exponential, so half the settle is spent in the last pixel and a half — and dismissing one from the middle ripples up at each card's own rate, with no stagger written anywhere.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/toast-stack.json","docs":"https://ui.artbloom.tech/artbloom/animations/toast-stack"},{"name":"detent-slider","type":"registry:ui","title":"Detent Slider","description":"A stepped slider with a real detent instead of a rounding function. The notches cost something to climb out of, so a slow drag settles into the nearest one and a flick clears three — out of one equation rather than a velocity threshold.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/detent-slider.json","docs":"https://ui.artbloom.tech/artbloom/animations/detent-slider"},{"name":"sheet-fold","type":"registry:ui","title":"Sheet Fold","description":"A settings accordion whose panels are plates on a soft-close hinge. The damper is quadratic, so a leaf holds a steady rate through half its travel and then chokes on the last pixel and a half, and a long row and a short one sweep at different speeds without either being configured.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/sheet-fold.json","docs":"https://ui.artbloom.tech/artbloom/animations/sheet-fold"},{"name":"shutter-compare","type":"registry:ui","title":"Shutter Compare","description":"A before/after slider whose divider is a focal-plane shutter. The second curtain is latched one exposure time after the first rather than pinned to it, so past the sync speed the reveal arrives as a travelling band instead of an edge.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/shutter-compare.json","docs":"https://ui.artbloom.tech/artbloom/animations/shutter-compare"},{"name":"dock-magnify","type":"registry:ui","title":"Dock Magnify","description":"An app dock on a shelf that actually bends. The bump under the pointer is a solved deflection rather than a curve over distance, so the icons two slots out dip below the resting line and the ones at either end lift less than the ones in the middle — neither of which a falloff function can do.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/dock-magnify.json","docs":"https://ui.artbloom.tech/artbloom/animations/dock-magnify"},{"name":"galton-histogram","type":"registry:ui","title":"Galton Histogram","description":"A ratings breakdown whose five bars are a tally of stars that have actually been cast, one falling ball at a time. The bars wobble, and the wobble shrinks as the sample grows — so switching from every review to the last few hundred makes the same product go visibly noisy.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/galton-histogram.json","docs":"https://ui.artbloom.tech/artbloom/animations/galton-histogram"},{"name":"relaxation-typing","type":"registry:ui","title":"Relaxation Typing","description":"A typing indicator whose three dots are coupled to each other rather than delayed behind each other. Drag it toward a faster typist and the ripple tightens into a near-simultaneous blink instead of merely running quicker, which a keyframe stagger cannot do at any duration.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/relaxation-typing.json","docs":"https://ui.artbloom.tech/artbloom/animations/relaxation-typing"},{"name":"lloyd-avatars","type":"registry:ui","title":"Lloyd Avatars","description":"A reviewer facepile in which every face owns the part of the frame nearest to it. Overlap is impossible rather than prevented, so nothing has to be re-tuned per head count — drag one face into a corner and its share collapses while the rest swell to take it up.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/lloyd-avatars.json","docs":"https://ui.artbloom.tech/artbloom/animations/lloyd-avatars"},{"name":"kelvin-ramp","type":"registry:ui","title":"Kelvin Ramp","description":"A theme-warmth control whose strip is a real black-body locus — Planck's law through the CIE 1931 observer, then the sRGB transfer curve, solved a column at a time. A thousand kelvin at the warm end is five times the colour change it is at the cool end, so the same drag does different work at either end of the same strip, which a gradient between two stops cannot do at any number of stops.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/kelvin-ramp.json","docs":"https://ui.artbloom.tech/artbloom/animations/kelvin-ramp"},{"name":"scanline-marquee","type":"registry:ui","title":"Scanline Marquee","description":"A trusted-by belt read one scanline at a time, and read against the strip's own velocity history rather than its current speed. Flick it and hold still: the travel has stopped and the type is still unbending from the top of the window down, because every band on screen was exposed at a different moment.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/scanline-marquee.json","docs":"https://ui.artbloom.tech/artbloom/animations/scanline-marquee"},{"name":"photon-thumbnail","type":"registry:ui","title":"Photon Thumbnail","description":"A media card whose thumbnail arrives as photons land on it: Poisson counts over an analytically ray-traced scene, so the estimator's error falls as the square root of exposure and nothing here is a bitmap. The shadows are still boiling long after the highlights have gone clean — the one thing a grain overlay fading to zero cannot reproduce, because its noise is uniform across the frame.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/photon-thumbnail.json","docs":"https://ui.artbloom.tech/artbloom/animations/photon-thumbnail"},{"name":"frost-spoiler","type":"registry:ui","title":"Frost Spoiler","description":"An embargoed price behind ice that was actually grown — a diffusion-limited cluster, aggregated one walker at a time. Sweeping the glass sublimates the patch under the hand and leaves the rest of the pane standing, and no two panels are frosted alike, because there is no texture anywhere in it to repeat.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/frost-spoiler.json","docs":"https://ui.artbloom.tech/artbloom/animations/frost-spoiler"},{"name":"wetting-reveal","type":"registry:ui","title":"Wetting Reveal","description":"A gallery plate revealed by a liquid film with a real contact angle. The front is driven by its own curvature and pins on defects in the glass, so a drop rounds itself off, stalls at an edge, and merges with its neighbours into one sheet — and the wetted picture carries the tonality the dry haze was flattening.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/wetting-reveal.json","docs":"https://ui.artbloom.tech/artbloom/animations/wetting-reveal"},{"name":"moire-scratch","type":"registry:ui","title":"Moire Scratch","description":"A promo code under two printed gratings, revealed by the beat between them rather than by an eraser mask. Both films are box-filtered at exactly one pitch, so the carriers integrate away and only the beat survives — and the gain is the beat over the pitch: eleven pixels of hand sweeps the bright band clear across the panel.","kind":"animations","author":"@artbloom","url":"https://ui.artbloom.tech/r/moire-scratch.json","docs":"https://ui.artbloom.tech/artbloom/animations/moire-scratch"},{"name":"cinematic-supercar","type":"registry:page","title":"Cinematic Supercar","description":"A scroll-driven WebGL product story — assembly, ignition, road, braking, showroom — with a real 12MB car model, V12 audio, and film grain. Ships every byte it needs.","kind":"templates","author":"@artbloom","url":"https://ui.artbloom.tech/r/cinematic-supercar.json","docs":"https://ui.artbloom.tech/artbloom/templates/cinematic-supercar"},{"name":"paper-portfolio","type":"registry:page","title":"Paper Portfolio","description":"A seven-page torn-paper portfolio: hero collage, case studies, a printable capabilities page and a draggable sketchbook. Ships the six original PNGs — the hero collage and five logo marks — with the rest of the artwork drawn in SVG.","kind":"templates","author":"@artbloom","url":"https://ui.artbloom.tech/r/paper-portfolio.json","docs":"https://ui.artbloom.tech/artbloom/templates/paper-portfolio"},{"name":"monolith-launch","type":"registry:page","title":"Monolith Launch","description":"A four-page product launch site built entirely from type — no images, no icons, no fonts to fetch and nothing to license. Display headline, a looping spec strip, four claims each backed by a number, the full specification table and a reservation form that admits it has no backend.","kind":"templates","author":"@artbloom","url":"https://ui.artbloom.tech/r/monolith-launch.json","docs":"https://ui.artbloom.tech/artbloom/templates/monolith-launch"}]}