@aglyn/plugins-ai 1.0.0-beta.268 → 1.0.0-beta.269

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/package.json +17 -17
  2. package/src/lib/jobs/ai-job-page-language.d.ts +7 -1
  3. package/src/lib/jobs/ai-job-page-language.js +16 -3
  4. package/src/lib/jobs/ai-job-page-language.js.map +1 -1
  5. package/src/lib/jobs/ai-job-site-look.d.ts +2 -1
  6. package/src/lib/jobs/ai-job-site-look.js +6 -2
  7. package/src/lib/jobs/ai-job-site-look.js.map +1 -1
  8. package/src/lib/jobs/ai-job-site-step.js +11 -6
  9. package/src/lib/jobs/ai-job-site-step.js.map +1 -1
  10. package/src/lib/jobs/ai-layout-stock-photos.d.ts +16 -8
  11. package/src/lib/jobs/ai-layout-stock-photos.js +478 -67
  12. package/src/lib/jobs/ai-layout-stock-photos.js.map +1 -1
  13. package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.d.ts +4 -0
  14. package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.js +87 -1
  15. package/src/lib/jobs/fixtures/ai-stock-photo-brightvale-recordings.js.map +1 -1
  16. package/src/lib/jobs/fixtures/ai-stock-photo-mexicano-recordings.d.ts +31 -0
  17. package/src/lib/jobs/fixtures/ai-stock-photo-mexicano-recordings.js +325 -0
  18. package/src/lib/jobs/fixtures/ai-stock-photo-mexicano-recordings.js.map +1 -0
  19. package/src/lib/layout-language/ai-layout-motion.d.ts +60 -7
  20. package/src/lib/layout-language/ai-layout-motion.js +231 -4
  21. package/src/lib/layout-language/ai-layout-motion.js.map +1 -1
  22. package/src/lib/layout-language/ai-layout-pictures.d.ts +8 -0
  23. package/src/lib/layout-language/ai-layout-pictures.js +68 -4
  24. package/src/lib/layout-language/ai-layout-pictures.js.map +1 -1
  25. package/src/lib/model/ai-site-look.d.ts +10 -1
  26. package/src/lib/model/ai-site-look.js +14 -3
  27. package/src/lib/model/ai-site-look.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/plugins/ai/src/lib/jobs/fixtures/ai-stock-photo-mexicano-recordings.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { StockPhoto } from '@aglyn/aglyn/plugin-manager/stock-photo-provider'\n\n/**\n * PIXABAY'S RECORDED ANSWERS FOR THE BETA.266 MEXICANO PORTFOLIO START\n * (AGL-3923, job C75nFALn3H, host 7R9loxHdfa, 2026-10-18 16:52Z): the seven\n * searches its home page sent, every one new to the cache, written\n * 16:54:36-38Z. Read back from production's `stockPhotoSearches` by each\n * search's key (a SHA-256 of the provider and the request's canonical\n * parameters), never searched again. Ids, sizes, page slugs and tags are\n * Pixabay's own, in its order; the contributor is left out.\n */\n\nconst hit = (id: number, width: number, height: number, slug: string, tags: string): StockPhoto =>\n ({\n provider: 'pixabay',\n id: String(id),\n width,\n height,\n pageUrl: `https://pixabay.com/photos/${slug}/`,\n photographer: 'A Pixabay contributor',\n tags: tags ? tags.split(', ') : [],\n downloadUrl: `https://pixabay.com/get/g${id}_1280.jpg`,\n }) as StockPhoto\n\n/** `artist` (horizontal, min_width 1600), the home hero's search; key `e22146e5c28e81400f7b00ff0ef9ad3beb46784a1c20b4b85614f17b21e57f72`, answered 2026-10-18T16:54:36.783Z. */\nexport const ARTIST_HERO: StockPhoto[] = [\n hit(343674, 1280, 853, 'man-artist-street-painter-painting-343674', 'man, artist, street, painter, painting, art, jesus, old man, elderly man, street photography, artist, artist, painter, art, jesus, jesus, jesus, jesus, jesus, old man'),\n hit(3129361, 1280, 854, 'brushes-painter-work-shop-bowl-3129361', 'brushes, painter, work shop, bowl, lights, work, creative, creativity, painting, artist, paintbrush, studio, art, brush, drawing, artistic, hobby, color, tool, paint'),\n hit(1868562, 1280, 853, 'hands-paint-brush-painting-1868562', 'hands, paint, brush, painting, watercolor, watercolor painting, paintbrush, artist, canvas, art, paper, arts, painter, artistic, creative, creativity, painting, painting, painting, painting'),\n hit(1209519, 1280, 878, 'art-paint-water-colors-desk-artist-1209519', 'art, paint, water colors, desk, artist, equipment, painting, craft, drawing, paintbrushes, paper, creative, creativity, picture, colors, art, art, art, art, art'),\n hit(911804, 1280, 720, 'painting-pencils-paint-pens-911804', 'painting, pencils, paint, pens, watercolor, acrylic, watercolor painting, art tools, art materials, painting, painting, painting, painting, painting, paint, paint'),\n hit(3008031, 1280, 853, 'artist-pen-painting-man-elderly-3008031', 'artist, pen, painting, man, elderly, glasses, craftsman, traditional, tradition, artistic, culture, painter, drawing, asian, laos, asia, artist, artist, artist, artist'),\n hit(1478831, 1280, 855, 'art-art-supplies-artist-blue-brush-1478831', 'art, art supplies, artist, blue, brush, beautiful wallpaper, desktop backgrounds, color, creative, draw, paint, wallpaper hd, painting, wallpaper 4k, supplies, watercolor, laptop wallpaper, watercolour, background, cool backgrounds'),\n hit(7705881, 1280, 853, 'paintbrush-to-paint-multicoloured-7705881', 'paintbrush, to paint, multicoloured, creative, colour, art, fantasy, abstract, creative, art, fantasy, abstract, abstract, abstract, abstract, abstract'),\n hit(4622221, 1280, 854, 'artist-studio-art-sculpture-4622221', 'artist, studio, art, sculpture, workshop, old man, tools, sculptor, creation, exhibit, working, professional, artwork, artist, artist, artist, artist, artist, studio, sculpture'),\n hit(2676392, 1280, 853, 'makeup-beauty-muah-brushes-tassels-2676392', 'makeup, beauty, muah, brushes, tassels, cosmetics, eyeshadow, palette, makeup artist, stylist, beauty salon, brush, highlighter, powder, pomade, artist, makeup, makeup, makeup, makeup'),\n hit(4226688, 1280, 853, 'brushes-paint-color-painting-4226688', 'brushes, paint, color, painting, watercolor, artist, creative, creativity, palette, paintbrush, drawing, paint, paint, painting, painting, painting, painting, painting, watercolor, artist'),\n hit(3411110, 1280, 853, 'rose-flowers-painter-paint-3411110', 'rose, flowers, flower background, painter, paint, flower wallpaper, red rose, rose garden, nature, tabitha, romantic, love, beautiful flowers, rose flower, figure'),\n hit(756326, 1280, 850, 'guitar-guitarist-music-756326', 'guitar, guitarist, music, playing guitar, classical guitar, acoustic guitar, musician, band, sound, recording, audio, musical, musical instrument, instrument, playing, artist, performer, professional, jazz, player'),\n hit(1683134, 1280, 853, 'brushes-art-paint-tool-decor-1683134', 'brushes, art, paint, tool, decor, bristles, decoration, painting, artistic, color, painter, creative, studio, canvas, create, creativity, oil, picture, inspiration, art'),\n hit(7173006, 1280, 854, 'calligraphy-writing-woman-pen-7173006', 'calligraphy, writing, woman, pen, nature, study, water, colors, hand'),\n hit(2927793, 1280, 854, 'brushes-chalks-colorful-2927793', 'brushes, chalks, colorful, art materials, art supplies, coloring materials, paint, pens, art, artistic, creative, art supplies, art supplies, art, art, art, art, art'),\n hit(9433099, 1280, 1280, 'painting-artist-art-brash-9433099', 'painting, artist, art, brash, wood texture, calligraphy'),\n hit(9718039, 1280, 853, 'artist-bee-giant-artist-bee-lavender-9718039', 'artist bee, giant artist bee, nature, lavender, summer, garden, insects, pollinators'),\n hit(505353, 1280, 1280, 'man-artist-drawing-painting-505353', 'man, artist, drawing, painting, elderly, senior, old, aged, male, artist, artist, artist, artist, artist, drawing, drawing, drawing, painting, painting'),\n hit(7402145, 1280, 853, 'blackandwhite-happy-guitarist-7402145', 'blackandwhite, happy, guitarist, singing, africanamerican, people, portrait, instrument, forrest, woods, man, singing, singing, singing, singing, singing, people'),\n hit(1840481, 1280, 1280, 'art-brushes-colorful-paint-1840481', 'art, brushes, colorful, paint, paintbrushes, painting, artist, artistic, creative, creativity, art, art, art, art, art, paint, paint, paint, painting, painting'),\n hit(1937575, 1280, 854, 'painter-paint-artist-brush-tool-1937575', 'painter, paint, artist, brush, tool, color, design, creative, painting, drawing, creativity, art, colorful, craft, artistic, palette, acrylic, dye, draw, painter'),\n hit(9718040, 1280, 853, 'artist-bee-giant-artist-bee-lavender-9718040', 'artist bee, giant artist bee, lavender, summer, nature, garden, insects, pollinators'),\n hit(9032881, 1280, 853, 'woman-painting-brush-canvas-9032881', 'woman, painting, brush, canvas, support, fruits, still life, talent, public, street, urban, artwork, attraction, artist, art, outdoors'),\n hit(2940513, 1280, 1010, 'paint-acrylic-paint-art-supplies-2940513', 'paint, acrylic paint, art supplies, paintbrush, hobby, creative, oil painting, paint tubes, paint, paint, paint, paint, paint, acrylic paint, art supplies, art supplies, hobby, hobby, hobby, oil painting'),\n hit(3268988, 1280, 853, 'tattoo-tattoo-artist-arm-3268988', 'tattoo, tattoo artist, arm, tattoo, tattoo, tattoo, tattoo, tattoo'),\n hit(4494491, 1280, 853, 'male-black-and-white-portrait-face-4494491', 'male, black and white, portrait, face, young, model, human, think, handsome, guy, confident, man, adult, head, human, human, human, human, human, think'),\n hit(8399526, 1280, 853, 'boy-busker-playing-trumpet-8399526', 'boy, busker, playing, trumpet, wind instrument, outdoors, public place, street, building, urban, support, music, snapshot, attraction, tourism, young, street photography, coat, casual, talent'),\n hit(1869492, 1280, 960, 'chalks-colorful-multicolored-1869492', 'chalks, colorful, multicolored, drawing, artistic, arts, colors, coloring materials, art materials, creative, creativity, chalks, drawing, drawing, drawing, drawing, drawing, creative, creative, creativity'),\n hit(1850856, 1280, 853, 'paint-brushes-paint-tubes-1850856', 'paint, brushes, paint tubes, paint brushes, artistic, creative, art materials, oil paint, painting materials, arts, artist, paint, paint brushes, paint brushes, creative, art materials, artist, artist, artist, artist'),\n hit(4159435, 1280, 853, 'painting-girl-brush-art-colors-4159435', 'painting, girl, brush, art, colors, palette, creativity, painting, painting, painting, painting, painting, art, creativity, creativity, creativity'),\n hit(4155023, 1280, 853, 'workplace-macbook-computer-digital-4155023', 'workplace, macbook, computer, digital, oil painting, technology, work, creative, digital, creative, creative, creative, creative, creative'),\n hit(4030112, 1280, 845, 'man-face-painting-brushes-art-4030112', 'man, face, painting, brushes, art, artist, portrait, painting, painting, painting, painting, art, art, art, art, artist, artist, artist, artist, artist'),\n hit(2179313, 1280, 720, 'man-band-guitar-singer-guitarist-2179313', 'man, band, guitar, singer, guitarist, concert, concert hall, festival, instrument, microphone, music, musician, performance, stage, stringed instrument, monochrome, band, band, band, guitar'),\n hit(7937871, 1280, 853, 'paint-artist-supplies-art-creation-7937871', 'paint, artist supplies, art, creation, drawing, paint, paint, paint, paint, paint, drawing'),\n hit(1380108, 1280, 719, 'graffiti-artist-graffiti-art-1380108', 'graffiti, artist, graffiti art, street art, brick walls, ladder, spray paint, spray painting, graffiti artist, culture, graffiti wall, outdoors, street, urban, wall, wall art, creativity, spray, paint, male'),\n hit(5049980, 1280, 960, 'watercolor-portrait-painting-art-5049980', 'watercolor, portrait, painting, art, paper, watercolor, watercolor, painting, painting, painting, painting, painting, art, art, lednické rovne, slovakia, trenčín region'),\n hit(6392282, 1280, 783, 'painting-artist-canvas-creative-6392282', 'painting, artist, canvas, creative, artist painting, paintbrush, colorful, artistic, artwork, artist, artist, artist, artist, artist, paintbrush, paintbrush, paintbrush'),\n hit(2740463, 1280, 771, 'paint-tubes-paint-caps-art-2740463', 'paint tubes, paint, caps, art, painting, colors, artist, palette, blue art, blue painting, blue paint, blue color, art, painting, artist, artist, artist, artist, artist, blue color'),\n hit(1713769, 1280, 853, 'face-painting-child-make-up-face-1713769', 'face painting, child, make up, face, fun, pleasure, butterfly, glitter, motive, face painting, face painting, face painting, face painting, face painting, make up'),\n]\n\n/** `project` (horizontal, min_width 900), \"Project one\" and \"Project four\"; key `8a55f0313a03766e82b1ba9eb52b53443a6072cdafb95f9098abf1d8d6812ff1`, answered 2026-10-18T16:54:37.095Z. */\nexport const PROJECT_WIDE: StockPhoto[] = [\n hit(2557396, 1280, 853, 'people-girls-women-students-2557396', 'people, girls, women, students, friends, talking, meeting, study, group, activity, homework, group work, brainstorming, group study, people, people, people, students, students, students'),\n hit(5382501, 1280, 771, 'job-office-team-business-internet-5382501', 'job, office, team, business, internet, technology, design, draft, portable, meeting, job, office, office, office, office, team, team, business, business, business'),\n hit(594091, 1280, 853, 'meeting-brainstorming-business-594091', 'meeting, brainstorming, business, teamwork, team, people, office, group, corporate, conference, colleagues, company, partnership, project, table, partners, plan, sketch, notepad, coworkers'),\n hit(2284501, 1280, 800, 'meeting-business-architect-office-2284501', 'meeting, business, architect, office, team, plan, blueprints, teamwork, group, people, project, workplace, table, desk, meeting, meeting, meeting, business, business, business'),\n hit(594132, 1280, 853, 'office-startup-business-home-office-594132', 'office, startup, business, home office, businessman, notebook, laptop, computer, company, people, marketing, planning, strategy, project, creative, technology, start-up, organization, development, commerce'),\n hit(594090, 1280, 853, 'startup-meeting-brainstorming-594090', 'startup, meeting, brainstorming, business, teamwork, team, people, office, group, corporate, conference, colleagues, company, partnership, seminar, project, table, professionals, casual, partners'),\n hit(3267505, 1280, 853, 'startup-whiteboard-room-indoors-3267505', 'startup, whiteboard, room, indoors, adult, office, business, technology, male, corporate, design, designer, brainstorm, startup, office, business, business, business, business, business'),\n hit(2557399, 1280, 853, 'people-girls-women-students-2557399', 'people, girls, women, students, friends, study, school, activity, homework, colorful, pens, drawing, sketch, students, students, students, friends, study, study, school'),\n hit(1868728, 1280, 853, 'concept-man-papers-person-plan-1868728', 'concept, man, papers, person, plan, planning, research, thinking, whiteboard, blue paper, blue thinking, blue research, blue plan, blue planning, blue think, plan, plan, planning, planning, research'),\n hit(1837238, 1280, 960, 'blueprints-entrepreneur-hands-1837238', 'blueprints, entrepreneur, hands, laptop, macbook, mobile phone, notebook, schematics, working, planning, gray computer, gray laptop, gray work, gray phone, gray mobile, gray plan, gray smartphone, gray telephone, gray planning, gray entrepreneur'),\n hit(4545708, 1280, 853, 'forforest-klagenfurt-austria-mood-4545708', 'forforest, klagenfurt, austria, mood, art project, art, forest, nature, stadium, project, environment'),\n hit(3125882, 1280, 768, 'triangle-quality-time-cost-3125882', 'triangle, quality, time, cost, efficiently, business, projects, drawing, board, profit, optimization, management, budget, yield, lodestar, realize, how to calculate, draw, chalk, representation'),\n hit(4577586, 1280, 730, 'forforest-klagenfurt-austria-forest-4577586', 'forforest, klagenfurt, austria, forest, stadium, project, art project, nature, art, environment'),\n hit(2738526, 1280, 851, 'project-planning-business-management-2738526', 'project planning, business, management, professional, success, project, project planning, project planning, project planning, project planning, project planning, project, project, project, project'),\n hit(4051777, 1280, 786, 'work-work-process-to-organize-4051777', 'work, work process, to organize, business, office, team, structure, organization, workflow, development, planning, management, success, company, team, team, planning, planning, planning, management'),\n hit(2650382, 1280, 853, 'technology-pressure-lead-set-2650382', 'technology, pressure, lead set, printing house, barmbek, museum of work, hamburg, project, printing house, printing house, printing house, printing house, printing house'),\n hit(4780150, 1280, 681, 'startup-planning-team-computing-4780150', 'startup, planning, team, computing, programming, whiteboard, girl, laptop, project, strategy, work, technology, entrepreneur, whiteboard, whiteboard, whiteboard, whiteboard, whiteboard'),\n hit(849805, 1280, 853, 'startup-business-people-students-849805', 'startup, business, people, students, office, strategy, work, technology, company, corporate, communication, young, plan, marketing, computer, design, professional, planning, internet, project'),\n hit(2852375, 1280, 853, 'stickies-post-it-note-business-2852375', 'stickies, post-it, note, business, career, start-up, company, competence, concept, conceptual, employee, employment, future, goal, idea, job, opportunity, orientation, plan, professional'),\n hit(593343, 1280, 848, 'startup-start-up-people-593343', 'startup, start-up, people, silicon valley, teamwork, business, team, office, group, meeting, corporate, conference, businessman, company, men, partnership, table, technology, casual, successful'),\n hit(3683781, 1280, 853, 'business-idea-planning-board-3683781', 'business idea, planning, board, business plan, business, plan, strategy, vision, mission, work, finance, team, teamwork, success, advisor, profession, successful, expert, career, professional'),\n hit(10503583, 1280, 714, 'office-environment-discussion-10503583', 'office environment, discussion, collaboration, presentation, business, technology, ties, work environment, people, conference, colleagues, modern office, laptops, screen, caucasian, african american, asian women, office desk, modern technology, productivity'),\n hit(4702962, 1280, 853, 'mega-project-construction-4702962', 'mega project, construction, infrastructure, urban, engineering, improvement, beautification, civil engineering, city blocks, landscape, cityscape, skyscraper, waterfront, civil engineering, civil engineering, civil engineering, civil engineering, civil engineering'),\n hit(10171012, 1280, 714, 'eam-workshop-office-collaboration-10171012', 'eam, workshop, office, collaboration, sticky notes, planning, strategy, brainstorming, table, overhead, people, working, laptop, notebooks, creativity, business, meeting, together, analysis, group'),\n hit(3772738, 1280, 722, 'industrial-lisbon-fans-steel-3772738', 'industrial, lisbon, fans, steel, project, portugal'),\n hit(5972673, 1280, 720, 'hotel-sign-board-style-logo-5972673', 'hotel, sign, board, style, logo, design, modern, project, luxury, decoration, ornate, creative, event, elegant, elegance'),\n hit(4051773, 1280, 849, 'business-office-team-kanban-work-4051773', 'business, office, team, kanban, work, work process, to organize, structure, organization, workflow, development, planning, management, success, company, team, team, kanban, kanban, kanban'),\n hit(5235095, 1280, 853, 'projects-open-project-idea-5235095', 'projects, open, project, idea, strategy, creativity, creative, think, begin, management, work, inspiration, template, list, laptop, ideas, mockup, project, project, list'),\n hit(3105873, 1280, 802, 'businessman-plan-quality-strategy-3105873', 'businessman, plan, quality, strategy, team, production planning, steering, structural organization, work process, finance, business administration, work organization, flow of information, information logistics, information management, business informatics, logistics, glass, glass pane, organization'),\n hit(4854099, 1280, 1025, 'dining-tables-caf%C3%A9-a-restaurant-4854099', 'dining tables, café, a restaurant, interior design, designers, project, computer graphics, vacation, dinner, bistro, interior design, interior design, interior design, interior design, interior design, bistro, bistro, bistro, bistro, bistro'),\n hit(4927716, 1280, 854, 'engineer-noise-and-vibration-engineer-4927716', 'engineer, noise and vibration engineer, drawing, sketch, diagram, office, teamwork, design, blueprint, blueprint, blueprint, blueprint, blueprint, blueprint'),\n hit(2717427, 1280, 853, 'business-contract-b-agreement-2717427', 'business, contract, b, agreement, business deal, trade, consultation, signature, concept, team, form, file, document, documents, ballpoint pen, paper, conclusion, plan, planning, housebuilding'),\n hit(594127, 1280, 853, 'startup-business-businessman-594127', 'startup, business, businessman, notebook, laptop, computer, company, office, people, marketing, planning, strategy, project, creative, technology, start-up, organization, development, commerce, internet'),\n hit(2762319, 1280, 848, 'building-professional-employee-2762319', 'building, professional, employee, builder, worker, architect, repair, operator, security, business, build, body, man, factory, helmet, surveyor, helm, corporation, people, foreman'),\n hit(3536753, 1280, 853, 'planning-housebuilding-pre-project-3536753', 'planning, housebuilding, pre-project, to build, design, engineer, architect, single family home, architecture, building, blueprint, engineer, architect, architect, architect, architect, architect, blueprint, blueprint, blueprint'),\n hit(5090787, 1280, 851, 'crane-building-works-city-urban-5090787', 'crane, building, works, city, urban, project, to build, real estate, engineering, development'),\n hit(2468080, 1280, 659, 'construction-site-georgia-usa-2468080', 'construction site, georgia, usa, landscape, dirt, red clay dirt, construction, site, architecture, building, industry, equipment, sky, bulldozer, urban, build, property, excavation, dirt mover, engineering'),\n hit(1953367, 1280, 853, 'worker-yard-safety-child-surveyor-1953367', 'worker, yard safety, child, surveyor, worksite, safety device, project, design, architecture, child labour, surveyor, surveyor, child labour, child labour, child labour, child labour, child labour'),\n hit(4941336, 1280, 854, 'engineer-engineering-4941336', 'engineer, engineering, electrical engineer, electrical engineering, teamwork, office, meeting, whiteboard, gray office, gray meeting, gray conference, gray teamwork, engineer, engineer, meeting, whiteboard, whiteboard, whiteboard, whiteboard, whiteboard'),\n hit(10503582, 1280, 714, 'teamwork-management-office-10503582', 'teamwork, management, office, presentation, strategy, whiteboard, collaboration, innovation, discussion, people, meeting, idea, motivation, professional, cooperation, information, problem solving, profession'),\n]\n\n/** `project` (vertical, min_height 900), \"Project two\" and \"Project three\"; key `d1c1a97fb66558d3d4b2c22e0b0b6ceb426567798a7b9f235f2c4a85d4eff580`, answered 2026-10-18T16:54:37.312Z. */\nexport const PROJECT_TALL: StockPhoto[] = [\n hit(3095504, 852, 1280, 'school-board-chalk-learning-3095504', 'school, board, chalk, learning, school projects'),\n hit(5671108, 853, 1280, 'paper-brushes-pantone-pencils-5671108', 'paper, brushes, pantone, pencils, color pencils, patterns, colors, design, texture, art, project, pantone, pantone, pantone, pantone, pantone, project, project'),\n hit(4955638, 960, 1280, 'brush-paint-painting-home-project-4955638', 'brush, paint, painting, home, project, diy, remodel, house, brown home, brown painting, brown paint, diy, diy, diy, diy, remodel, remodel, remodel, remodel, remodel'),\n hit(6078679, 853, 1280, 'students-group-meeting-discussion-6078679', 'students, group, meeting, discussion, brainstorming, huddle, group meeting, study, stairs, staircase, university, haifa university, discussion, discussion, brainstorming, university, university, university, university, university'),\n hit(4349618, 853, 1280, 'desk-draw-design-pencil-table-pen-4349618', 'desk, draw, design, pencil, table, pen, creativity, art, work, office, write, project, workplace, illustrator'),\n hit(4349617, 853, 1280, 'desk-draw-design-pencil-table-pen-4349617', 'desk, draw, design, pencil, table, pen, creativity, art, work, office, write, project, workplace, illustrator, workplace, workplace, workplace, workplace, workplace'),\n hit(6227647, 853, 1280, 'bridge-suspension-bridge-6227647', 'bridge, suspension bridge, baling river bridge, off ridge, guizhou, china, construction, project, transportation'),\n hit(5180844, 851, 1280, 'screwdriver-tools-building-master-5180844', 'screwdriver, tools, building, master, builder, construction, house, frame house, finishing, project, implementation'),\n hit(4349619, 853, 1280, 'desk-draw-design-pencil-table-pen-4349619', 'desk, draw, design, pencil, table, pen, creativity, art, work, office, write, project, workplace, illustrator, desk, project, project, project, project, project'),\n hit(4941144, 854, 1280, 'engineer-engineering-teamwork-4941144', 'engineer, engineering, teamwork, civil engineer, office, planning, diagram, map, engineer, teamwork, teamwork, teamwork, civil engineer, civil engineer, civil engineer, civil engineer, civil engineer'),\n hit(3402332, 595, 1280, 'albert-einstein-physics-statue-3402332', 'albert einstein, physics, statue, project, ulm, theory of relativity, science, ulm münsterplatz, albert einstein, albert einstein, albert einstein, albert einstein, albert einstein'),\n hit(4816113, 854, 1280, 'notebook-computer-macbook-prints-4816113', 'notebook, computer, macbook, prints, project, work, keyboard, the internet, business, office, technology, web, monitor, screen, display, mac, online, pc, the documents'),\n hit(5252624, 960, 1280, 'coffee-table-desk-restaurant-5252624', 'coffee, table, desk, restaurant, chopped off, espresso, reading, cappuccino, caffeine, cup, coffee cup, project, drinks, white, drink'),\n hit(4941174, 854, 1280, 'engineer-engineering-civil-engineer-4941174', 'engineer, engineering, civil engineer, maps, diagram, plans, flood prevention, civil engineer, civil engineer, civil engineer, civil engineer, civil engineer, flood prevention'),\n hit(4940823, 854, 1280, 'engineer-engineering-civil-engineer-4940823', 'engineer, engineering, civil engineer, theme park, civil, design, computer, rollercoaster, civil engineer, civil engineer, civil engineer, civil engineer, civil engineer, rollercoaster'),\n hit(5146202, 949, 1280, 'adult-architect-caucasian-5146202', 'adult, architect, caucasian, construction, cup, design, designer, details, engineer, engineering, female, girl, hands, paper, pencil, people, person, plans, print, project'),\n hit(5146201, 937, 1280, 'adult-architect-caucasian-5146201', 'adult, architect, caucasian, construction, cup, design, designer, details, engineer, engineering, female, girl, hands, paper, pencil, people, person, plans, print, project'),\n hit(1893393, 1028, 1280, 'john-herschel-glenn-jr-july-18-1921-1893393', 'john herschel glenn jr, july 18 1921, december 8 2016, american aviator, engineer, astronaut, united states senator, ohio, february 20 - 1962, friendship 7, mercury seven, nasa, 1959, flag, globe, smiling, america\\'s first astronauts, project mercury, cambridge ohio, 30 october 1964'),\n hit(5203846, 850, 1280, 'home-office-at-home-internet-woman-5203846', 'home office, at home, internet, woman, make a phone call, mobile, communication, contact, accessible, home, web, covid-19, business, planning, company, work, technology, write, students, project'),\n hit(4527357, 853, 1280, 'site-crane-construction-build-4527357', 'site, crane, construction, build, project, architecture, work, cranes, city, technology, development, sunset, nature, machine, machinery, metal, coming soon, beams, connection, just construction'),\n hit(4545898, 853, 1280, 'crane-sky-industry-cranes-building-4545898', 'crane, sky, industry, cranes, building, logistics, port, clouds, project, transport, the water, migration, architecture, work, skull, high, shipping, build, dusk, export'),\n hit(5022019, 853, 1280, 'construction-crane-site-house-roof-5022019', 'construction, crane, site, house, roof, coming soon, building, project, structure, development, planning, blue plan, blue planning'),\n hit(5222313, 853, 1280, 'construction-building-crane-tool-5222313', 'construction, building, crane, tool, industry, project, heaven, technology, work, equipment, cement, framework, architecture, urban, modern, construction site, machine, growth, machinery'),\n hit(2670140, 853, 1280, 'architecture-house-gold-plated-2670140', 'architecture, house, gold plated, house of gold, hamburg, veddel, old building, art action, boran burchardt'),\n hit(4966508, 853, 1280, 'riga-bear-buddy-bear-art-4966508', 'riga, bear, beautiful wallpaper, buddy bear, art, art project, aid organization, downtown, historic center, baltic, latvia, city, modern, animals, historical, exhibition, art exhibition, nature, abstract, happy'),\n hit(5048476, 960, 1280, 'pencil-color-art-school-colorful-5048476', 'pencil, color, nature, art, school, colorful, painting, creativity, design, flower background, education, colors, pens, children, flower wallpaper, draw, beautiful flowers, group, flowers, college'),\n hit(1534677, 869, 1280, 'construction-site-crane-scaffolding-1534677', 'construction site, crane, scaffolding, building construction, action, free sky, noise pollution, urban planning, crane, noise pollution, noise pollution, noise pollution, noise pollution, noise pollution'),\n hit(4943995, 853, 1280, 'coronavirus-quarantine-virus-4943995', 'coronavirus, quarantine, virus, pandemic, epidemic, covid-19, disease, crown, sars-cov-2, corona-virus, products, medical, food, buckwheat, social project, moscow, russia, people, humor, product'),\n hit(4943972, 853, 1280, 'coronavirus-quarantine-virus-4943972', 'coronavirus, quarantine, virus, pandemic, epidemic, covid-19, disease, crown, sars-cov-2, corona-virus, products, medical, food, buckwheat, social project, moscow, russia, people, humor, product'),\n hit(4943997, 853, 1280, 'coronavirus-quarantine-virus-4943997', 'coronavirus, quarantine, virus, pandemic, epidemic, covid-19, disease, crown, sars-cov-2, corona-virus, products, medical, food, buckwheat, social project, moscow, russia, people, humor, product'),\n hit(4839227, 827, 1280, 'build-cement-column-construct-4839227', 'build, cement, column, construct, construction, dangerous, environment, equipment, iron, machine, machinery, piling, powerful, projects, site, steel, technology, tool, truck, work'),\n hit(4024135, 1088, 1280, 'roses-crepe-paper-crepe-flower-art-4024135', 'roses, nature, crepe paper, crepe flower, art, paper, flowers, color, colorful, floral, flower background, handmade, gift, handcraft, crafting, art flower, tissue, creative, decor, role paper'),\n hit(3346918, 854, 1280, 'wood-outdoors-architecture-wooden-3346918', 'wood, outdoors, architecture, wooden, luxury, contemporary, modern, 3d, style, design, elegant, wall, terrace, stairs, garden, room, timber, green, landscape, light'),\n hit(8509775, 853, 1280, 'woman-architect-creation-layout-8509775', 'woman, architect, creation, layout, beauty, design, building, architectural project, architecture, interior, history, handmade, prototyping, portrait'),\n hit(3220500, 853, 1280, 'the-background-wood-wooden-retro-3220500', 'the background, phone wallpaper, wood, wooden, retro, texture, boards, pattern, the structure of the, background, wallpaper, wooden texture, panel, nature, model, projects, iphone wallpaper'),\n hit(4024136, 1075, 1280, 'roses-crepe-paper-crepe-flower-art-4024136', 'roses, crepe paper, crepe flower, art, paper, flowers, color, colorful, floral, handmade, gift, handcraft, crafting, art flower, tissue, creative, decor, role paper, diy projects, brown gift'),\n]\n\n/** `project four` (horizontal, min_width 900), \"Project four\"; key `3111656cc3157b3af02dd8613260b89170c68ecd0a27b4ae77a279f940a3d81f`, answered 2026-10-18T16:54:37.546Z. */\nexport const PROJECT_FOUR: StockPhoto[] = [\n hit(6993669, 1280, 720, 'lavender-flowers-plant-6993669', 'lavender, flowers, plant, purple flowers, hd wallpaper, petals, wallpaper 4k, free wallpaper, desktop backgrounds, flowering, bloom, nature, bokeh, botany, flora, 4k wallpaper, background, flower wallpaper, full hd wallpaper, heading'),\n hit(6993670, 1280, 720, 'geranium-flowers-plant-pink-flowers-6993670', 'geranium, flowers, beautiful wallpaper, plant, 4k wallpaper, pink flowers, flowering, bloom, petals, wallpaper hd, floral background, buds, garden, nature, cool backgrounds, flower wallpaper, botany, desktop backgrounds, flora, free background'),\n hit(6517447, 1280, 853, 'sewing-machine-workshop-device-6517447', 'sewing machine, workshop, device, tailor, machine, sewing, sewing projects, sewing techniques, sewing tips, sewing essentials, sewing tutorial, sewing for beginners, sewing skills, sewing inspiration, sewing craftsmanship, sewing accessories, sewing tools, sewing stitches, sewing patterns, sewing fa'),\n hit(2557396, 1280, 853, 'people-girls-women-students-2557396', 'people, girls, women, students, friends, talking, meeting, study, group, activity, homework, group work, brainstorming, group study, people, people, people, students, students, students'),\n hit(5382501, 1280, 771, 'job-office-team-business-internet-5382501', 'job, office, team, business, internet, technology, design, draft, portable, meeting, job, office, office, office, office, team, team, business, business, business'),\n hit(594132, 1280, 853, 'office-startup-business-home-office-594132', 'office, startup, business, home office, businessman, notebook, laptop, computer, company, people, marketing, planning, strategy, project, creative, technology, start-up, organization, development, commerce'),\n hit(594091, 1280, 853, 'meeting-brainstorming-business-594091', 'meeting, brainstorming, business, teamwork, team, people, office, group, corporate, conference, colleagues, company, partnership, project, table, partners, plan, sketch, notepad, coworkers'),\n hit(2284501, 1280, 800, 'meeting-business-architect-office-2284501', 'meeting, business, architect, office, team, plan, blueprints, teamwork, group, people, project, workplace, table, desk, meeting, meeting, meeting, business, business, business'),\n hit(594090, 1280, 853, 'startup-meeting-brainstorming-594090', 'startup, meeting, brainstorming, business, teamwork, team, people, office, group, corporate, conference, colleagues, company, partnership, seminar, project, table, professionals, casual, partners'),\n hit(3267505, 1280, 853, 'startup-whiteboard-room-indoors-3267505', 'startup, whiteboard, room, indoors, adult, office, business, technology, male, corporate, design, designer, brainstorm, startup, office, business, business, business, business, business'),\n hit(1868728, 1280, 853, 'concept-man-papers-person-plan-1868728', 'concept, man, papers, person, plan, planning, research, thinking, whiteboard, blue paper, blue thinking, blue research, blue plan, blue planning, blue think, plan, plan, planning, planning, research'),\n hit(2557399, 1280, 853, 'people-girls-women-students-2557399', 'people, girls, women, students, friends, study, school, activity, homework, colorful, pens, drawing, sketch, students, students, students, friends, study, study, school'),\n hit(1837238, 1280, 960, 'blueprints-entrepreneur-hands-1837238', 'blueprints, entrepreneur, hands, laptop, macbook, mobile phone, notebook, schematics, working, planning, gray computer, gray laptop, gray work, gray phone, gray mobile, gray plan, gray smartphone, gray telephone, gray planning, gray entrepreneur'),\n hit(4545708, 1280, 853, 'forforest-klagenfurt-austria-mood-4545708', 'forforest, klagenfurt, austria, mood, art project, art, forest, nature, stadium, project, environment'),\n hit(1201014, 1280, 720, 'running-track-numbers-fog-1201014', 'running track, numbers, fog, athletic field, mist, sport, tracks, running, sprint, stadium, running track, sport, sport, sport, sport, sport, running, running, running, running'),\n hit(1883840, 1280, 804, 'advent-advent-candles-candles-1883840', 'advent, advent candles, candles, candlelights, flames, burning, burning candles, red candles, christmas candles, wax, shining, christmas, advent, advent, advent, advent, advent, advent candles, candles, christmas'),\n hit(3125882, 1280, 768, 'triangle-quality-time-cost-3125882', 'triangle, quality, time, cost, efficiently, business, projects, drawing, board, profit, optimization, management, budget, yield, lodestar, realize, how to calculate, draw, chalk, representation'),\n hit(1688111, 1280, 853, 'buttons-four-holes-costume-stud-1688111', 'buttons, four holes, costume, stud, multicoloured, close up'),\n hit(7935771, 1280, 837, 'atv-drifting-dirt-fun-recreation-7935771', 'atv, drifting, dirt, fun, recreation, outdoor, quad, four wheeler, dust, nature, sunset'),\n hit(438464, 1280, 841, 'motorbike-racing-motorcycle-race-438464', 'motorbike, racing, motorcycle, race, bike, speed, road, drive, sport, biker, curve, motorcyclist, extreme, helmet, racer, riding, motorbike, motorcycle, motorcycle, motorcycle'),\n hit(8287329, 1280, 836, 'border-collie-dog-domestic-animal-8287329', 'border collie, dog, domestic animal, animal, domestic dog, herding dog, mammal, portrait, dog breed, friend, pet, companion, tongue, snout, four-legged, wildlife, nature, saw animal, interested, attentivem'),\n hit(8061687, 1280, 1280, 'four-counts-of-libel-jeweler-insect-8061687', 'four counts of libel, jeweler, insect, slander, nature, close, four-spotted, libel, four-spotted libel, libelle'),\n hit(299772, 1280, 853, 'car-auto-4wd-drive-automobile-299772', 'car, auto, car wallpapers, 4wd, drive, automobile, vehicle, automotive, road, street, countryside, rural, road trip, hyundai terracan, terracan, hyundai, scotland, orkney islands'),\n hit(8058337, 1280, 853, 'lancaster-ww2-bomber-aviation-8058337', 'lancaster, ww2, bomber, aviation, aircraft, airplane, heritage, vintage, raf, military, nature, blue sky, clouds, display, airshow, uk, canon'),\n hit(8071993, 1280, 720, 'insect-brown-dragonfly-entomology-8071993', 'insect, desktop backgrounds, 4k wallpaper, brown dragonfly, 4k wallpaper 1920x1080, windows wallpaper, entomology, free wallpaper, cool backgrounds, beautiful wallpaper, free background, mac wallpaper, species, macro, four-spotted chaser, laptop wallpaper, hd wallpaper, full hd wallpaper, wallpaper'),\n hit(170272, 1280, 839, 'plane-aircraft-airbase-jet-170272', 'plane, aircraft, airbase, jet, jet aircraft, airport, military transport aircraft, military cargo aircraft, cargo aircraft, evening, night, mcdonnell douglas, boeing c-17 globemaster iii, air force, united states air force, usaf, plane, plane, plane, plane'),\n hit(1811835, 1280, 850, 'four-spot-dragonfly-animals-1811835', 'four-spot dragonfly, animals, dragonflies, close up, nature, insect'),\n hit(1949981, 1280, 795, 'clover-four-leaf-clover-lucky-clover-1949981', 'clover, four leaf clover, lucky clover, tic tac toe, mystery, game, three wins, four-leaf clover, lucky charm, clover, mystery, mystery, game, game, game, game, game'),\n hit(4577586, 1280, 730, 'forforest-klagenfurt-austria-forest-4577586', 'forforest, klagenfurt, austria, forest, stadium, project, art project, nature, art, environment'),\n hit(2738526, 1280, 851, 'project-planning-business-management-2738526', 'project planning, business, management, professional, success, project, project planning, project planning, project planning, project planning, project planning, project, project, project, project'),\n hit(8254778, 1280, 851, 'uaz-suv-jeep-lake-uaz-patriot-8254778', 'uaz, suv, jeep, lake, uaz patriot, car wallpapers, machine, uaz-3163, journey, nature, vehicle, four-wheel drive, on the nature, all-wheel drive, car, silver, autumn, forest, road, 4 x 4'),\n hit(4136559, 1280, 960, 'four-eyes-fish-fish-four-eye-4136559', 'four eyes fish, fish, four eye, nature, anableps, tooth carp'),\n hit(8842081, 1280, 853, 'four-spot-dragonfly-dragonfly-insect-8842081', 'four-spot dragonfly, dragonfly, insect, nature, vierfleck, wing, biotope, dragonflies'),\n hit(2015694, 1280, 854, 'range-rover-car-truck-range-rover-2015694', 'range rover, car, truck, range, rover, vehicle, land, 4x4, off-road, jeep, track, tourism, traffic, driving, sport, drive, offroad, car wallpapers, outdoor, speed'),\n hit(4051777, 1280, 786, 'work-work-process-to-organize-4051777', 'work, work process, to organize, business, office, team, structure, organization, workflow, development, planning, management, success, company, team, team, planning, planning, planning, management'),\n hit(5616878, 1280, 853, 'dragonfly-insect-nature-5616878', 'dragonfly, insect, nature, four-spotted chaser, four-spotted skimmer, libellula quadrimaculata, animal, wildlife, stem, plant, flora, fauna, closeup'),\n hit(3463101, 1280, 853, 'clover-garden-vierbl%C3%A4ttrig-nature-3463101', 'clover, garden, vierblättrig, nature, four leaf clover, green clover, lucky charm, four-leaf clover'),\n hit(2650382, 1280, 853, 'technology-pressure-lead-set-2650382', 'technology, pressure, lead set, printing house, barmbek, museum of work, hamburg, project, printing house, printing house, printing house, printing house, printing house'),\n hit(4780150, 1280, 681, 'startup-planning-team-computing-4780150', 'startup, planning, team, computing, programming, whiteboard, girl, laptop, project, strategy, work, technology, entrepreneur, whiteboard, whiteboard, whiteboard, whiteboard, whiteboard'),\n hit(7683775, 1280, 853, 'four-leaf-clover-happiness-horseshoe-7683775', 'four leaf clover, happiness, horseshoe, new year\\'s day, sylvester, ribbon, superstition, horseshoe, horseshoe, horseshoe, horseshoe, horseshoe, superstition, superstition'),\n]\n\n/** `four` (horizontal, min_width 900), \"Project four\"'s object word; key `0b62e5bb72fda86677801883056085560e2e6276e272680554aa3250c51a283d`, answered 2026-10-18T16:54:37.825Z. */\nexport const FOUR: StockPhoto[] = [\n hit(1201014, 1280, 720, 'running-track-numbers-fog-1201014', 'running track, numbers, fog, athletic field, mist, sport, tracks, running, sprint, stadium, running track, sport, sport, sport, sport, sport, running, running, running, running'),\n hit(1883840, 1280, 804, 'advent-advent-candles-candles-1883840', 'advent, advent candles, candles, candlelights, flames, burning, burning candles, red candles, christmas candles, wax, shining, christmas, advent, advent, advent, advent, advent, advent candles, candles, christmas'),\n hit(1688111, 1280, 853, 'buttons-four-holes-costume-stud-1688111', 'buttons, four holes, costume, stud, multicoloured, close up'),\n hit(438464, 1280, 841, 'motorbike-racing-motorcycle-race-438464', 'motorbike, racing, motorcycle, race, bike, speed, road, drive, sport, biker, curve, motorcyclist, extreme, helmet, racer, riding, motorbike, motorcycle, motorcycle, motorcycle'),\n hit(7935771, 1280, 837, 'atv-drifting-dirt-fun-recreation-7935771', 'atv, drifting, dirt, fun, recreation, outdoor, quad, four wheeler, dust, nature, sunset'),\n hit(8287329, 1280, 836, 'border-collie-dog-domestic-animal-8287329', 'border collie, dog, domestic animal, animal, domestic dog, herding dog, mammal, portrait, dog breed, friend, pet, companion, tongue, snout, four-legged, wildlife, nature, saw animal, interested, attentivem'),\n hit(8061687, 1280, 1280, 'four-counts-of-libel-jeweler-insect-8061687', 'four counts of libel, jeweler, insect, slander, nature, close, four-spotted, libel, four-spotted libel, libelle'),\n hit(8058337, 1280, 853, 'lancaster-ww2-bomber-aviation-8058337', 'lancaster, ww2, bomber, aviation, aircraft, airplane, heritage, vintage, raf, military, nature, blue sky, clouds, display, airshow, uk, canon'),\n hit(299772, 1280, 853, 'car-auto-4wd-drive-automobile-299772', 'car, auto, car wallpapers, 4wd, drive, automobile, vehicle, automotive, road, street, countryside, rural, road trip, hyundai terracan, terracan, hyundai, scotland, orkney islands'),\n hit(8071993, 1280, 720, 'insect-brown-dragonfly-entomology-8071993', 'insect, desktop backgrounds, 4k wallpaper, brown dragonfly, 4k wallpaper 1920x1080, windows wallpaper, entomology, free wallpaper, cool backgrounds, beautiful wallpaper, free background, mac wallpaper, species, macro, four-spotted chaser, laptop wallpaper, hd wallpaper, full hd wallpaper, wallpaper'),\n hit(170272, 1280, 839, 'plane-aircraft-airbase-jet-170272', 'plane, aircraft, airbase, jet, jet aircraft, airport, military transport aircraft, military cargo aircraft, cargo aircraft, evening, night, mcdonnell douglas, boeing c-17 globemaster iii, air force, united states air force, usaf, plane, plane, plane, plane'),\n hit(1811835, 1280, 850, 'four-spot-dragonfly-animals-1811835', 'four-spot dragonfly, animals, dragonflies, close up, nature, insect'),\n hit(1949981, 1280, 795, 'clover-four-leaf-clover-lucky-clover-1949981', 'clover, four leaf clover, lucky clover, tic tac toe, mystery, game, three wins, four-leaf clover, lucky charm, clover, mystery, mystery, game, game, game, game, game'),\n hit(8254778, 1280, 851, 'uaz-suv-jeep-lake-uaz-patriot-8254778', 'uaz, suv, jeep, lake, uaz patriot, car wallpapers, machine, uaz-3163, journey, nature, vehicle, four-wheel drive, on the nature, all-wheel drive, car, silver, autumn, forest, road, 4 x 4'),\n hit(4136559, 1280, 960, 'four-eyes-fish-fish-four-eye-4136559', 'four eyes fish, fish, four eye, nature, anableps, tooth carp'),\n hit(2015694, 1280, 854, 'range-rover-car-truck-range-rover-2015694', 'range rover, car, truck, range, rover, vehicle, land, 4x4, off-road, jeep, track, tourism, traffic, driving, sport, drive, offroad, car wallpapers, outdoor, speed'),\n hit(8842081, 1280, 853, 'four-spot-dragonfly-dragonfly-insect-8842081', 'four-spot dragonfly, dragonfly, insect, nature, vierfleck, wing, biotope, dragonflies'),\n hit(5616878, 1280, 853, 'dragonfly-insect-nature-5616878', 'dragonfly, insect, nature, four-spotted chaser, four-spotted skimmer, libellula quadrimaculata, animal, wildlife, stem, plant, flora, fauna, closeup'),\n hit(3463101, 1280, 853, 'clover-garden-vierbl%C3%A4ttrig-nature-3463101', 'clover, garden, vierblättrig, nature, four leaf clover, green clover, lucky charm, four-leaf clover'),\n hit(7683775, 1280, 853, 'four-leaf-clover-happiness-horseshoe-7683775', 'four leaf clover, happiness, horseshoe, new year\\'s day, sylvester, ribbon, superstition, horseshoe, horseshoe, horseshoe, horseshoe, horseshoe, superstition, superstition'),\n hit(6750673, 1280, 853, 'dragonfly-insect-four-spotted-chaser-6750673', 'dragonfly, insect, four-spotted chaser, four-spotted skimmer, libellula quadrimaculata, wildlife, macro, entomology'),\n hit(6750672, 1280, 845, 'dragonfly-insect-four-spotted-chaser-6750672', 'dragonfly, insect, four-spotted chaser, four-spotted skimmer, libellula quadrimaculata, wildlife, macro, entomology, dragonfly, dragonfly, dragonfly, dragonfly, dragonfly'),\n hit(3809760, 1280, 964, 'dog-domestic-animal-four-legged-3809760', 'dog, nature, domestic animal, four-legged, animal, pet, cute'),\n hit(4581745, 1280, 836, 'buttons-multicoloured-coloured-4581745', 'buttons, multicoloured, coloured, needlework, stud, close up, colorful, four holes'),\n hit(7683768, 1280, 853, 'horseshoe-four-leaf-clover-lucky-pig-7683768', 'horseshoe, four leaf clover, lucky pig, happiness, pig, sylvester, new year\\'s day, superstition'),\n hit(4430218, 1280, 848, 'tank-roman-horses-four-antique-4430218', 'tank, roman, horses, four, nature, antique, arena, horse'),\n hit(7069077, 1280, 857, 'ducks-walk-four-march-ducks-march-7069077', 'ducks, walk, four, march, ducks march, nature, birds, waddle, mallard'),\n hit(3782291, 1280, 853, 'dog-domestic-animal-four-legged-3782291', 'dog, domestic animal, four-legged, nature, pet, animal, cute'),\n hit(2893065, 1280, 452, 'four-plane-take-off-2893065', 'four, plane, take off, plane, take off, take off, take off, take off, take off'),\n hit(2561880, 1280, 853, 'dark-night-signage-neon-lights-2561880', 'dark, night, signage, neon, lights, black night, black dark, black neon, signage, signage, signage, signage, signage, neon, neon, neon'),\n hit(3741207, 1280, 864, 'dog-domestic-animal-four-legged-3741207', 'dog, nature, domestic animal, four-legged, pet, animal, cute'),\n hit(8190638, 1280, 874, 'four-spotted-chaser-dragonfly-insect-8190638', 'four-spotted chaser, dragonfly, insect, wings, environment, nature, closeup'),\n hit(3741247, 1280, 853, 'dog-domestic-animal-four-legged-3741247', 'dog, domestic animal, four-legged, portrait, view, nature, animal, pet, cute'),\n hit(3418468, 1280, 853, 'clover-four-leaf-clover-lucky-clover-3418468', 'clover, four leaf clover, lucky clover, four-leaf clover, lucky charm, symbol, happiness, symbol of good luck, plant, green clover, garden, nature'),\n hit(2738405, 1280, 853, 'industry-industry-4-web-network-2738405', 'industry, industry 4, web, network, interfaces, internet of things, project, high-tech, strategy, research, technology, production, gear, information technology, communication, networking, networked, logistics, machine, conductor tracks'),\n hit(4590090, 1280, 853, 'wooden-man-male-characters-4590090', 'wooden man, male, characters, game characters, game, lie, injured, watch, tolerate, four'),\n hit(3854104, 1280, 853, 'dog-domestic-animal-four-legged-3854104', 'dog, domestic animal, nature, four-legged, pet, portrait, view, animal, cute'),\n hit(7702033, 1280, 853, 'love-four-leaf-clover-happiness-7702033', 'love, happy mothers day, four-leaf clover, happiness, happy, four leaf clover, lucky clover, oxalis tetraphylla, superstition, faith, key, valentine\\'s day'),\n hit(3456274, 1280, 853, 'four-leaf-clover-clover-3456274', 'four leaf clover, clover, meadow clover, nature, meadow, plant'),\n hit(7867596, 1280, 850, 'wolf-animals-vertebrate-four-legged-7867596', 'wolf, animals, vertebrate, four-legged, mammal, predator, nature, wildlife, beast'),\n]\n\n/** `artist studio` (horizontal, min_width 900), the portfolio kind's broad search; key `307024eed371cb7dee1239d5dbcfe34310ea9398a7c7895efdd6c535e4a9c7db`, answered 2026-10-18T16:54:38.048Z. */\nexport const ARTIST_STUDIO_WIDE: StockPhoto[] = [\n hit(3129361, 1280, 854, 'brushes-painter-work-shop-bowl-3129361', 'brushes, painter, work shop, bowl, lights, work, creative, creativity, painting, artist, paintbrush, studio, art, brush, drawing, artistic, hobby, color, tool, paint'),\n hit(911804, 1280, 720, 'painting-pencils-paint-pens-911804', 'painting, pencils, paint, pens, watercolor, acrylic, watercolor painting, art tools, art materials, painting, painting, painting, painting, painting, paint, paint'),\n hit(1478831, 1280, 855, 'art-art-supplies-artist-blue-brush-1478831', 'art, art supplies, artist, blue, brush, beautiful wallpaper, desktop backgrounds, color, creative, draw, paint, wallpaper hd, painting, wallpaper 4k, supplies, watercolor, laptop wallpaper, watercolour, background, cool backgrounds'),\n hit(4622221, 1280, 854, 'artist-studio-art-sculpture-4622221', 'artist, studio, art, sculpture, workshop, old man, tools, sculptor, creation, exhibit, working, professional, artwork, artist, artist, artist, artist, artist, studio, sculpture'),\n hit(1868562, 1280, 853, 'hands-paint-brush-painting-1868562', 'hands, paint, brush, painting, watercolor, watercolor painting, paintbrush, artist, canvas, art, paper, arts, painter, artistic, creative, creativity, painting, painting, painting, painting'),\n hit(4226688, 1280, 853, 'brushes-paint-color-painting-4226688', 'brushes, paint, color, painting, watercolor, artist, creative, creativity, palette, paintbrush, drawing, paint, paint, painting, painting, painting, painting, painting, watercolor, artist'),\n hit(2927793, 1280, 854, 'brushes-chalks-colorful-2927793', 'brushes, chalks, colorful, art materials, art supplies, coloring materials, paint, pens, art, artistic, creative, art supplies, art supplies, art, art, art, art, art'),\n hit(1683134, 1280, 853, 'brushes-art-paint-tool-decor-1683134', 'brushes, art, paint, tool, decor, bristles, decoration, painting, artistic, color, painter, creative, studio, canvas, create, creativity, oil, picture, inspiration, art'),\n hit(756326, 1280, 850, 'guitar-guitarist-music-756326', 'guitar, guitarist, music, playing guitar, classical guitar, acoustic guitar, musician, band, sound, recording, audio, musical, musical instrument, instrument, playing, artist, performer, professional, jazz, player'),\n hit(505353, 1280, 1280, 'man-artist-drawing-painting-505353', 'man, artist, drawing, painting, elderly, senior, old, aged, male, artist, artist, artist, artist, artist, drawing, drawing, drawing, painting, painting'),\n hit(1840481, 1280, 1280, 'art-brushes-colorful-paint-1840481', 'art, brushes, colorful, paint, paintbrushes, painting, artist, artistic, creative, creativity, art, art, art, art, art, paint, paint, paint, painting, painting'),\n hit(1937575, 1280, 854, 'painter-paint-artist-brush-tool-1937575', 'painter, paint, artist, brush, tool, color, design, creative, painting, drawing, creativity, art, colorful, craft, artistic, palette, acrylic, dye, draw, painter'),\n hit(3268988, 1280, 853, 'tattoo-tattoo-artist-arm-3268988', 'tattoo, tattoo artist, arm, tattoo, tattoo, tattoo, tattoo, tattoo'),\n hit(2940513, 1280, 1010, 'paint-acrylic-paint-art-supplies-2940513', 'paint, acrylic paint, art supplies, paintbrush, hobby, creative, oil painting, paint tubes, paint, paint, paint, paint, paint, acrylic paint, art supplies, art supplies, hobby, hobby, hobby, oil painting'),\n hit(4494491, 1280, 853, 'male-black-and-white-portrait-face-4494491', 'male, black and white, portrait, face, young, model, human, think, handsome, guy, confident, man, adult, head, human, human, human, human, human, think'),\n hit(1850856, 1280, 853, 'paint-brushes-paint-tubes-1850856', 'paint, brushes, paint tubes, paint brushes, artistic, creative, art materials, oil paint, painting materials, arts, artist, paint, paint brushes, paint brushes, creative, art materials, artist, artist, artist, artist'),\n hit(4155023, 1280, 853, 'workplace-macbook-computer-digital-4155023', 'workplace, macbook, computer, digital, oil painting, technology, work, creative, digital, creative, creative, creative, creative, creative'),\n hit(7937871, 1280, 853, 'paint-artist-supplies-art-creation-7937871', 'paint, artist supplies, art, creation, drawing, paint, paint, paint, paint, paint, drawing'),\n hit(2740463, 1280, 771, 'paint-tubes-paint-caps-art-2740463', 'paint tubes, paint, caps, art, painting, colors, artist, palette, blue art, blue painting, blue paint, blue color, art, painting, artist, artist, artist, artist, artist, blue color'),\n hit(3442472, 1280, 853, 'oil-painting-artist-studio-artist-3442472', 'oil painting, artist studio, artist, oil paint, painting palette, canvas, brush, studio, painting, painter, artistic, paintbrush, paint, workshop, creative, oil, picture, education, equipment, palette'),\n hit(2696947, 1280, 1280, 'girl-face-colorful-colors-artistic-2696947', 'girl, face, colorful, colors, artistic, model, person, woman, eyes, art, paint, portrait, body paint, face paint, girl, face, person, art, art, art'),\n hit(10493144, 1280, 714, 'artist-digital-drawing-tablet-10493144', 'artist, digital drawing, tablet, monitor, sunflower, bricks, brick wall, coffee, mug, sun hat, painter, coffee cup, yellow color, decoration, work, design, rustic style, countryside, studio, technology'),\n hit(2985569, 1280, 853, 'paint-makeup-girl-cosmetics-2985569', 'paint, makeup, girl, cosmetics, face paint, colorful, artistic, portrait, face, head, profile, young woman, colors, creativity, woman, eyes, model, body paint, creative, hand'),\n hit(96240, 1280, 851, 'brush-paint-color-watercolor-art-96240', 'brush, paint, color, watercolor, art, pink, colorful, craft, arts and crafts, painting, watercolor painting, artistic, creative, creativity, paintbrush, paint, art, art, art, art'),\n hit(10096739, 1280, 853, 'brown-pelican-pelican-portrait-10096739', 'brown pelican, pelican portrait, bird portrait, coastal bird, seabird, wildlife portrait, bird close up, pelican profile, black background, bird plumage, detailed feathers, pelican beak, blue eye, animal portrait, wildlife photography, minimalist portrait, moody portrait, artistic wildlife, bird pro'),\n hit(10445933, 1280, 714, 'ceramics-pottery-wheel-clay-woman-10445933', 'ceramics, pottery wheel, clay, woman, artist, artisan, handmade, studio, creativity, focus, hands, creating, shaping, wet, workshop, concentration, messy, skill, art'),\n hit(3068340, 1280, 800, 'paint-brush-to-dye-multicoloured-3068340', 'paint brush, to dye, multicoloured, painting, red, green, orange, yellow, blue, to paint, art, isolated, painting stuff, happy, hobby, draw, bristles, creative, hair brush, paint brush'),\n hit(10232979, 1280, 717, 'woman-painting-canvas-art-artist-10232979', 'woman, painting, canvas, art, artist, studio, bright, colorful, home, creative, hobby, paint, paintbrush, artwork, easel, indoor, female, acrylic, modern, workspace'),\n hit(7620937, 1280, 853, 'to-tt-oo-7620937', 'to, tt, oo'),\n hit(1482678, 1280, 896, 'palette-paints-oil-painting-1482678', 'palette, paints, oil, painting, painter, art, brush, colors, inspiration, creator, artist, creation, colorful, canvas, to mix, palette, palette, palette, palette, palette'),\n hit(2731106, 1280, 720, 'artists-painters-model-paint-2731106', 'artists, painters, model, paint, artistic, drawing, brush, paintbrush, creative, creativity, design, equipment, canvas, work, hobby, color, palette, draw, picture, studio'),\n hit(3943201, 1280, 853, 'guitar-man-music-musician-3943201', 'guitar, man, music, musician, guitarist, performance, artist, black and white, guitar, guitar, guitar, guitar, guitar, music, music, musician, musician, musician, artist, artist'),\n hit(7820214, 1280, 853, 'artist-paintings-palette-workshop-7820214', 'artist, paintings, palette, workshop, art studio, interior, paints, brightly, creation, woman, pretty, positive, smile, canvases, artist, workshop, workshop, workshop, workshop, workshop'),\n hit(316440, 1280, 847, 'paintings-stand-artist-isolated-316440', 'paintings, stand, artist, isolated, billboard, white, sketching, tool, blank, new, easel, studio, canvas, genre, drawing, paint, shape, equipment, support, creativity'),\n hit(5821297, 1280, 853, 'to-dye-watercolor-colour-5821297', 'to dye, watercolor, colour, color palette, watercolor painting, colorful, artist, creative, art, painting, school, paint box, watercolor, watercolor, artist, artist, art, painting, painting, school'),\n hit(2578454, 1280, 720, 'artist-painter-easel-canvas-2578454', 'artist, painter, easel, canvas, painting, picture, artistic, paintbrush, brush, creative, paint, studio, white, artwork, oil, workshop, girl, profession, craft, palette'),\n hit(2557484, 1280, 720, 'people-woman-girl-painting-art-2557484', 'people, woman, girl, painting, art, board, paint, brush, material, brown art, brown painting, brown paint, brown board, people, people, painting, painting, painting, painting, painting'),\n hit(4344067, 1280, 905, 'brushes-brush-studio-workspace-4344067', 'brushes, brush, studio, workspace, paint, paintings, wall, art, artist, creativity, arts, canvases, color, canvases, canvases, canvases, canvases, canvases'),\n hit(5006722, 1280, 853, 'watercolor-paint-brush-to-paint-5006722', 'watercolor, paint brush, to paint, multicoloured, to dye, art, yellow, draw, nature, artist, doodle, acrylic, painting technique, creative, brush strokes, red, art lessons, entertainment, pastime, green'),\n hit(10204143, 1280, 698, 'senior-woman-artist-painting-10204143', 'senior, woman, artist, painting, canvas, ass, studio, creativity, art, portrait, brush, ripe, gray hair, hobby, expression, talent, concentration, elderly, lifestyle, within'),\n]\n\n/** `artist portrait` (horizontal, min_width 900, category people), the about picture; key `33160e5c0b51751614bd011baeb90a2290ed123c780e0662ddf3bf9442f444df`, answered 2026-10-18T16:54:38.307Z. */\nexport const ARTIST_PORTRAIT_PEOPLE: StockPhoto[] = [\n hit(343674, 1280, 853, 'man-artist-street-painter-painting-343674', 'man, artist, street, painter, painting, art, jesus, old man, elderly man, street photography, artist, artist, painter, art, jesus, jesus, jesus, jesus, jesus, old man'),\n hit(3008031, 1280, 853, 'artist-pen-painting-man-elderly-3008031', 'artist, pen, painting, man, elderly, glasses, craftsman, traditional, tradition, artistic, culture, painter, drawing, asian, laos, asia, artist, artist, artist, artist'),\n hit(7402145, 1280, 853, 'blackandwhite-happy-guitarist-7402145', 'blackandwhite, happy, guitarist, singing, africanamerican, people, portrait, instrument, forrest, woods, man, singing, singing, singing, singing, singing, people'),\n hit(505353, 1280, 1280, 'man-artist-drawing-painting-505353', 'man, artist, drawing, painting, elderly, senior, old, aged, male, artist, artist, artist, artist, artist, drawing, drawing, drawing, painting, painting'),\n hit(8399526, 1280, 853, 'boy-busker-playing-trumpet-8399526', 'boy, busker, playing, trumpet, wind instrument, outdoors, public place, street, building, urban, support, music, snapshot, attraction, tourism, young, street photography, coat, casual, talent'),\n hit(4494491, 1280, 853, 'male-black-and-white-portrait-face-4494491', 'male, black and white, portrait, face, young, model, human, think, handsome, guy, confident, man, adult, head, human, human, human, human, human, think'),\n hit(4030112, 1280, 845, 'man-face-painting-brushes-art-4030112', 'man, face, painting, brushes, art, artist, portrait, painting, painting, painting, painting, art, art, art, art, artist, artist, artist, artist, artist'),\n hit(1713769, 1280, 853, 'face-painting-child-make-up-face-1713769', 'face painting, child, make up, face, fun, pleasure, butterfly, glitter, motive, face painting, face painting, face painting, face painting, face painting, make up'),\n hit(7930927, 1280, 853, 'diabolo-circus-man-black-and-white-7930927', 'diabolo, circus, man, black and white, city, art, carnival, entertainment, theatre, juggle, man, man, man, man, man, city'),\n hit(7970172, 1280, 853, 'graffiti-artist-graffiti-artist-7970172', 'graffiti, artist, graffiti artist, woman, portrait, curls, coca cola, baseball cap, handmade, red, fashion, style, smile, positive'),\n hit(7990683, 1280, 853, 'woman-design-cartoon-artist-k-pop-7990683', 'woman, design, cartoon, artist, k pop, art, portrait'),\n hit(7970174, 1280, 853, 'graffiti-artist-graffiti-artist-7970174', 'graffiti, artist, graffiti artist, woman, portrait, curls, coca cola, baseball cap, handmade, red, fashion, style, smile, positive'),\n hit(3938987, 1280, 1027, 'portrait-camera-photographer-boy-3938987', 'portrait, camera, photographer, boy, camera man, artist, canon'),\n hit(5596466, 1280, 851, 'woman-artist-beautiful-girl-women-5596466', 'woman, artist, beautiful, girl, women, poses, model, costume, brush, berets, portrait, paints, white background, blots, goods for artists'),\n hit(5426238, 1280, 853, 'girl-vietnamese-artist-portrait-5426238', 'girl, vietnamese, artist, portrait, painter, painter, painter, painter, painter, painter'),\n hit(8251299, 1280, 853, 'artist-man-paint-portrait-easel-8251299', 'artist, man, paint, portrait, easel, art, painter'),\n hit(5596469, 1280, 851, 'model-female-artist-woman-lady-5596469', 'model, female, artist, woman, lady, girl, female model, female artist, paint, brush, paintbrush, creativity, beret, portrait, design, fashion, wardrobe, style, palette, model'),\n hit(3852896, 1280, 853, 'artist-portrait-person-art-man-3852896', 'artist, portrait, person, art, man, human, face, model, performance, male'),\n hit(7329257, 1280, 1280, 'saxophone-man-musician-7329257', 'saxophone, man, musician, musical artist, outdoors, portrait, saxophone, saxophone, saxophone, saxophone, saxophone, musician, musician'),\n hit(2696947, 1280, 1280, 'girl-face-colorful-colors-artistic-2696947', 'girl, face, colorful, colors, artistic, model, person, woman, eyes, art, paint, portrait, body paint, face paint, girl, face, person, art, art, art'),\n hit(4145665, 1280, 854, 'street-woman-artist-charangista-4145665', 'street, woman, artist, charangista, portrait, urban, adult, casual'),\n hit(8106539, 1280, 914, 'portrait-artwork-photography-8106539', 'portrait, artwork, photography, photoshop, ego, edit, child, artist, girl, myself, inside, people'),\n hit(3177506, 1280, 853, 'woman-people-young-woman-portrait-3177506', 'woman, people, young woman, portrait, model, make, hair, dress, curls, makeup artist, hairstyle, blonde, woman, people, people, people, hair, makeup artist, makeup artist, makeup artist'),\n hit(6893948, 1280, 853, 'painter-artist-drawing-outdoor-6893948', 'painter, artist, drawing, outdoor, portrait, man, street, people'),\n hit(2985569, 1280, 853, 'paint-makeup-girl-cosmetics-2985569', 'paint, makeup, girl, cosmetics, face paint, colorful, artistic, portrait, face, head, profile, young woman, colors, creativity, woman, eyes, model, body paint, creative, hand'),\n hit(7970165, 1280, 853, 'graffiti-artist-graffiti-artist-7970165', 'graffiti, artist, graffiti artist, woman, portrait, curls, coca cola, baseball cap, handmade, red, fashion, style, smile, positive'),\n hit(7136446, 1280, 854, 'woman-portrait-light-projector-7136446', 'woman, portrait, light, projector, smoke, shadow, woman, light, projector, projector, smoke, shadow, shadow, shadow, shadow, shadow'),\n hit(4785176, 1280, 857, 'prague-street-artist-czech-to-dye-4785176', 'prague, street artist, czech, to dye, portrait, people, fascinating'),\n hit(7787024, 1280, 853, 'eye-girl-optician-eyesight-7787024', 'eye, girl, optician, eyesight, eyebrows, face, photography, colorful, eyeshadow, makeup, cosmetics, iris, focus, vision, eyelashes, human, creativity, painting, paint, texture'),\n hit(1558900, 1280, 1069, 'charcoal-drawing-charcoal-pencil-1558900', 'charcoal drawing, charcoal pencil, portrait, profile, man, face, head, human, of the page, person, masculine, art, eve, fair, hype, charcoal draftsman, charcoal pencil drawing, charcoal pencil draftsman, drawing, illustrator'),\n hit(3331368, 1280, 853, 'people-adult-window-one-3331368', 'people, adult, window, one, the apartment, artist, portrait'),\n hit(1229314, 1280, 852, 'picture-portrait-street-artist-1229314', 'picture, portrait, street artist, painter, colors, easel, palette, girl, tourists, street artist, painter, painter, easel, easel, easel, easel, easel'),\n hit(10505431, 1280, 720, 'woman-art-tablet-drawing-10505431', 'woman, art tablet, drawing, digital drawing, illustrator, smile, asian woman, demonstration, blue shirt, office desk, talent, creative, engagement, interactive, positivity, motivation, presentation, work, joy'),\n hit(4876461, 1280, 720, 'makeup-makeup-artist-beauty-woman-4876461', 'makeup, makeup artist, beauty, woman, model, portrait, girl, creativity, creative, face, cosmetics, gold, artist, artistic, blush, make-up, orange beauty, orange model, orange portrait, orange makeup'),\n hit(4691465, 1280, 853, 'painting-easel-artist-portrait-4691465', 'painting, easel, artist, portrait, young woman, creation, hobby, canvas, brush, art, paint, image, oil, easel, easel, easel, easel, easel, hobby'),\n hit(2852231, 1280, 779, 'wall-art-spray-graffiti-woman-2852231', 'wall art, spray, graffiti, woman, colour, multicoloured, ladder, art, spray paint, painting, colorful, coloured, wall art, graffiti, graffiti, graffiti, graffiti, graffiti'),\n hit(10204143, 1280, 698, 'senior-woman-artist-painting-10204143', 'senior, woman, artist, painting, canvas, ass, studio, creativity, art, portrait, brush, ripe, gray hair, hobby, expression, talent, concentration, elderly, lifestyle, within'),\n hit(1708777, 1280, 903, 'artist-drawing-young-woman-paints-1708777', 'artist, drawing, young woman, paints, palette, autumn, joy, tassel, easel, painting, artist, artist, artist, artist, artist, drawing, easel, painting'),\n hit(3331371, 1280, 853, 'people-adult-window-one-3331371', 'people, adult, window, one, the apartment, artist, portrait'),\n hit(6217377, 1280, 853, 'woman-face-light-painting-light-6217377', 'woman, face, light painting, light, girl, beauty, wallpaper 4k, beautiful, portrait, abstract, colorful, wallpaper hd, free wallpaper, fantasy, 4k wallpaper 1920x1080, windows wallpaper, free background, beautiful wallpaper, 4k wallpaper, magical'),\n]\n"],"names":["hit","id","width","height","slug","tags","provider","String","pageUrl","photographer","split","downloadUrl","ARTIST_HERO","PROJECT_WIDE","PROJECT_TALL","PROJECT_FOUR","FOUR","ARTIST_STUDIO_WIDE","ARTIST_PORTRAIT_PEOPLE"],"mappings":"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"}
@@ -17,14 +17,24 @@
17
17
  import type { AnimationEase, AnimationPreset } from '@aglyn/aglyn/app-utils/element-animation';
18
18
  import { type ElementMotionCharacter } from '@aglyn/aglyn/app-utils/element-motion';
19
19
  /**
20
- * How an AI-built site moves (AGL-3838): a small motion CHARACTER per kind of
20
+ * How an AI-built site moves (AGL-3838, AGL-3941): a motion CHARACTER per
21
21
  * site, turned by the site's design seed, which the platform's entrance pass
22
22
  * (`element-motion.ts`) writes onto every page the AI builds.
23
23
  *
24
- * Decided in code, never by the model: no prompt names a preset, no answer
25
- * carries one, and no credit is spent on it. The same site — same kind, same
26
- * seed — always moves the same way on every page, and two sites of one kind
27
- * are drawn apart by their seeds, the way their looks are.
24
+ * The character comes from one of two places:
25
+ * - the site's MOTION STYLE, when its look chose one (`siteStyle.motion`,
26
+ * asked with the rest of the look in `submit_site_look`): a small closed
27
+ * vocabulary of named characters, {@link AI_SITE_MOTION_STYLES}, each of
28
+ * which says how a hero, a split, a grid of cards and every other section
29
+ * arrive;
30
+ * - else the site's KIND, mapped to a mood: what every site built before
31
+ * the look chose motion, a replay of one, and any job without a look
32
+ * moves in.
33
+ *
34
+ * Either way the seed picks within the character's ranges — the first
35
+ * preset, the picture preset, the curve, the timing — so two sites that chose
36
+ * the same style still move apart, and one site moves the same way on every
37
+ * page. No page prompt names a preset and no page answer carries one.
28
38
  *
29
39
  * The moods, by the kinds `ai-site-kinds.ts` lists:
30
40
  * - CALM — practices, health, reading: fades and rises taken in turn, on a
@@ -38,7 +48,7 @@ import { type ElementMotionCharacter } from '@aglyn/aglyn/app-utils/element-moti
38
48
  * In every mood a page's later sections take the mood's presets in turn,
39
49
  * starting where the seed says, and a column of words beside a picture comes
40
50
  * in from its own side (Zach 2026-10-16: "some slide in ones would be cool
41
- * too"). A page is never one move repeated.
51
+ * too").
42
52
  *
43
53
  * Every number stays inside the vocabulary's caps, and inside 400–800 ms for
44
54
  * a duration and 60–120 ms between staggered items: slower reads as a site
@@ -55,17 +65,59 @@ interface AiSiteMotionRange {
55
65
  duration: readonly [number, number];
56
66
  stagger: readonly [number, number];
57
67
  hero: readonly [number, number];
68
+ /** Whether a split's picture and words come in from their own sides; absent, they do. */
69
+ sides?: boolean;
70
+ /** The first section's presets the seed picks among; absent, it opens on the first section preset. */
71
+ heroPresets?: readonly AnimationPreset[];
72
+ /** The presets a group of like items — a grid of cards, a list — the seed picks among; absent, the section's own. */
73
+ groupPresets?: readonly AnimationPreset[];
58
74
  }
59
75
  /** Each mood's range. The seed picks one character from it. */
60
76
  export declare const AI_SITE_MOTION_MOODS: Readonly<Record<AiSiteMotionMood, AiSiteMotionRange>>;
61
77
  /** Each site kind's mood; a kind not listed is standard. */
62
78
  export declare const AI_SITE_MOTION_KINDS: Readonly<Record<string, AiSiteMotionMood>>;
79
+ /**
80
+ * The motion styles a site's look chooses among (AGL-3941). Persisted on the
81
+ * site's style; never rename one.
82
+ */
83
+ export declare const AI_SITE_MOTION_STYLES: readonly ["sides", "rise", "scale", "cascade", "still"];
84
+ export type AiSiteMotionStyle = (typeof AI_SITE_MOTION_STYLES)[number];
85
+ /**
86
+ * Each motion style, by what it does to each kind of section:
87
+ * - SIDES — a split's picture slides in from its own side and its words
88
+ * from the other; the rest rises and fades in turn. Pictures never zoom,
89
+ * so a split's picture always takes its side.
90
+ * - RISE — everything fades up into place; a split's columns rise one
91
+ * after the other.
92
+ * - SCALE — pictures scale into place, from smaller or from larger; the
93
+ * hero's words fade, and later sections fade and rise in turn.
94
+ * - CASCADE — cards and lists ripple in one after another at the widest
95
+ * stagger, quick, often with overshoot.
96
+ * - STILL — near-static: a short, soft fade, and nothing slides or scales.
97
+ *
98
+ * The hero's main heading never moves under any of them (`element-motion.ts`),
99
+ * and every one is written as the same `aglynAnimation*` props, so a visitor
100
+ * who asks for reduced motion sees none of it.
101
+ */
102
+ export declare const AI_SITE_MOTION_STYLE_RANGES: Readonly<Record<AiSiteMotionStyle, AiSiteMotionRange & {
103
+ words: string;
104
+ }>>;
105
+ /** The motion styles each mood suits, which the look is offered and the seed draws among. */
106
+ export declare const AI_SITE_MOTION_SUITS: Readonly<Record<AiSiteMotionMood, readonly AiSiteMotionStyle[]>>;
107
+ /** A motion style, read defensively: `null` for anything outside the vocabulary. */
108
+ export declare function aiSiteMotionStyle(value: unknown): AiSiteMotionStyle | null;
109
+ /** The motion styles that suit a kind of site. */
110
+ export declare function aiSiteMotionStylesFor(kind: string | null | undefined): readonly AiSiteMotionStyle[];
63
111
  /** The mood a kind of site moves in. */
64
112
  export declare function aiSiteMotionMood(kind: string | null | undefined): AiSiteMotionMood;
65
- /** The motion character of a site: its kind's mood, turned by its seed. */
113
+ /**
114
+ * The motion character of a site: its motion style where its look chose one,
115
+ * else its kind's mood, turned by its seed.
116
+ */
66
117
  export declare function aiSiteMotion(input: {
67
118
  kind?: string | null;
68
119
  seed: number;
120
+ motion?: string | null;
69
121
  }): ElementMotionCharacter;
70
122
  /**
71
123
  * A page the AI built, with its site's entrance motion written onto it —
@@ -74,6 +126,7 @@ export declare function aiSiteMotion(input: {
74
126
  export declare function aiWithSiteMotion<T extends Record<string, any>>(nodes: T, site: {
75
127
  kind?: string | null;
76
128
  seed: number;
129
+ motion?: string | null;
77
130
  }, page?: {
78
131
  rootId?: string;
79
132
  sectionIds?: readonly string[];
@@ -127,6 +127,223 @@ import { applyElementMotion } from "@aglyn/aglyn/app-utils/element-motion";
127
127
  portfolio: 'gallery',
128
128
  photography: 'gallery'
129
129
  };
130
+ /**
131
+ * The motion styles a site's look chooses among (AGL-3941). Persisted on the
132
+ * site's style; never rename one.
133
+ */ export const AI_SITE_MOTION_STYLES = [
134
+ 'sides',
135
+ 'rise',
136
+ 'scale',
137
+ 'cascade',
138
+ 'still'
139
+ ];
140
+ /**
141
+ * Each motion style, by what it does to each kind of section:
142
+ * - SIDES — a split's picture slides in from its own side and its words
143
+ * from the other; the rest rises and fades in turn. Pictures never zoom,
144
+ * so a split's picture always takes its side.
145
+ * - RISE — everything fades up into place; a split's columns rise one
146
+ * after the other.
147
+ * - SCALE — pictures scale into place, from smaller or from larger; the
148
+ * hero's words fade, and later sections fade and rise in turn.
149
+ * - CASCADE — cards and lists ripple in one after another at the widest
150
+ * stagger, quick, often with overshoot.
151
+ * - STILL — near-static: a short, soft fade, and nothing slides or scales.
152
+ *
153
+ * The hero's main heading never moves under any of them (`element-motion.ts`),
154
+ * and every one is written as the same `aglynAnimation*` props, so a visitor
155
+ * who asks for reduced motion sees none of it.
156
+ */ export const AI_SITE_MOTION_STYLE_RANGES = {
157
+ sides: {
158
+ words: "a split section's picture slides in from its own side and its words from the other; the rest rises",
159
+ presets: [
160
+ 'slide-up',
161
+ 'fade'
162
+ ],
163
+ heroPresets: [
164
+ 'slide-up',
165
+ 'fade'
166
+ ],
167
+ media: [
168
+ 'fade',
169
+ 'slide-up'
170
+ ],
171
+ eases: [
172
+ 'smooth',
173
+ 'gentle-end'
174
+ ],
175
+ duration: [
176
+ 550,
177
+ 750
178
+ ],
179
+ stagger: [
180
+ 80,
181
+ 110
182
+ ],
183
+ hero: [
184
+ 100,
185
+ 130
186
+ ],
187
+ sides: true
188
+ },
189
+ rise: {
190
+ words: 'everything fades up into place, section after section',
191
+ presets: [
192
+ 'slide-up'
193
+ ],
194
+ heroPresets: [
195
+ 'slide-up'
196
+ ],
197
+ media: [
198
+ 'slide-up',
199
+ 'fade'
200
+ ],
201
+ eases: [
202
+ 'smooth',
203
+ 'gentle-end',
204
+ 'gentle-both'
205
+ ],
206
+ duration: [
207
+ 500,
208
+ 700
209
+ ],
210
+ stagger: [
211
+ 70,
212
+ 100
213
+ ],
214
+ hero: [
215
+ 100,
216
+ 130
217
+ ],
218
+ sides: false
219
+ },
220
+ scale: {
221
+ words: 'pictures scale into place while the words fade in',
222
+ presets: [
223
+ 'fade',
224
+ 'slide-up'
225
+ ],
226
+ heroPresets: [
227
+ 'fade'
228
+ ],
229
+ media: [
230
+ 'zoom-in',
231
+ 'zoom-out'
232
+ ],
233
+ eases: [
234
+ 'smooth',
235
+ 'gentle-end'
236
+ ],
237
+ duration: [
238
+ 550,
239
+ 750
240
+ ],
241
+ stagger: [
242
+ 80,
243
+ 110
244
+ ],
245
+ hero: [
246
+ 100,
247
+ 130
248
+ ],
249
+ sides: false
250
+ },
251
+ cascade: {
252
+ words: 'cards and lists ripple in one after another, quick and lively',
253
+ presets: [
254
+ 'slide-up',
255
+ 'fade'
256
+ ],
257
+ heroPresets: [
258
+ 'slide-up'
259
+ ],
260
+ groupPresets: [
261
+ 'slide-up',
262
+ 'zoom-in'
263
+ ],
264
+ media: [
265
+ 'slide-up',
266
+ 'zoom-in'
267
+ ],
268
+ eases: [
269
+ 'overshoot',
270
+ 'smooth'
271
+ ],
272
+ duration: [
273
+ 450,
274
+ 600
275
+ ],
276
+ stagger: [
277
+ 105,
278
+ 120
279
+ ],
280
+ hero: [
281
+ 110,
282
+ 140
283
+ ],
284
+ sides: false
285
+ },
286
+ still: {
287
+ words: 'near-still: a short, soft fade, and nothing slides or scales',
288
+ presets: [
289
+ 'fade'
290
+ ],
291
+ heroPresets: [
292
+ 'fade'
293
+ ],
294
+ media: [
295
+ 'fade'
296
+ ],
297
+ eases: [
298
+ 'gentle-end',
299
+ 'gentle-both'
300
+ ],
301
+ duration: [
302
+ 400,
303
+ 500
304
+ ],
305
+ stagger: [
306
+ 60,
307
+ 75
308
+ ],
309
+ hero: [
310
+ 80,
311
+ 100
312
+ ],
313
+ sides: false
314
+ }
315
+ };
316
+ /** The motion styles each mood suits, which the look is offered and the seed draws among. */ export const AI_SITE_MOTION_SUITS = {
317
+ calm: [
318
+ 'still',
319
+ 'rise',
320
+ 'sides'
321
+ ],
322
+ bold: [
323
+ 'sides',
324
+ 'scale',
325
+ 'cascade',
326
+ 'rise'
327
+ ],
328
+ gallery: [
329
+ 'scale',
330
+ 'sides',
331
+ 'still',
332
+ 'cascade'
333
+ ],
334
+ standard: [
335
+ 'sides',
336
+ 'rise',
337
+ 'scale',
338
+ 'cascade'
339
+ ]
340
+ };
341
+ /** A motion style, read defensively: `null` for anything outside the vocabulary. */ export function aiSiteMotionStyle(value) {
342
+ return typeof value === 'string' && AI_SITE_MOTION_STYLES.includes(value) ? value : null;
343
+ }
344
+ /** The motion styles that suit a kind of site. */ export function aiSiteMotionStylesFor(kind) {
345
+ return AI_SITE_MOTION_SUITS[aiSiteMotionMood(kind)];
346
+ }
130
347
  /** The mood a kind of site moves in. */ export function aiSiteMotionMood(kind) {
131
348
  return kind && AI_SITE_MOTION_KINDS[kind] || 'standard';
132
349
  }
@@ -145,21 +362,31 @@ import { applyElementMotion } from "@aglyn/aglyn/app-utils/element-motion";
145
362
  }
146
363
  const pick = (next, list)=>list[Math.floor(next() * list.length) % list.length];
147
364
  /** A value in an inclusive range, on a step: 10 ms for a duration, 5 ms for a gap. */ const within = (next, [low, high], step)=>low + Math.floor(next() * (Math.floor((high - low) / step) + 1)) * step;
148
- /** The motion character of a site: its kind's mood, turned by its seed. */ export function aiSiteMotion(input) {
149
- const range = AI_SITE_MOTION_MOODS[aiSiteMotionMood(input.kind)];
365
+ /**
366
+ * The motion character of a site: its motion style where its look chose one,
367
+ * else its kind's mood, turned by its seed.
368
+ */ export function aiSiteMotion(input) {
369
+ var _range_sides;
370
+ var _range_heroPresets, _range_groupPresets;
371
+ const style = aiSiteMotionStyle(input.motion);
372
+ const range = style ? AI_SITE_MOTION_STYLE_RANGES[style] : AI_SITE_MOTION_MOODS[aiSiteMotionMood(input.kind)];
150
373
  const next = random(input.seed >>> 0);
151
374
  const first = Math.floor(next() * range.presets.length) % range.presets.length;
152
375
  const sectionPresets = range.presets.map((_, index)=>range.presets[(first + index) % range.presets.length]);
153
- return {
376
+ const character = {
154
377
  preset: sectionPresets[0],
155
378
  sectionPresets,
156
- sides: true,
379
+ sides: (_range_sides = range.sides) != null ? _range_sides : true,
157
380
  mediaPreset: pick(next, range.media),
158
381
  ease: pick(next, range.eases),
159
382
  durationMs: within(next, range.duration, 10),
160
383
  staggerStepMs: within(next, range.stagger, 5),
161
384
  heroStepMs: within(next, range.hero, 5)
162
385
  };
386
+ // Drawn after the rest, so a mood, which names neither, draws the same numbers either way.
387
+ if ((_range_heroPresets = range.heroPresets) == null ? void 0 : _range_heroPresets.length) character.preset = pick(next, range.heroPresets);
388
+ if ((_range_groupPresets = range.groupPresets) == null ? void 0 : _range_groupPresets.length) character.groupPreset = pick(next, range.groupPresets);
389
+ return character;
163
390
  }
164
391
  /**
165
392
  * A page the AI built, with its site's entrance motion written onto it —
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/layout-language/ai-layout-motion.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AnimationEase, AnimationPreset } from '@aglyn/aglyn/app-utils/element-animation'\nimport {\n applyElementMotion,\n type ElementMotionCharacter,\n} from '@aglyn/aglyn/app-utils/element-motion'\n\n/**\n * How an AI-built site moves (AGL-3838): a small motion CHARACTER per kind of\n * site, turned by the site's design seed, which the platform's entrance pass\n * (`element-motion.ts`) writes onto every page the AI builds.\n *\n * Decided in code, never by the model: no prompt names a preset, no answer\n * carries one, and no credit is spent on it. The same site — same kind, same\n * seed — always moves the same way on every page, and two sites of one kind\n * are drawn apart by their seeds, the way their looks are.\n *\n * The moods, by the kinds `ai-site-kinds.ts` lists:\n * - CALM — practices, health, reading: fades and rises taken in turn, on a\n * gentle curve, slower.\n * - BOLD — studios, fitness, music, events: a rise with overshoot, and\n * pictures that zoom in.\n * - GALLERY — portfolios and photography: pictures zoom in, one after\n * another; the words fade or rise.\n * - STANDARD — everything else: rises and fades taken in turn.\n *\n * In every mood a page's later sections take the mood's presets in turn,\n * starting where the seed says, and a column of words beside a picture comes\n * in from its own side (Zach 2026-10-16: \"some slide in ones would be cool\n * too\"). A page is never one move repeated.\n *\n * Every number stays inside the vocabulary's caps, and inside 400–800 ms for\n * a duration and 60–120 ms between staggered items: slower reads as a site\n * that is loading, faster as one that is twitching.\n */\n\nexport type AiSiteMotionMood = 'calm' | 'bold' | 'gallery' | 'standard'\n\ninterface AiSiteMotionRange {\n /** The word presets: the seed picks the first, and later sections take them in turn from there. */\n presets: readonly AnimationPreset[]\n /** The picture presets the seed picks among. */\n media: readonly AnimationPreset[]\n eases: readonly AnimationEase[]\n /** Inclusive millisecond ranges. */\n duration: readonly [number, number]\n stagger: readonly [number, number]\n hero: readonly [number, number]\n}\n\n/** Each mood's range. The seed picks one character from it. */\nexport const AI_SITE_MOTION_MOODS: Readonly<Record<AiSiteMotionMood, AiSiteMotionRange>> = {\n calm: {\n presets: ['fade', 'slide-up'],\n media: ['fade'],\n eases: ['gentle-end', 'gentle-both'],\n duration: [650, 800],\n stagger: [100, 120],\n hero: [130, 160],\n },\n bold: {\n presets: ['slide-up'],\n media: ['zoom-in'],\n eases: ['overshoot'],\n duration: [450, 600],\n stagger: [60, 80],\n hero: [80, 100],\n },\n gallery: {\n presets: ['fade', 'slide-up'],\n media: ['zoom-in'],\n eases: ['smooth'],\n duration: [600, 750],\n stagger: [80, 110],\n hero: [110, 130],\n },\n standard: {\n presets: ['slide-up', 'fade'],\n media: ['slide-up', 'fade'],\n eases: ['smooth'],\n duration: [500, 700],\n stagger: [70, 100],\n hero: [100, 130],\n },\n}\n\n/** Each site kind's mood; a kind not listed is standard. */\nexport const AI_SITE_MOTION_KINDS: Readonly<Record<string, AiSiteMotionMood>> = {\n professional: 'calm',\n wellness: 'calm',\n yoga: 'calm',\n beauty: 'calm',\n blog: 'calm',\n studio: 'bold',\n fitness: 'bold',\n music: 'bold',\n events: 'bold',\n portfolio: 'gallery',\n photography: 'gallery',\n}\n\n/** The mood a kind of site moves in. */\nexport function aiSiteMotionMood(kind: string | null | undefined): AiSiteMotionMood {\n return (kind && AI_SITE_MOTION_KINDS[kind]) || 'standard'\n}\n\n/**\n * A small deterministic generator over a seed (mulberry32), mixed with its\n * own constant so a site's motion does not move in step with its layout.\n */\nfunction random(seed: number): () => number {\n let state = (seed ^ 0x6a09e667) >>> 0\n return () => {\n state = (state + 0x6d2b79f5) >>> 0\n let t = state\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n}\n\nconst pick = <T>(next: () => number, list: readonly T[]): T => list[Math.floor(next() * list.length) % list.length] as T\n/** A value in an inclusive range, on a step: 10 ms for a duration, 5 ms for a gap. */\nconst within = (next: () => number, [low, high]: readonly [number, number], step: number): number =>\n low + Math.floor(next() * (Math.floor((high - low) / step) + 1)) * step\n\n/** The motion character of a site: its kind's mood, turned by its seed. */\nexport function aiSiteMotion(input: { kind?: string | null; seed: number }): ElementMotionCharacter {\n const range = AI_SITE_MOTION_MOODS[aiSiteMotionMood(input.kind)]\n const next = random(input.seed >>> 0)\n const first = Math.floor(next() * range.presets.length) % range.presets.length\n const sectionPresets = range.presets.map((_, index) => range.presets[(first + index) % range.presets.length])\n return {\n preset: sectionPresets[0],\n sectionPresets,\n sides: true,\n mediaPreset: pick(next, range.media),\n ease: pick(next, range.eases),\n durationMs: within(next, range.duration, 10),\n staggerStepMs: within(next, range.stagger, 5),\n heroStepMs: within(next, range.hero, 5),\n }\n}\n\n/**\n * A page the AI built, with its site's entrance motion written onto it —\n * or the same node map, when there was nothing left to move.\n */\nexport function aiWithSiteMotion<T extends Record<string, any>>(\n nodes: T,\n site: { kind?: string | null; seed: number },\n page: { rootId?: string; sectionIds?: readonly string[] } = {},\n): T {\n return applyElementMotion(nodes, {\n character: aiSiteMotion(site),\n ...(page.rootId ? { rootId: page.rootId } : {}),\n ...(page.sectionIds?.length ? { sectionIds: page.sectionIds } : {}),\n })\n}\n"],"names":["applyElementMotion","AI_SITE_MOTION_MOODS","calm","presets","media","eases","duration","stagger","hero","bold","gallery","standard","AI_SITE_MOTION_KINDS","professional","wellness","yoga","beauty","blog","studio","fitness","music","events","portfolio","photography","aiSiteMotionMood","kind","random","seed","state","t","Math","imul","pick","next","list","floor","length","within","low","high","step","aiSiteMotion","input","range","first","sectionPresets","map","_","index","preset","sides","mediaPreset","ease","durationMs","staggerStepMs","heroStepMs","aiWithSiteMotion","nodes","site","page","character","rootId","sectionIds"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC;AAGD,SACEA,kBAAkB,QAEb,wCAAuC;AA6C9C,6DAA6D,GAC7D,OAAO,MAAMC,uBAA8E;IACzFC,MAAM;QACJC,SAAS;YAAC;YAAQ;SAAW;QAC7BC,OAAO;YAAC;SAAO;QACfC,OAAO;YAAC;YAAc;SAAc;QACpCC,UAAU;YAAC;YAAK;SAAI;QACpBC,SAAS;YAAC;YAAK;SAAI;QACnBC,MAAM;YAAC;YAAK;SAAI;IAClB;IACAC,MAAM;QACJN,SAAS;YAAC;SAAW;QACrBC,OAAO;YAAC;SAAU;QAClBC,OAAO;YAAC;SAAY;QACpBC,UAAU;YAAC;YAAK;SAAI;QACpBC,SAAS;YAAC;YAAI;SAAG;QACjBC,MAAM;YAAC;YAAI;SAAI;IACjB;IACAE,SAAS;QACPP,SAAS;YAAC;YAAQ;SAAW;QAC7BC,OAAO;YAAC;SAAU;QAClBC,OAAO;YAAC;SAAS;QACjBC,UAAU;YAAC;YAAK;SAAI;QACpBC,SAAS;YAAC;YAAI;SAAI;QAClBC,MAAM;YAAC;YAAK;SAAI;IAClB;IACAG,UAAU;QACRR,SAAS;YAAC;YAAY;SAAO;QAC7BC,OAAO;YAAC;YAAY;SAAO;QAC3BC,OAAO;YAAC;SAAS;QACjBC,UAAU;YAAC;YAAK;SAAI;QACpBC,SAAS;YAAC;YAAI;SAAI;QAClBC,MAAM;YAAC;YAAK;SAAI;IAClB;AACF,EAAC;AAED,0DAA0D,GAC1D,OAAO,MAAMI,uBAAmE;IAC9EC,cAAc;IACdC,UAAU;IACVC,MAAM;IACNC,QAAQ;IACRC,MAAM;IACNC,QAAQ;IACRC,SAAS;IACTC,OAAO;IACPC,QAAQ;IACRC,WAAW;IACXC,aAAa;AACf,EAAC;AAED,sCAAsC,GACtC,OAAO,SAASC,iBAAiBC,IAA+B;IAC9D,OAAO,AAACA,QAAQb,oBAAoB,CAACa,KAAK,IAAK;AACjD;AAEA;;;CAGC,GACD,SAASC,OAAOC,IAAY;IAC1B,IAAIC,QAAQ,AAACD,CAAAA,OAAO,UAAS,MAAO;IACpC,OAAO;QACLC,QAAQ,AAACA,QAAQ,eAAgB;QACjC,IAAIC,IAAID;QACRC,IAAIC,KAAKC,IAAI,CAACF,IAAKA,MAAM,IAAKA,IAAI;QAClCA,KAAKA,IAAIC,KAAKC,IAAI,CAACF,IAAKA,MAAM,GAAIA,IAAI;QACtC,OAAO,AAAC,CAAA,AAACA,CAAAA,IAAKA,MAAM,EAAE,MAAO,CAAA,IAAK;IACpC;AACF;AAEA,MAAMG,OAAO,CAAIC,MAAoBC,OAA0BA,IAAI,CAACJ,KAAKK,KAAK,CAACF,SAASC,KAAKE,MAAM,IAAIF,KAAKE,MAAM,CAAC;AACnH,oFAAoF,GACpF,MAAMC,SAAS,CAACJ,MAAoB,CAACK,KAAKC,KAAgC,EAAEC,OAC1EF,MAAMR,KAAKK,KAAK,CAACF,SAAUH,CAAAA,KAAKK,KAAK,CAAC,AAACI,CAAAA,OAAOD,GAAE,IAAKE,QAAQ,CAAA,KAAMA;AAErE,yEAAyE,GACzE,OAAO,SAASC,aAAaC,KAA6C;IACxE,MAAMC,QAAQ1C,oBAAoB,CAACuB,iBAAiBkB,MAAMjB,IAAI,EAAE;IAChE,MAAMQ,OAAOP,OAAOgB,MAAMf,IAAI,KAAK;IACnC,MAAMiB,QAAQd,KAAKK,KAAK,CAACF,SAASU,MAAMxC,OAAO,CAACiC,MAAM,IAAIO,MAAMxC,OAAO,CAACiC,MAAM;IAC9E,MAAMS,iBAAiBF,MAAMxC,OAAO,CAAC2C,GAAG,CAAC,CAACC,GAAGC,QAAUL,MAAMxC,OAAO,CAAC,AAACyC,CAAAA,QAAQI,KAAI,IAAKL,MAAMxC,OAAO,CAACiC,MAAM,CAAC;IAC5G,OAAO;QACLa,QAAQJ,cAAc,CAAC,EAAE;QACzBA;QACAK,OAAO;QACPC,aAAanB,KAAKC,MAAMU,MAAMvC,KAAK;QACnCgD,MAAMpB,KAAKC,MAAMU,MAAMtC,KAAK;QAC5BgD,YAAYhB,OAAOJ,MAAMU,MAAMrC,QAAQ,EAAE;QACzCgD,eAAejB,OAAOJ,MAAMU,MAAMpC,OAAO,EAAE;QAC3CgD,YAAYlB,OAAOJ,MAAMU,MAAMnC,IAAI,EAAE;IACvC;AACF;AAEA;;;CAGC,GACD,OAAO,SAASgD,iBACdC,KAAQ,EACRC,IAA4C,EAC5CC,OAA4D,CAAC,CAAC;QAKxDA;IAHN,OAAO3D,mBAAmByD,OAAO;QAC/BG,WAAWnB,aAAaiB;OACpBC,KAAKE,MAAM,GAAG;QAAEA,QAAQF,KAAKE,MAAM;IAAC,IAAI,CAAC,GACzCF,EAAAA,mBAAAA,KAAKG,UAAU,qBAAfH,iBAAiBvB,MAAM,IAAG;QAAE0B,YAAYH,KAAKG,UAAU;IAAC,IAAI,CAAC;AAErE"}
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/ai/src/lib/layout-language/ai-layout-motion.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { AnimationEase, AnimationPreset } from '@aglyn/aglyn/app-utils/element-animation'\nimport {\n applyElementMotion,\n type ElementMotionCharacter,\n} from '@aglyn/aglyn/app-utils/element-motion'\n\n/**\n * How an AI-built site moves (AGL-3838, AGL-3941): a motion CHARACTER per\n * site, turned by the site's design seed, which the platform's entrance pass\n * (`element-motion.ts`) writes onto every page the AI builds.\n *\n * The character comes from one of two places:\n * - the site's MOTION STYLE, when its look chose one (`siteStyle.motion`,\n * asked with the rest of the look in `submit_site_look`): a small closed\n * vocabulary of named characters, {@link AI_SITE_MOTION_STYLES}, each of\n * which says how a hero, a split, a grid of cards and every other section\n * arrive;\n * - else the site's KIND, mapped to a mood: what every site built before\n * the look chose motion, a replay of one, and any job without a look\n * moves in.\n *\n * Either way the seed picks within the character's ranges — the first\n * preset, the picture preset, the curve, the timing — so two sites that chose\n * the same style still move apart, and one site moves the same way on every\n * page. No page prompt names a preset and no page answer carries one.\n *\n * The moods, by the kinds `ai-site-kinds.ts` lists:\n * - CALM — practices, health, reading: fades and rises taken in turn, on a\n * gentle curve, slower.\n * - BOLD — studios, fitness, music, events: a rise with overshoot, and\n * pictures that zoom in.\n * - GALLERY — portfolios and photography: pictures zoom in, one after\n * another; the words fade or rise.\n * - STANDARD — everything else: rises and fades taken in turn.\n *\n * In every mood a page's later sections take the mood's presets in turn,\n * starting where the seed says, and a column of words beside a picture comes\n * in from its own side (Zach 2026-10-16: \"some slide in ones would be cool\n * too\").\n *\n * Every number stays inside the vocabulary's caps, and inside 400–800 ms for\n * a duration and 60–120 ms between staggered items: slower reads as a site\n * that is loading, faster as one that is twitching.\n */\n\nexport type AiSiteMotionMood = 'calm' | 'bold' | 'gallery' | 'standard'\n\ninterface AiSiteMotionRange {\n /** The word presets: the seed picks the first, and later sections take them in turn from there. */\n presets: readonly AnimationPreset[]\n /** The picture presets the seed picks among. */\n media: readonly AnimationPreset[]\n eases: readonly AnimationEase[]\n /** Inclusive millisecond ranges. */\n duration: readonly [number, number]\n stagger: readonly [number, number]\n hero: readonly [number, number]\n /** Whether a split's picture and words come in from their own sides; absent, they do. */\n sides?: boolean\n /** The first section's presets the seed picks among; absent, it opens on the first section preset. */\n heroPresets?: readonly AnimationPreset[]\n /** The presets a group of like items — a grid of cards, a list — the seed picks among; absent, the section's own. */\n groupPresets?: readonly AnimationPreset[]\n}\n\n/** Each mood's range. The seed picks one character from it. */\nexport const AI_SITE_MOTION_MOODS: Readonly<Record<AiSiteMotionMood, AiSiteMotionRange>> = {\n calm: {\n presets: ['fade', 'slide-up'],\n media: ['fade'],\n eases: ['gentle-end', 'gentle-both'],\n duration: [650, 800],\n stagger: [100, 120],\n hero: [130, 160],\n },\n bold: {\n presets: ['slide-up'],\n media: ['zoom-in'],\n eases: ['overshoot'],\n duration: [450, 600],\n stagger: [60, 80],\n hero: [80, 100],\n },\n gallery: {\n presets: ['fade', 'slide-up'],\n media: ['zoom-in'],\n eases: ['smooth'],\n duration: [600, 750],\n stagger: [80, 110],\n hero: [110, 130],\n },\n standard: {\n presets: ['slide-up', 'fade'],\n media: ['slide-up', 'fade'],\n eases: ['smooth'],\n duration: [500, 700],\n stagger: [70, 100],\n hero: [100, 130],\n },\n}\n\n/** Each site kind's mood; a kind not listed is standard. */\nexport const AI_SITE_MOTION_KINDS: Readonly<Record<string, AiSiteMotionMood>> = {\n professional: 'calm',\n wellness: 'calm',\n yoga: 'calm',\n beauty: 'calm',\n blog: 'calm',\n studio: 'bold',\n fitness: 'bold',\n music: 'bold',\n events: 'bold',\n portfolio: 'gallery',\n photography: 'gallery',\n}\n\n/**\n * The motion styles a site's look chooses among (AGL-3941). Persisted on the\n * site's style; never rename one.\n */\nexport const AI_SITE_MOTION_STYLES = ['sides', 'rise', 'scale', 'cascade', 'still'] as const\n\nexport type AiSiteMotionStyle = (typeof AI_SITE_MOTION_STYLES)[number]\n\n/**\n * Each motion style, by what it does to each kind of section:\n * - SIDES — a split's picture slides in from its own side and its words\n * from the other; the rest rises and fades in turn. Pictures never zoom,\n * so a split's picture always takes its side.\n * - RISE — everything fades up into place; a split's columns rise one\n * after the other.\n * - SCALE — pictures scale into place, from smaller or from larger; the\n * hero's words fade, and later sections fade and rise in turn.\n * - CASCADE — cards and lists ripple in one after another at the widest\n * stagger, quick, often with overshoot.\n * - STILL — near-static: a short, soft fade, and nothing slides or scales.\n *\n * The hero's main heading never moves under any of them (`element-motion.ts`),\n * and every one is written as the same `aglynAnimation*` props, so a visitor\n * who asks for reduced motion sees none of it.\n */\nexport const AI_SITE_MOTION_STYLE_RANGES: Readonly<Record<AiSiteMotionStyle, AiSiteMotionRange & { words: string }>> = {\n sides: {\n words: \"a split section's picture slides in from its own side and its words from the other; the rest rises\",\n presets: ['slide-up', 'fade'],\n heroPresets: ['slide-up', 'fade'],\n media: ['fade', 'slide-up'],\n eases: ['smooth', 'gentle-end'],\n duration: [550, 750],\n stagger: [80, 110],\n hero: [100, 130],\n sides: true,\n },\n rise: {\n words: 'everything fades up into place, section after section',\n presets: ['slide-up'],\n heroPresets: ['slide-up'],\n media: ['slide-up', 'fade'],\n eases: ['smooth', 'gentle-end', 'gentle-both'],\n duration: [500, 700],\n stagger: [70, 100],\n hero: [100, 130],\n sides: false,\n },\n scale: {\n words: 'pictures scale into place while the words fade in',\n presets: ['fade', 'slide-up'],\n heroPresets: ['fade'],\n media: ['zoom-in', 'zoom-out'],\n eases: ['smooth', 'gentle-end'],\n duration: [550, 750],\n stagger: [80, 110],\n hero: [100, 130],\n sides: false,\n },\n cascade: {\n words: 'cards and lists ripple in one after another, quick and lively',\n presets: ['slide-up', 'fade'],\n heroPresets: ['slide-up'],\n groupPresets: ['slide-up', 'zoom-in'],\n media: ['slide-up', 'zoom-in'],\n eases: ['overshoot', 'smooth'],\n duration: [450, 600],\n stagger: [105, 120],\n hero: [110, 140],\n sides: false,\n },\n still: {\n words: 'near-still: a short, soft fade, and nothing slides or scales',\n presets: ['fade'],\n heroPresets: ['fade'],\n media: ['fade'],\n eases: ['gentle-end', 'gentle-both'],\n duration: [400, 500],\n stagger: [60, 75],\n hero: [80, 100],\n sides: false,\n },\n}\n\n/** The motion styles each mood suits, which the look is offered and the seed draws among. */\nexport const AI_SITE_MOTION_SUITS: Readonly<Record<AiSiteMotionMood, readonly AiSiteMotionStyle[]>> = {\n calm: ['still', 'rise', 'sides'],\n bold: ['sides', 'scale', 'cascade', 'rise'],\n gallery: ['scale', 'sides', 'still', 'cascade'],\n standard: ['sides', 'rise', 'scale', 'cascade'],\n}\n\n/** A motion style, read defensively: `null` for anything outside the vocabulary. */\nexport function aiSiteMotionStyle(value: unknown): AiSiteMotionStyle | null {\n return typeof value === 'string' && (AI_SITE_MOTION_STYLES as readonly string[]).includes(value) ? (value as AiSiteMotionStyle) : null\n}\n\n/** The motion styles that suit a kind of site. */\nexport function aiSiteMotionStylesFor(kind: string | null | undefined): readonly AiSiteMotionStyle[] {\n return AI_SITE_MOTION_SUITS[aiSiteMotionMood(kind)]\n}\n\n/** The mood a kind of site moves in. */\nexport function aiSiteMotionMood(kind: string | null | undefined): AiSiteMotionMood {\n return (kind && AI_SITE_MOTION_KINDS[kind]) || 'standard'\n}\n\n/**\n * A small deterministic generator over a seed (mulberry32), mixed with its\n * own constant so a site's motion does not move in step with its layout.\n */\nfunction random(seed: number): () => number {\n let state = (seed ^ 0x6a09e667) >>> 0\n return () => {\n state = (state + 0x6d2b79f5) >>> 0\n let t = state\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n}\n\nconst pick = <T>(next: () => number, list: readonly T[]): T => list[Math.floor(next() * list.length) % list.length] as T\n/** A value in an inclusive range, on a step: 10 ms for a duration, 5 ms for a gap. */\nconst within = (next: () => number, [low, high]: readonly [number, number], step: number): number =>\n low + Math.floor(next() * (Math.floor((high - low) / step) + 1)) * step\n\n/**\n * The motion character of a site: its motion style where its look chose one,\n * else its kind's mood, turned by its seed.\n */\nexport function aiSiteMotion(input: { kind?: string | null; seed: number; motion?: string | null }): ElementMotionCharacter {\n const style = aiSiteMotionStyle(input.motion)\n const range = style ? AI_SITE_MOTION_STYLE_RANGES[style] : AI_SITE_MOTION_MOODS[aiSiteMotionMood(input.kind)]\n const next = random(input.seed >>> 0)\n const first = Math.floor(next() * range.presets.length) % range.presets.length\n const sectionPresets = range.presets.map((_, index) => range.presets[(first + index) % range.presets.length])\n const character: ElementMotionCharacter = {\n preset: sectionPresets[0],\n sectionPresets,\n sides: range.sides ?? true,\n mediaPreset: pick(next, range.media),\n ease: pick(next, range.eases),\n durationMs: within(next, range.duration, 10),\n staggerStepMs: within(next, range.stagger, 5),\n heroStepMs: within(next, range.hero, 5),\n }\n // Drawn after the rest, so a mood, which names neither, draws the same numbers either way.\n if (range.heroPresets?.length) character.preset = pick(next, range.heroPresets)\n if (range.groupPresets?.length) character.groupPreset = pick(next, range.groupPresets)\n return character\n}\n\n/**\n * A page the AI built, with its site's entrance motion written onto it —\n * or the same node map, when there was nothing left to move.\n */\nexport function aiWithSiteMotion<T extends Record<string, any>>(\n nodes: T,\n site: { kind?: string | null; seed: number; motion?: string | null },\n page: { rootId?: string; sectionIds?: readonly string[] } = {},\n): T {\n return applyElementMotion(nodes, {\n character: aiSiteMotion(site),\n ...(page.rootId ? { rootId: page.rootId } : {}),\n ...(page.sectionIds?.length ? { sectionIds: page.sectionIds } : {}),\n })\n}\n"],"names":["applyElementMotion","AI_SITE_MOTION_MOODS","calm","presets","media","eases","duration","stagger","hero","bold","gallery","standard","AI_SITE_MOTION_KINDS","professional","wellness","yoga","beauty","blog","studio","fitness","music","events","portfolio","photography","AI_SITE_MOTION_STYLES","AI_SITE_MOTION_STYLE_RANGES","sides","words","heroPresets","rise","scale","cascade","groupPresets","still","AI_SITE_MOTION_SUITS","aiSiteMotionStyle","value","includes","aiSiteMotionStylesFor","kind","aiSiteMotionMood","random","seed","state","t","Math","imul","pick","next","list","floor","length","within","low","high","step","aiSiteMotion","input","range","style","motion","first","sectionPresets","map","_","index","character","preset","mediaPreset","ease","durationMs","staggerStepMs","heroStepMs","groupPreset","aiWithSiteMotion","nodes","site","page","rootId","sectionIds"],"mappings":"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"}