Files
hyperframes/registry/blocks/snow/demo.html
Miguel Ángel 590c192498 feat(catalog): add 3D objects, cursors, snow, starfield and paper transitions (#4349)
* feat(catalog): shelve 3D objects and cursors in their own catalog sections

Carries the generator grouping rules from #4310 and #4308.

* feat(registry): add a starfield ambient overlay

From #4313.

* feat(registry): add a falling snow ambient overlay

From #4331.

* feat(registry): add a torn-paper-rip transition

From #4321.

* feat(registry): add a paper-collage-reveal transition

From #4322.

* feat(registry): add a curtain-reveal transition

From #4323.

* feat(registry): add 3D objects: product turntable, glass hero, exploded stack, extruded logo

From #4310.

* feat(registry): add eight cursor animations and the dart cursor

From #4308.

* fix(catalog): find items by everyday editor words and accept a bare search word

From #4311.

* chore(registry): remove the simulated-cursor component

The Cursors section's new pointer animations replace it (from #4308).

* fix(registry): take cursor-zoom-follow's screenshot from runtime variables only

The declared default is empty, so page markup never becomes an image URL.

Clears the code-scanning alert raised on #4308.

* docs(cli): show a catalog search example that finds items

"smoke" matches nothing in the catalog; "crossfade" finds fade-through.

* chore(ci): allow the simulated-cursor removal in the deletion guard

* fix(ci): skip tracked files missing from disk in the player CDN pin check

Catalog regeneration removes a deleted item's pages before the publish PR untracks them,

so the check crashed on every catalog deletion PR.

* chore(cli): drop comments that narrate catalog search history

* fix(registry): drag-drop keeps the family arrow and shows the drop slot only while hovering

* fix(registry): agent cursor labels its steps in an accent tag, no glow or sparkles, in 4.8 s

* fix(registry): annotate cursor draws a tapered marker stroke and clears the circled value

* fix(registry): show real file thumbnails and end the context menu demo sooner

* fix(registry): give marquee select real photos, a Finder-blue marquee and a tighter loop

* fix(registry): centre the text-select toolbar on the selection and tighten its timing

* fix(registry): selection cursors default to the macOS system blue

* style(registry): format the agent and annotate cursor sources

* fix(registry): dart-cursor stops covering the choice it makes and shows the export finishing

* fix(registry): frame the product turntable fully and light it with two studio softboxes

* fix(registry): touch-indicator taps like a real phone and the post it taps gets liked

* fix(registry): press-ripple confirms with a check and small click rings at the cursor

* fix(registry): exploded stack separates at once and marks each layer in blue as it is labelled

* fix(registry): extruded logo settles facing the camera, set in Geist Bold with a neutral rim

* fix(registry): magnetic cursor docks its toolbar on the selection and ends after the press

* style(registry): format the exploded stack source

* fix(registry): glyph trail becomes a tutorial cursor path with numbered steps on a settings screen

* fix(registry): make glass-hero a clear lens that shows the headline through it

* fix(registry): snow reads as real snowfall with bokeh flakes over a winter title card

* fix(registry): oversized cursor is a 3.5x arrow that clicks a real editor toggle on

* fix(registry): starfield reads as a drifting night sky over a real title card

* style(registry): format the glass hero source

* fix(registry): make the paper tear show a white fibrous edge and lift the torn sheet away

* fix(registry): curtain reveal draws velvet folds that gather onto a title card

* fix(registry): make every zoom-follow click change the screen and read at zoom

* fix(registry): paper collage pieces stay opaque, tear with deckled grain and lift away on an arc

* refactor(registry): drop dead code and correct stale comments in reworked items

* fix(registry): agent cursor scrubs cleanly, docs match press-ripple, fictional demo names

* docs(registry): catalog notes say oversized-cursor exits and how it differs from press-ripple

* docs(registry): plain lowercase comments in oversized-cursor and touch-indicator

* docs(registry): oversized-cursor names CLICK_AT as the click cue
2026-09-28 22:03:59 +00:00

167 lines
4.5 KiB
HTML
Vendored

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<style>
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body,
#snow-demo {
width: 1920px;
height: 1080px;
margin: 0;
overflow: hidden;
}
#snow-demo-backdrop,
#snow-demo-overlay {
position: absolute;
inset: 0;
}
#snow-demo-backdrop {
background: linear-gradient(
180deg,
#252f3c 0%,
#2f3b4b 35%,
#455367 60%,
#63728a 72%,
#7a8aa0 78%
);
}
#snow-demo-backdrop svg {
position: absolute;
inset: 0;
}
#snow-demo-title {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 22px;
color: #fff;
font-family: Inter, system-ui, sans-serif;
text-align: center;
}
#snow-demo-title h1 {
margin: 0;
font-size: 128px;
font-weight: 600;
letter-spacing: -0.03em;
line-height: 1;
}
#snow-demo-title p {
margin: 0;
font-size: 36px;
font-weight: 400;
color: rgba(255, 255, 255, 0.78);
}
</style>
</head>
<body>
<div
id="snow-demo"
data-composition-id="snow-demo"
data-start="0"
data-duration="6"
data-width="1920"
data-height="1080"
>
<div
id="snow-demo-backdrop"
class="clip"
data-start="0"
data-duration="6"
data-track-index="0"
>
<svg viewBox="0 0 1920 1080" preserveAspectRatio="none" aria-hidden="true">
<path
fill="#8394aa"
d="M0 830 L140 770 L260 798 L420 702 L520 746 L640 676 L790 760 L900 734 L1040 660 L1180 738 L1300 710 L1450 770 L1580 696 L1720 754 L1840 722 L1920 746 L1920 1080 L0 1080 Z"
/>
<path
fill="#4f5e73"
d="M0 840 L180 792 L330 826 L520 770 L700 830 L880 788 L1060 840 L1240 782 L1420 826 L1600 776 L1780 820 L1920 798 L1920 1080 L0 1080 Z"
/>
<path id="snow-demo-trees-far" fill="#1b2532" />
<path id="snow-demo-trees-near" fill="#0c1118" />
</svg>
<div id="snow-demo-title">
<h1>Winter release</h1>
<p>Offline sync, shared folders and a faster search.</p>
</div>
</div>
<div
id="snow-demo-overlay"
data-composition-id="snow"
data-composition-src="snow.html"
data-variable-values='{"density":"dense"}'
data-start="0"
data-duration="6"
data-track-index="1"
data-width="1920"
data-height="1080"
></div>
</div>
<script>
window.__timelines = window.__timelines || {};
// Seeded pine treelines: same silhouette on every load.
(function () {
function rnd(n) {
var x = Math.sin(n * 127.1 + 311.7) * 43758.5453;
return x - Math.floor(x);
}
function pine(x, base, h) {
var w = h * 0.3;
var tiers = [
[0, 1],
[0.45, 0.62],
[0.25, 0.62],
[0.75, 0.3],
[0.5, 0.3],
[1, 0],
];
var right = tiers.map(function (t) {
return x + w * t[0] + " " + (base - h * t[1]);
});
var left = tiers
.slice(1)
.reverse()
.map(function (t) {
return x - w * t[0] + " " + (base - h * t[1]);
});
return "M" + right.concat(left).join(" L") + " Z";
}
function row(id, base, minH, maxH, step, seed) {
var d = "M0 " + base + " L1920 " + base + " L1920 1080 L0 1080 Z";
for (var x = -20, i = 0; x < 1960; i++) {
d += pine(x, base + rnd(seed + i) * 14, minH + rnd(seed + i + 500) * (maxH - minH));
x += step * (0.6 + rnd(seed + i + 900) * 0.8);
}
document.getElementById(id).setAttribute("d", d);
}
row("snow-demo-trees-far", 842, 46, 96, 30, 11);
row("snow-demo-trees-near", 1010, 130, 280, 70, 71);
})();
var tl = gsap.timeline({ paused: true });
tl.to({}, { duration: 6, ease: "none" }, 0);
window.__timelines["snow-demo"] = tl;
</script>
</body>
</html>