@@ -45,10 +45,20 @@ if ("requestIdleCallback" in window) {
4545 window . setTimeout ( initHero , 200 ) ;
4646}
4747
48- // --- Examples gallery: each card opens the movement in the playground -------
48+ // --- Examples gallery: a curated taste, not the full 65 ---------------------
49+ // The full library already has a proper filterable/grouped gallery in the
50+ // playground itself (domain, body part, equipment, difficulty). Dumping all
51+ // 65 cards into the landing page turned this section into a long doom-scroll
52+ // on mobile, so show a handful of visually distinct highlights spanning
53+ // different domains, then hand off to the real gallery.
54+ const HIGHLIGHT_IDS = [ "dance-phrase" , "pull-up" , "cobra" , "touch-toes" , "hand-wave" ] ;
55+
4956const grid = document . getElementById ( "examples-grid" ) ;
5057if ( grid ) {
51- for ( const preset of PRESETS ) {
58+ const byId = new Map ( PRESETS . map ( ( p ) => [ p . id , p ] ) ) ;
59+ for ( const id of HIGHLIGHT_IDS ) {
60+ const preset = byId . get ( id ) ;
61+ if ( ! preset ) continue ;
5262 const card = document . createElement ( "a" ) ;
5363 card . className = "example-card" ;
5464 card . href = `play.html${ buildShareHash ( preset . source ) } ` ;
@@ -58,6 +68,16 @@ if (grid) {
5868 <span class="example-go">Open in playground →</span>` ;
5969 grid . append ( card ) ;
6070 }
71+
72+ const remaining = PRESETS . length - HIGHLIGHT_IDS . length ;
73+ const more = document . createElement ( "a" ) ;
74+ more . className = "example-card example-more" ;
75+ more . href = "play.html" ;
76+ more . innerHTML = `
77+ <span class="example-kind">Full library</span>
78+ <span class="example-name">+${ remaining } more movements</span>
79+ <span class="example-go">Browse & filter by domain →</span>` ;
80+ grid . append ( more ) ;
6181}
6282
6383// --- Copy the LLM authoring prompt ------------------------------------------
0 commit comments