motiondesk-studio 0.0.0-stage → 1.3.0
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.
- package/LICENSE +8 -0
- package/README.md +53 -2
- package/THIRD_PARTY_NOTICES.md +13 -0
- package/app/assets/ai-assistant-DOEK1wrr.js +138 -0
- package/app/assets/annual-report-C59pnbh2.js +147 -0
- package/app/assets/app-tour-B8525Qt1.js +164 -0
- package/app/assets/apps-DwnIwigQ.js +1 -0
- package/app/assets/arrows-_CCvumhN.js +1 -0
- package/app/assets/auto-CJsCPj1R.js +1 -0
- package/app/assets/badges-BPgMBVy0.js +1 -0
- package/app/assets/balloon-party-BDWzrF-Z.js +160 -0
- package/app/assets/beauty-DgeCsQdf.js +1 -0
- package/app/assets/boarding-pass-i17EemsZ.js +192 -0
- package/app/assets/business-BQslCr0i.js +1 -0
- package/app/assets/business-DfyVziqj.js +1 -0
- package/app/assets/catalog-Cdx5nbp0.js +1 -0
- package/app/assets/celebration-COCZTKjl.js +1 -0
- package/app/assets/celebrations-CkfTGLEK.js +1 -0
- package/app/assets/chalk-menu-CQSqwxNP.js +158 -0
- package/app/assets/claim-steps-BNFeoYYZ.js +180 -0
- package/app/assets/clinic-booking-CvQEpBWn.js +178 -0
- package/app/assets/community-BV13F-Wp.js +1 -0
- package/app/assets/concert-poster-iUOM-elw.js +189 -0
- package/app/assets/course-syllabus-CnM_03XP.js +164 -0
- package/app/assets/culture-DpL14_5r.js +1 -0
- package/app/assets/cyber-shield-B_6oatye.js +192 -0
- package/app/assets/data-DgES5FIF.js +1 -0
- package/app/assets/dev-hiring-code-Bg00S1Iz.js +138 -0
- package/app/assets/devices-D1500q8F.js +1 -0
- package/app/assets/donation-meter-C3wuRmFA.js +164 -0
- package/app/assets/editorial-mag-DsTVzQMx.js +180 -0
- package/app/assets/education-CGTOg3_0.js +1 -0
- package/app/assets/ev-charge-KaMIQd_s.js +218 -0
- package/app/assets/event-announce-cLmuvt45.js +147 -0
- package/app/assets/events-kZ6HshfK.js +1 -0
- package/app/assets/family-De56hVSo.js +1 -0
- package/app/assets/fashion-DbGAD96W.js +1 -0
- package/app/assets/finance-BUdlKAud.js +1 -0
- package/app/assets/finance-growth-CYgFE0RC.js +140 -0
- package/app/assets/fitness-rings-streak-Cp7n4zq_.js +141 -0
- package/app/assets/flash-sale-Tc0Jw34H.js +143 -0
- package/app/assets/flipclock-countdown-BkrU9ZhF.js +153 -0
- package/app/assets/floorplan-linedraw-B4ZwEDv3.js +192 -0
- package/app/assets/food-CiEyQAd1.js +1 -0
- package/app/assets/food-PijmcKM-.js +1 -0
- package/app/assets/gaming-DnzPj6Uv.js +1 -0
- package/app/assets/glass-product-CsUqplIf.js +139 -0
- package/app/assets/glossy-cosmetics-DBb-YonD.js +203 -0
- package/app/assets/gold-couture-e6c5nsVY.js +190 -0
- package/app/assets/gradient-blobs-Daiu9eFf.js +139 -0
- package/app/assets/graduation-day-vdz-kGI1.js +134 -0
- package/app/assets/headline-news-ticker-GgZ_nRXK.js +181 -0
- package/app/assets/health-CbyTqvSM.js +1 -0
- package/app/assets/health-DMeKWmDa.js +1 -0
- package/app/assets/hiring-team-Bia3GQaH.js +137 -0
- package/app/assets/holiday-greeting-B7TFl0_5.js +144 -0
- package/app/assets/holidays-BmXfhKdf.js +1 -0
- package/app/assets/hr-2i-f-S-M.js +1 -0
- package/app/assets/hyperframes-BM7eWgx2.js +1 -0
- package/app/assets/index-BlSoi5FK.css +1 -0
- package/app/assets/index-D3rEDfqX.js +290 -0
- package/app/assets/index-b2-CMdBrCiU.js +1 -0
- package/app/assets/index-b3-egAjkT9z.js +1 -0
- package/app/assets/index-b4-Cnj_xde0.js +1 -0
- package/app/assets/index-b5-CoZgwX8-.js +1 -0
- package/app/assets/iso-product-3d-DQT1lHDq.js +229 -0
- package/app/assets/itinerary-map-pins-BTX0ZebL.js +201 -0
- package/app/assets/key-handover-DuIj4oKe.js +171 -0
- package/app/assets/kids-BNwXKe4O.js +1 -0
- package/app/assets/kinetic-launch-D2rSnewM.js +161 -0
- package/app/assets/launch-DqkMfeFI.js +1 -0
- package/app/assets/legal-Caoeh9dp.js +1 -0
- package/app/assets/legal-trust-T01BmIDB.js +186 -0
- package/app/assets/level-up-CBXf6nj2.js +205 -0
- package/app/assets/logo-sting-Uf0nckUQ.js +106 -0
- package/app/assets/manifesto-quote-DCIONyzh.js +120 -0
- package/app/assets/match-day-p25bzqbq.js +146 -0
- package/app/assets/match-score-CSZ4Tx4B.js +210 -0
- package/app/assets/music-hbnVS8dK.js +1 -0
- package/app/assets/nature-Bj99iNsv.js +1 -0
- package/app/assets/neighborhood-map-BpbZiy-v.js +158 -0
- package/app/assets/neon-grid-Bo0xfsL6.js +159 -0
- package/app/assets/nonprofit-DK7XI33A.js +1 -0
- package/app/assets/objects-DD8bqyWR.js +1 -0
- package/app/assets/org-chart-hiring-tGX1UpiJ.js +161 -0
- package/app/assets/paper-collage-CK-XODvZ.js +181 -0
- package/app/assets/paw-adopt-D5hKgsaL.js +173 -0
- package/app/assets/people-l3GsDfAr.js +1 -0
- package/app/assets/pets-Dp8EeTjS.js +1 -0
- package/app/assets/playful-blocks-BGXW4vra.js +162 -0
- package/app/assets/podcast-waveform-promo-D-h_ydpJ.js +182 -0
- package/app/assets/premium-Cy680sWT.js +1 -0
- package/app/assets/price-grid-DbYGPlJt.js +176 -0
- package/app/assets/quote-carousel-bold-D5fpKgSS.js +143 -0
- package/app/assets/realestate-BXW-rsfP.js +1 -0
- package/app/assets/recipe-ingredients-B_bSw3x_.js +162 -0
- package/app/assets/retail-D-XWCWed.js +1 -0
- package/app/assets/retro-80s-CCZc9S6x.js +141 -0
- package/app/assets/roadmap-timeline-BpbNdfCr.js +164 -0
- package/app/assets/saas-dashboard-s-2gR3AN.js +195 -0
- package/app/assets/sale-wheel-24h-CsiOja2Z.js +153 -0
- package/app/assets/save-the-date-C6O8fH8f.js +141 -0
- package/app/assets/seasons-BFYc_klb.js +1 -0
- package/app/assets/services-DRPQcCXX.js +1 -0
- package/app/assets/shapes-AVMwC-FR.js +1 -0
- package/app/assets/social-CNpE0GKG.js +1 -0
- package/app/assets/split-wipe-before-after-Lg-NbF0V.js +198 -0
- package/app/assets/sports-DyBfpPm5.js +1 -0
- package/app/assets/stats-dashboard-CxxFtNfj.js +149 -0
- package/app/assets/stickers-J4NDCW2L.js +1 -0
- package/app/assets/stock-portfolio-DFpeHEjJ.js +174 -0
- package/app/assets/swiss-grid-jfcgySaJ.js +153 -0
- package/app/assets/tech-BaRjeFZ0.js +1 -0
- package/app/assets/tech-D-xc9pRv.js +1 -0
- package/app/assets/transport-Bolufhfq.js +1 -0
- package/app/assets/travel-DoqS5vPB.js +1 -0
- package/app/assets/travel-route-DUPXi7Qa.js +169 -0
- package/app/assets/tutorial-steps-Ep2JeqXu.js +160 -0
- package/app/assets/wallet-card-transactions-DtI9Usn9.js +188 -0
- package/app/assets/wedding-invite-BhgqMwO7.js +142 -0
- package/app/catalog/bank-previews/01-car-choice.webp +0 -0
- package/app/catalog/bank-previews/02-holiday-budget.webp +0 -0
- package/app/catalog/bank-previews/03-one-click.webp +0 -0
- package/app/catalog/bank-previews/04-career-course.webp +0 -0
- package/app/catalog/bank-previews/05-home-refresh.webp +0 -0
- package/app/catalog/bank-previews/06-summer-plans.webp +0 -0
- package/app/catalog/bank-previews/07-car-upgrade.webp +0 -0
- package/app/catalog/bank-previews/08-wedding-plan.webp +0 -0
- package/app/catalog/bank-previews/09-share-intro.webp +0 -0
- package/app/catalog/bank-previews/10-suspicious-message.webp +0 -0
- package/app/catalog/bank-previews/11-student-routine.webp +0 -0
- package/app/catalog/bank-previews/12-investing-first-step.webp +0 -0
- package/app/catalog/bank-previews/13-fomo.webp +0 -0
- package/app/catalog/bank-previews/14-market-timing.webp +0 -0
- package/app/catalog/bank-previews/15-investing-for-all.webp +0 -0
- package/app/catalog/bank-previews/16-two-paths.webp +0 -0
- package/app/catalog/bank-previews/17-small-business.webp +0 -0
- package/app/catalog/bank-previews/18-travel-forex.webp +0 -0
- package/app/catalog/bank-previews/19-mortgage-questions.webp +0 -0
- package/app/catalog/bank-previews/20-market-app.webp +0 -0
- package/app/catalog/enhanced-v2/01-revenue-quarter/config.motiondesk-config.json +54 -0
- package/app/catalog/enhanced-v2/01-revenue-quarter/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/01-revenue-quarter/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/01-revenue-quarter/project.motiondesk.json +5127 -0
- package/app/catalog/enhanced-v2/02-daily-workout/config.motiondesk-config.json +54 -0
- package/app/catalog/enhanced-v2/02-daily-workout/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/02-daily-workout/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/02-daily-workout/project.motiondesk.json +5747 -0
- package/app/catalog/enhanced-v2/03-italy-trip/config.motiondesk-config.json +44 -0
- package/app/catalog/enhanced-v2/03-italy-trip/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/03-italy-trip/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/03-italy-trip/project.motiondesk.json +5139 -0
- package/app/catalog/enhanced-v2/04-smart-savings/config.motiondesk-config.json +41 -0
- package/app/catalog/enhanced-v2/04-smart-savings/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/04-smart-savings/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/04-smart-savings/project.motiondesk.json +5322 -0
- package/app/catalog/enhanced-v2/05-weekly-challenge/config.motiondesk-config.json +45 -0
- package/app/catalog/enhanced-v2/05-weekly-challenge/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/05-weekly-challenge/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/05-weekly-challenge/project.motiondesk.json +5442 -0
- package/app/catalog/enhanced-v2/06-flash-sale/config.motiondesk-config.json +42 -0
- package/app/catalog/enhanced-v2/06-flash-sale/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/06-flash-sale/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/06-flash-sale/project.motiondesk.json +5616 -0
- package/app/catalog/enhanced-v2/07-flight-savings/config.motiondesk-config.json +43 -0
- package/app/catalog/enhanced-v2/07-flight-savings/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/07-flight-savings/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/07-flight-savings/project.motiondesk.json +6319 -0
- package/app/catalog/enhanced-v2/08-team-dashboard/config.motiondesk-config.json +52 -0
- package/app/catalog/enhanced-v2/08-team-dashboard/poster.jpg +0 -0
- package/app/catalog/enhanced-v2/08-team-dashboard/preview.mp4 +0 -0
- package/app/catalog/enhanced-v2/08-team-dashboard/project.motiondesk.json +5327 -0
- package/app/catalog/showcase-v3/11-flow-finance/poster.jpg +0 -0
- package/app/catalog/showcase-v3/11-flow-finance/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/11-flow-finance/project.motiondesk.json +5690 -0
- package/app/catalog/showcase-v3/12-pulse-training/poster.jpg +0 -0
- package/app/catalog/showcase-v3/12-pulse-training/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/12-pulse-training/project.motiondesk.json +3643 -0
- package/app/catalog/showcase-v3/13-orbit-travel/poster.jpg +0 -0
- package/app/catalog/showcase-v3/13-orbit-travel/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/13-orbit-travel/project.motiondesk.json +3939 -0
- package/app/catalog/showcase-v3/14-nova-product/config.motiondesk-config.json +163 -0
- package/app/catalog/showcase-v3/14-nova-product/poster.jpg +0 -0
- package/app/catalog/showcase-v3/14-nova-product/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/14-nova-product/project.motiondesk.json +11196 -0
- package/app/catalog/showcase-v3/15-tempo-motion/config.motiondesk-config.json +122 -0
- package/app/catalog/showcase-v3/15-tempo-motion/poster.jpg +0 -0
- package/app/catalog/showcase-v3/15-tempo-motion/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/15-tempo-motion/project.motiondesk.json +7424 -0
- package/app/catalog/showcase-v3/16-atlas-journey/config.motiondesk-config.json +132 -0
- package/app/catalog/showcase-v3/16-atlas-journey/poster.jpg +0 -0
- package/app/catalog/showcase-v3/16-atlas-journey/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/16-atlas-journey/project.motiondesk.json +9257 -0
- package/app/catalog/showcase-v3/17-revenue-quarter/config.motiondesk-config.json +151 -0
- package/app/catalog/showcase-v3/17-revenue-quarter/poster.jpg +0 -0
- package/app/catalog/showcase-v3/17-revenue-quarter/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/17-revenue-quarter/project.motiondesk.json +10473 -0
- package/app/catalog/showcase-v3/18-daily-workout/config.motiondesk-config.json +139 -0
- package/app/catalog/showcase-v3/18-daily-workout/poster.jpg +0 -0
- package/app/catalog/showcase-v3/18-daily-workout/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/18-daily-workout/project.motiondesk.json +8656 -0
- package/app/catalog/showcase-v3/19-italy-trip/config.motiondesk-config.json +132 -0
- package/app/catalog/showcase-v3/19-italy-trip/poster.jpg +0 -0
- package/app/catalog/showcase-v3/19-italy-trip/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/19-italy-trip/project.motiondesk.json +9690 -0
- package/app/catalog/showcase-v3/20-smart-savings/config.motiondesk-config.json +152 -0
- package/app/catalog/showcase-v3/20-smart-savings/poster.jpg +0 -0
- package/app/catalog/showcase-v3/20-smart-savings/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/20-smart-savings/project.motiondesk.json +9770 -0
- package/app/catalog/showcase-v3/21-weekly-challenge/config.motiondesk-config.json +125 -0
- package/app/catalog/showcase-v3/21-weekly-challenge/poster.jpg +0 -0
- package/app/catalog/showcase-v3/21-weekly-challenge/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/21-weekly-challenge/project.motiondesk.json +8404 -0
- package/app/catalog/showcase-v3/22-flash-sale/config.motiondesk-config.json +116 -0
- package/app/catalog/showcase-v3/22-flash-sale/poster.jpg +0 -0
- package/app/catalog/showcase-v3/22-flash-sale/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/22-flash-sale/project.motiondesk.json +7482 -0
- package/app/catalog/showcase-v3/23-flight-savings/config.motiondesk-config.json +139 -0
- package/app/catalog/showcase-v3/23-flight-savings/poster.jpg +0 -0
- package/app/catalog/showcase-v3/23-flight-savings/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/23-flight-savings/project.motiondesk.json +9205 -0
- package/app/catalog/showcase-v3/24-team-dashboard/config.motiondesk-config.json +155 -0
- package/app/catalog/showcase-v3/24-team-dashboard/poster.jpg +0 -0
- package/app/catalog/showcase-v3/24-team-dashboard/preview.mp4 +0 -0
- package/app/catalog/showcase-v3/24-team-dashboard/project.motiondesk.json +10735 -0
- package/app/catalog/v4/bank-01-car-choice/config.motiondesk-config.json +86 -0
- package/app/catalog/v4/bank-01-car-choice/poster.webp +0 -0
- package/app/catalog/v4/bank-01-car-choice/project.motiondesk.json +6962 -0
- package/app/catalog/v4/bank-02-holiday-budget/config.motiondesk-config.json +98 -0
- package/app/catalog/v4/bank-02-holiday-budget/poster.webp +0 -0
- package/app/catalog/v4/bank-02-holiday-budget/project.motiondesk.json +7242 -0
- package/app/catalog/v4/bank-03-one-click/config.motiondesk-config.json +97 -0
- package/app/catalog/v4/bank-03-one-click/poster.webp +0 -0
- package/app/catalog/v4/bank-03-one-click/project.motiondesk.json +6789 -0
- package/app/catalog/v4/bank-04-career-course/config.motiondesk-config.json +88 -0
- package/app/catalog/v4/bank-04-career-course/poster.webp +0 -0
- package/app/catalog/v4/bank-04-career-course/project.motiondesk.json +6514 -0
- package/app/catalog/v4/bank-05-five-years-new-word/config.motiondesk-config.json +86 -0
- package/app/catalog/v4/bank-05-five-years-new-word/poster.webp +0 -0
- package/app/catalog/v4/bank-05-five-years-new-word/project.motiondesk.json +5865 -0
- package/app/catalog/v4/bank-06-home-upgrade/config.motiondesk-config.json +88 -0
- package/app/catalog/v4/bank-06-home-upgrade/poster.webp +0 -0
- package/app/catalog/v4/bank-06-home-upgrade/project.motiondesk.json +7187 -0
- package/app/catalog/v4/bank-07-car-upgrade/config.motiondesk-config.json +87 -0
- package/app/catalog/v4/bank-07-car-upgrade/poster.webp +0 -0
- package/app/catalog/v4/bank-07-car-upgrade/project.motiondesk.json +6018 -0
- package/app/catalog/v4/bank-08-summer-dollar/config.motiondesk-config.json +85 -0
- package/app/catalog/v4/bank-08-summer-dollar/poster.webp +0 -0
- package/app/catalog/v4/bank-08-summer-dollar/project.motiondesk.json +6291 -0
- package/app/catalog/v4/bank-09-wedding/config.motiondesk-config.json +88 -0
- package/app/catalog/v4/bank-09-wedding/poster.webp +0 -0
- package/app/catalog/v4/bank-09-wedding/project.motiondesk.json +6517 -0
- package/app/catalog/v4/bank-10-family-dinner-pay/config.motiondesk-config.json +100 -0
- package/app/catalog/v4/bank-10-family-dinner-pay/poster.webp +0 -0
- package/app/catalog/v4/bank-10-family-dinner-pay/project.motiondesk.json +7053 -0
- package/app/catalog/v4/bank-11-youth-pitch-creator/config.motiondesk-config.json +100 -0
- package/app/catalog/v4/bank-11-youth-pitch-creator/poster.webp +0 -0
- package/app/catalog/v4/bank-11-youth-pitch-creator/project.motiondesk.json +6820 -0
- package/app/catalog/v4/bank-12-gift-shares/config.motiondesk-config.json +90 -0
- package/app/catalog/v4/bank-12-gift-shares/poster.webp +0 -0
- package/app/catalog/v4/bank-12-gift-shares/project.motiondesk.json +6025 -0
- package/app/catalog/v4/bank-13-suspicious-call/config.motiondesk-config.json +96 -0
- package/app/catalog/v4/bank-13-suspicious-call/poster.webp +0 -0
- package/app/catalog/v4/bank-13-suspicious-call/project.motiondesk.json +6734 -0
- package/app/catalog/v4/bank-14-urgent-message/config.motiondesk-config.json +89 -0
- package/app/catalog/v4/bank-14-urgent-message/poster.webp +0 -0
- package/app/catalog/v4/bank-14-urgent-message/project.motiondesk.json +6724 -0
- package/app/catalog/v4/bank-15-olympic-excellence/config.motiondesk-config.json +88 -0
- package/app/catalog/v4/bank-15-olympic-excellence/poster.webp +0 -0
- package/app/catalog/v4/bank-15-olympic-excellence/project.motiondesk.json +6431 -0
- package/app/catalog/v4/bank-16-savings-pocket/config.motiondesk-config.json +97 -0
- package/app/catalog/v4/bank-16-savings-pocket/poster.webp +0 -0
- package/app/catalog/v4/bank-16-savings-pocket/project.motiondesk.json +6628 -0
- package/app/catalog/v4/bank-17-students/config.motiondesk-config.json +91 -0
- package/app/catalog/v4/bank-17-students/poster.webp +0 -0
- package/app/catalog/v4/bank-17-students/project.motiondesk.json +6629 -0
- package/app/catalog/v4/bank-18-phone-phobia/config.motiondesk-config.json +86 -0
- package/app/catalog/v4/bank-18-phone-phobia/poster.webp +0 -0
- package/app/catalog/v4/bank-18-phone-phobia/project.motiondesk.json +6140 -0
- package/app/catalog/v4/bank-19-financial-fomo/config.motiondesk-config.json +91 -0
- package/app/catalog/v4/bank-19-financial-fomo/poster.webp +0 -0
- package/app/catalog/v4/bank-19-financial-fomo/project.motiondesk.json +7189 -0
- package/app/catalog/v4/bank-20-start-investing/config.motiondesk-config.json +95 -0
- package/app/catalog/v4/bank-20-start-investing/poster.webp +0 -0
- package/app/catalog/v4/bank-20-start-investing/project.motiondesk.json +7149 -0
- package/app/catalog/v4/bank-21-market-timing/config.motiondesk-config.json +95 -0
- package/app/catalog/v4/bank-21-market-timing/poster.webp +0 -0
- package/app/catalog/v4/bank-21-market-timing/project.motiondesk.json +6166 -0
- package/app/catalog/v4/bank-22-market-vs-realestate/config.motiondesk-config.json +88 -0
- package/app/catalog/v4/bank-22-market-vs-realestate/poster.webp +0 -0
- package/app/catalog/v4/bank-22-market-vs-realestate/project.motiondesk.json +7698 -0
- package/app/catalog/v4/bank-23-investing-for-all/config.motiondesk-config.json +92 -0
- package/app/catalog/v4/bank-23-investing-for-all/poster.webp +0 -0
- package/app/catalog/v4/bank-23-investing-for-all/project.motiondesk.json +6150 -0
- package/app/catalog/v4/bank-24-business-loan/config.motiondesk-config.json +85 -0
- package/app/catalog/v4/bank-24-business-loan/poster.webp +0 -0
- package/app/catalog/v4/bank-24-business-loan/project.motiondesk.json +6804 -0
- package/app/catalog/v4/bank-25-open-door/config.motiondesk-config.json +84 -0
- package/app/catalog/v4/bank-25-open-door/poster.webp +0 -0
- package/app/catalog/v4/bank-25-open-door/project.motiondesk.json +5976 -0
- package/app/catalog/v4/bank-26-first-card-challenge/config.motiondesk-config.json +84 -0
- package/app/catalog/v4/bank-26-first-card-challenge/poster.webp +0 -0
- package/app/catalog/v4/bank-26-first-card-challenge/project.motiondesk.json +6167 -0
- package/app/catalog/v4/bank-27-holiday-trip/config.motiondesk-config.json +85 -0
- package/app/catalog/v4/bank-27-holiday-trip/poster.webp +0 -0
- package/app/catalog/v4/bank-27-holiday-trip/project.motiondesk.json +6291 -0
- package/app/catalog/v4/bank-28-renew-home/config.motiondesk-config.json +87 -0
- package/app/catalog/v4/bank-28-renew-home/poster.webp +0 -0
- package/app/catalog/v4/bank-28-renew-home/project.motiondesk.json +6489 -0
- package/app/catalog/v4/bank-29-fastest-way-to-pay/config.motiondesk-config.json +98 -0
- package/app/catalog/v4/bank-29-fastest-way-to-pay/poster.webp +0 -0
- package/app/catalog/v4/bank-29-fastest-way-to-pay/project.motiondesk.json +6915 -0
- package/app/catalog/v4/bank-30-forex-terminal/config.motiondesk-config.json +103 -0
- package/app/catalog/v4/bank-30-forex-terminal/poster.webp +0 -0
- package/app/catalog/v4/bank-30-forex-terminal/project.motiondesk.json +6997 -0
- package/app/catalog/v4/bank-31-youth-campaign-brief/config.motiondesk-config.json +103 -0
- package/app/catalog/v4/bank-31-youth-campaign-brief/poster.webp +0 -0
- package/app/catalog/v4/bank-31-youth-campaign-brief/project.motiondesk.json +7136 -0
- package/app/catalog/v4/bank-32-dream-vacation/config.motiondesk-config.json +87 -0
- package/app/catalog/v4/bank-32-dream-vacation/poster.webp +0 -0
- package/app/catalog/v4/bank-32-dream-vacation/project.motiondesk.json +6531 -0
- package/app/catalog/v4/bank-33-mortgage-advice/config.motiondesk-config.json +87 -0
- package/app/catalog/v4/bank-33-mortgage-advice/poster.webp +0 -0
- package/app/catalog/v4/bank-33-mortgage-advice/project.motiondesk.json +6767 -0
- package/app/catalog/v4/bank-34-who-are-you-saver/config.motiondesk-config.json +97 -0
- package/app/catalog/v4/bank-34-who-are-you-saver/poster.webp +0 -0
- package/app/catalog/v4/bank-34-who-are-you-saver/project.motiondesk.json +6309 -0
- package/app/catalog/v4/bank-35-strange-calls/config.motiondesk-config.json +85 -0
- package/app/catalog/v4/bank-35-strange-calls/poster.webp +0 -0
- package/app/catalog/v4/bank-35-strange-calls/project.motiondesk.json +7034 -0
- package/app/catalog/v4/bank-36-one-shekel-flight/config.motiondesk-config.json +91 -0
- package/app/catalog/v4/bank-36-one-shekel-flight/poster.webp +0 -0
- package/app/catalog/v4/bank-36-one-shekel-flight/project.motiondesk.json +6364 -0
- package/app/catalog/v4/bank-37-street-quiz-pay/config.motiondesk-config.json +81 -0
- package/app/catalog/v4/bank-37-street-quiz-pay/poster.webp +0 -0
- package/app/catalog/v4/bank-37-street-quiz-pay/project.motiondesk.json +6466 -0
- package/app/catalog/v4/bank-38-pension-compare/config.motiondesk-config.json +92 -0
- package/app/catalog/v4/bank-38-pension-compare/poster.webp +0 -0
- package/app/catalog/v4/bank-38-pension-compare/project.motiondesk.json +6752 -0
- package/app/catalog/v4/bank-39-new-look-app/config.motiondesk-config.json +103 -0
- package/app/catalog/v4/bank-39-new-look-app/poster.webp +0 -0
- package/app/catalog/v4/bank-39-new-look-app/project.motiondesk.json +6954 -0
- package/app/catalog/v4/bank-40-interest-pocket/config.motiondesk-config.json +83 -0
- package/app/catalog/v4/bank-40-interest-pocket/poster.webp +0 -0
- package/app/catalog/v4/bank-40-interest-pocket/project.motiondesk.json +5783 -0
- package/app/catalog/v4/bank-41-young-telenovela/config.motiondesk-config.json +95 -0
- package/app/catalog/v4/bank-41-young-telenovela/poster.webp +0 -0
- package/app/catalog/v4/bank-41-young-telenovela/project.motiondesk.json +5967 -0
- package/app/catalog/v4/bank-42-market-app/config.motiondesk-config.json +103 -0
- package/app/catalog/v4/bank-42-market-app/poster.webp +0 -0
- package/app/catalog/v4/bank-42-market-app/project.motiondesk.json +6766 -0
- package/app/catalog/v4/bank-43-passover-sites/config.motiondesk-config.json +92 -0
- package/app/catalog/v4/bank-43-passover-sites/poster.webp +0 -0
- package/app/catalog/v4/bank-43-passover-sites/project.motiondesk.json +7173 -0
- package/app/catalog/v4/bank-44-end-of-excuses/config.motiondesk-config.json +93 -0
- package/app/catalog/v4/bank-44-end-of-excuses/poster.webp +0 -0
- package/app/catalog/v4/bank-44-end-of-excuses/project.motiondesk.json +6010 -0
- package/app/catalog/v4/bank-45-good-reasons/config.motiondesk-config.json +90 -0
- package/app/catalog/v4/bank-45-good-reasons/poster.webp +0 -0
- package/app/catalog/v4/bank-45-good-reasons/project.motiondesk.json +7122 -0
- package/app/catalog/v4/bank-46-mortgage-hotline/config.motiondesk-config.json +99 -0
- package/app/catalog/v4/bank-46-mortgage-hotline/poster.webp +0 -0
- package/app/catalog/v4/bank-46-mortgage-hotline/project.motiondesk.json +6923 -0
- package/app/catalog/v4/bank-47-financial-growth-center/config.motiondesk-config.json +84 -0
- package/app/catalog/v4/bank-47-financial-growth-center/poster.webp +0 -0
- package/app/catalog/v4/bank-47-financial-growth-center/project.motiondesk.json +6424 -0
- package/app/catalog/v4/bank-48-judo-grand-prix/config.motiondesk-config.json +88 -0
- package/app/catalog/v4/bank-48-judo-grand-prix/poster.webp +0 -0
- package/app/catalog/v4/bank-48-judo-grand-prix/project.motiondesk.json +6335 -0
- package/app/catalog/v4/bank-49-currency-convert/config.motiondesk-config.json +98 -0
- package/app/catalog/v4/bank-49-currency-convert/poster.webp +0 -0
- package/app/catalog/v4/bank-49-currency-convert/project.motiondesk.json +7036 -0
- package/app/catalog/v4/bank-50-salary-young/config.motiondesk-config.json +95 -0
- package/app/catalog/v4/bank-50-salary-young/poster.webp +0 -0
- package/app/catalog/v4/bank-50-salary-young/project.motiondesk.json +6414 -0
- package/app/catalog/v4/v4-onboarding-beats-16x9/config.motiondesk-config.json +162 -0
- package/app/catalog/v4/v4-onboarding-beats-16x9/poster.webp +0 -0
- package/app/catalog/v4/v4-onboarding-beats-16x9/project.motiondesk.json +9796 -0
- package/app/catalog/v4/v4-savings-goal-9x16/config.motiondesk-config.json +151 -0
- package/app/catalog/v4/v4-savings-goal-9x16/poster.webp +0 -0
- package/app/catalog/v4/v4-savings-goal-9x16/project.motiondesk.json +11847 -0
- package/app/catalog/v4/v4-trip-planner-1x1/config.motiondesk-config.json +137 -0
- package/app/catalog/v4/v4-trip-planner-1x1/poster.webp +0 -0
- package/app/catalog/v4/v4-trip-planner-1x1/project.motiondesk.json +10797 -0
- package/app/catalog/v4/v4-wallet-launch-16x9/config.motiondesk-config.json +172 -0
- package/app/catalog/v4/v4-wallet-launch-16x9/poster.webp +0 -0
- package/app/catalog/v4/v4-wallet-launch-16x9/project.motiondesk.json +14270 -0
- package/app/fonts/heebo-hebrew-400-normal.woff2 +0 -0
- package/app/fonts/heebo-hebrew-700-normal.woff2 +0 -0
- package/app/fonts/heebo-latin-400-normal.woff2 +0 -0
- package/app/fonts/heebo-latin-700-normal.woff2 +0 -0
- package/app/fonts/motiondesk-symbols.ttf +0 -0
- package/app/fonts/noto-sans-math-OFL.txt +93 -0
- package/app/index.html +15 -0
- package/app/studio-hf/fonts/heebo-hebrew-400-normal.woff2 +0 -0
- package/app/studio-hf/fonts/heebo-hebrew-700-normal.woff2 +0 -0
- package/app/studio-hf/fonts/heebo-latin-400-normal.woff2 +0 -0
- package/app/studio-hf/fonts/heebo-latin-700-normal.woff2 +0 -0
- package/app/studio-hf/frame.html +21 -0
- package/app/studio-hf/vendor/gsap.min.js +11 -0
- package/bin/motiondesk-studio.mjs +244 -0
- package/lib/catalog/hyperframes/ai-assistant.html +137 -0
- package/lib/catalog/hyperframes/annual-report.html +146 -0
- package/lib/catalog/hyperframes/app-tour.html +163 -0
- package/lib/catalog/hyperframes/balloon-party.html +159 -0
- package/lib/catalog/hyperframes/boarding-pass.html +191 -0
- package/lib/catalog/hyperframes/chalk-menu.html +157 -0
- package/lib/catalog/hyperframes/claim-steps.html +179 -0
- package/lib/catalog/hyperframes/clinic-booking.html +177 -0
- package/lib/catalog/hyperframes/concert-poster.html +188 -0
- package/lib/catalog/hyperframes/course-syllabus.html +163 -0
- package/lib/catalog/hyperframes/cyber-shield.html +191 -0
- package/lib/catalog/hyperframes/dev-hiring-code.html +137 -0
- package/lib/catalog/hyperframes/donation-meter.html +163 -0
- package/lib/catalog/hyperframes/editorial-mag.html +179 -0
- package/lib/catalog/hyperframes/ev-charge.html +217 -0
- package/lib/catalog/hyperframes/event-announce.html +146 -0
- package/lib/catalog/hyperframes/finance-growth.html +139 -0
- package/lib/catalog/hyperframes/fitness-rings-streak.html +140 -0
- package/lib/catalog/hyperframes/flash-sale.html +142 -0
- package/lib/catalog/hyperframes/flipclock-countdown.html +152 -0
- package/lib/catalog/hyperframes/floorplan-linedraw.html +191 -0
- package/lib/catalog/hyperframes/glass-product.html +138 -0
- package/lib/catalog/hyperframes/glossy-cosmetics.html +202 -0
- package/lib/catalog/hyperframes/gold-couture.html +189 -0
- package/lib/catalog/hyperframes/gradient-blobs.html +138 -0
- package/lib/catalog/hyperframes/graduation-day.html +133 -0
- package/lib/catalog/hyperframes/headline-news-ticker.html +180 -0
- package/lib/catalog/hyperframes/hiring-team.html +136 -0
- package/lib/catalog/hyperframes/holiday-greeting.html +143 -0
- package/lib/catalog/hyperframes/index-b2.json +194 -0
- package/lib/catalog/hyperframes/index-b3.json +194 -0
- package/lib/catalog/hyperframes/index-b4.json +162 -0
- package/lib/catalog/hyperframes/index-b5.json +130 -0
- package/lib/catalog/hyperframes/index.json +322 -0
- package/lib/catalog/hyperframes/iso-product-3d.html +228 -0
- package/lib/catalog/hyperframes/itinerary-map-pins.html +200 -0
- package/lib/catalog/hyperframes/key-handover.html +170 -0
- package/lib/catalog/hyperframes/kinetic-launch.html +160 -0
- package/lib/catalog/hyperframes/legal-trust.html +185 -0
- package/lib/catalog/hyperframes/level-up.html +204 -0
- package/lib/catalog/hyperframes/logo-sting.html +105 -0
- package/lib/catalog/hyperframes/manifesto-quote.html +119 -0
- package/lib/catalog/hyperframes/match-day.html +145 -0
- package/lib/catalog/hyperframes/match-score.html +209 -0
- package/lib/catalog/hyperframes/neighborhood-map.html +157 -0
- package/lib/catalog/hyperframes/neon-grid.html +158 -0
- package/lib/catalog/hyperframes/org-chart-hiring.html +160 -0
- package/lib/catalog/hyperframes/paper-collage.html +180 -0
- package/lib/catalog/hyperframes/paw-adopt.html +172 -0
- package/lib/catalog/hyperframes/playful-blocks.html +161 -0
- package/lib/catalog/hyperframes/podcast-waveform-promo.html +181 -0
- package/lib/catalog/hyperframes/price-grid.html +175 -0
- package/lib/catalog/hyperframes/quote-carousel-bold.html +142 -0
- package/lib/catalog/hyperframes/recipe-ingredients.html +161 -0
- package/lib/catalog/hyperframes/retro-80s.html +140 -0
- package/lib/catalog/hyperframes/roadmap-timeline.html +163 -0
- package/lib/catalog/hyperframes/saas-dashboard.html +194 -0
- package/lib/catalog/hyperframes/sale-wheel-24h.html +152 -0
- package/lib/catalog/hyperframes/save-the-date.html +140 -0
- package/lib/catalog/hyperframes/split-wipe-before-after.html +197 -0
- package/lib/catalog/hyperframes/stats-dashboard.html +148 -0
- package/lib/catalog/hyperframes/stock-portfolio.html +173 -0
- package/lib/catalog/hyperframes/swiss-grid.html +152 -0
- package/lib/catalog/hyperframes/travel-route.html +168 -0
- package/lib/catalog/hyperframes/tutorial-steps.html +159 -0
- package/lib/catalog/hyperframes/wallet-card-transactions.html +187 -0
- package/lib/catalog/hyperframes/wedding-invite.html +141 -0
- package/lib/catalog/studio/apps.json +2134 -0
- package/lib/catalog/studio/auto.json +2019 -0
- package/lib/catalog/studio/beauty.json +1630 -0
- package/lib/catalog/studio/business.json +2064 -0
- package/lib/catalog/studio/celebrations.json +2142 -0
- package/lib/catalog/studio/community.json +1926 -0
- package/lib/catalog/studio/culture.json +2156 -0
- package/lib/catalog/studio/data.json +1934 -0
- package/lib/catalog/studio/education.json +1914 -0
- package/lib/catalog/studio/events.json +1921 -0
- package/lib/catalog/studio/family.json +2159 -0
- package/lib/catalog/studio/fashion.json +1958 -0
- package/lib/catalog/studio/finance.json +1922 -0
- package/lib/catalog/studio/food.json +2128 -0
- package/lib/catalog/studio/gaming.json +1756 -0
- package/lib/catalog/studio/health.json +1934 -0
- package/lib/catalog/studio/hr.json +1860 -0
- package/lib/catalog/studio/kids.json +1697 -0
- package/lib/catalog/studio/launch.json +2161 -0
- package/lib/catalog/studio/legal.json +1732 -0
- package/lib/catalog/studio/music.json +1721 -0
- package/lib/catalog/studio/nonprofit.json +1665 -0
- package/lib/catalog/studio/pets.json +2196 -0
- package/lib/catalog/studio/premium.json +5577 -0
- package/lib/catalog/studio/realestate.json +2018 -0
- package/lib/catalog/studio/retail.json +1959 -0
- package/lib/catalog/studio/services.json +2154 -0
- package/lib/catalog/studio/social.json +2004 -0
- package/lib/catalog/studio/sports.json +1999 -0
- package/lib/catalog/studio/tech.json +2124 -0
- package/lib/catalog/studio/travel.json +1966 -0
- package/lib/core-v4.cjs +4897 -0
- package/lib/core.cjs +4223 -0
- package/lib/motion-blur.cjs +36 -0
- package/lib/studio.cjs +4419 -0
- package/lib/vercel-render.mjs +494 -0
- package/lib/vercel-source.cjs +88 -0
- package/package.json +16 -4
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/math)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
https://openfontlicense.org
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
package/app/index.html
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="he" dir="rtl">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' blob:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: motiondesk-media:; media-src 'self' data: blob: motiondesk-media:; frame-src 'self' blob:; connect-src 'self' ws:;" />
|
|
7
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='14' fill='%23e30613'/%3E%3Cpath d='M18 44V20l14 14 14-14v24' fill='none' stroke='%23fff' stroke-width='6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E" />
|
|
8
|
+
<title>MotionDesk</title>
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-D3rEDfqX.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="./assets/index-BlSoi5FK.css">
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="root"></div>
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html><head><meta charset="utf-8">
|
|
3
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; font-src data:; img-src data: blob:; media-src data: blob:">
|
|
4
|
+
<title>HyperFrames preview</title><style>html,body{margin:0;background:#000;height:100%}</style></head>
|
|
5
|
+
<body><script>
|
|
6
|
+
// Sandboxed (opaque-origin) host for MotionDesk Studio HyperFrames previews.
|
|
7
|
+
// Only the MotionDesk page that framed it (same origin as this file) may load a composition;
|
|
8
|
+
// the CSP above stays in force after document.write, so the composition cannot reach the network.
|
|
9
|
+
(function () {
|
|
10
|
+
var self = location.origin;
|
|
11
|
+
var trusted = function (o) { return o === self || (location.protocol === 'file:' && (o === 'file://' || o === 'null')); };
|
|
12
|
+
if (window.parent === window) return;
|
|
13
|
+
addEventListener('message', function onLoad(e) {
|
|
14
|
+
var d = e.data || {};
|
|
15
|
+
if (e.source !== parent || !trusted(e.origin) || d.type !== 'motiondesk:load' || typeof d.html !== 'string') return;
|
|
16
|
+
removeEventListener('message', onLoad);
|
|
17
|
+
document.open(); document.write(d.html); document.close();
|
|
18
|
+
});
|
|
19
|
+
parent.postMessage({ type: 'motiondesk:frame-ready' }, '*');
|
|
20
|
+
})();
|
|
21
|
+
</script></body></html>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* GSAP 3.13.0
|
|
3
|
+
* https://gsap.com
|
|
4
|
+
*
|
|
5
|
+
* @license Copyright 2025, GreenSock. All rights reserved.
|
|
6
|
+
* Subject to the terms at https://gsap.com/standard-license.
|
|
7
|
+
* @author: Jack Doyle, jack@greensock.com
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(e){"use strict";function _inheritsLoose(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function r(t){return"string"==typeof t}function s(t){return"function"==typeof t}function t(t){return"number"==typeof t}function u(t){return void 0===t}function v(t){return"object"==typeof t}function w(t){return!1!==t}function x(){return"undefined"!=typeof window}function y(t){return s(t)||r(t)}function P(t){return(i=yt(t,ot))&&ze}function Q(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")}function R(t,e){return!e&&console.warn(t)}function S(t,e){return t&&(ot[t]=e)&&i&&(i[t]=e)||ot}function T(){return 0}function ea(t){var e,r,i=t[0];if(v(i)||s(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(r=gt.length;r--&&!gt[r].targetTest(i););e=gt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new Zt(t[r],e)))||t.splice(r,1);return t}function fa(t){return t._gsap||ea(Ot(t))[0]._gsap}function ga(t,e,r){return(r=t[e])&&s(r)?t[e]():u(r)&&t.getAttribute&&t.getAttribute(e)||r}function ha(t,e){return(t=t.split(",")).forEach(e)||t}function ia(t){return Math.round(1e5*t)/1e5||0}function ja(t){return Math.round(1e7*t)/1e7||0}function ka(t,e){var r=e.charAt(0),i=parseFloat(e.substr(2));return t=parseFloat(t),"+"===r?t+i:"-"===r?t-i:"*"===r?t*i:t/i}function la(t,e){for(var r=e.length,i=0;t.indexOf(e[i])<0&&++i<r;);return i<r}function ma(){var t,e,r=dt.length,i=dt.slice(0);for(ct={},t=dt.length=0;t<r;t++)(e=i[t])&&e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0)._lazy=0)}function na(t){return!!(t._initted||t._startAt||t.add)}function oa(t,e,r,i){dt.length&&!L&&ma(),t.render(e,r,i||!!(L&&e<0&&na(t))),dt.length&&!L&&ma()}function pa(t){var e=parseFloat(t);return(e||0===e)&&(t+"").match(at).length<2?e:r(t)?t.trim():t}function qa(t){return t}function ra(t,e){for(var r in e)r in t||(t[r]=e[r]);return t}function ua(t,e){for(var r in e)"__proto__"!==r&&"constructor"!==r&&"prototype"!==r&&(t[r]=v(e[r])?ua(t[r]||(t[r]={}),e[r]):e[r]);return t}function va(t,e){var r,i={};for(r in t)r in e||(i[r]=t[r]);return i}function wa(t){var e=t.parent||I,r=t.keyframes?function _setKeyframeDefaults(i){return function(t,e){for(var r in e)r in t||"duration"===r&&i||"ease"===r||(t[r]=e[r])}}($(t.keyframes)):ra;if(w(t.inherit))for(;e;)r(t,e.vars.defaults),e=e.parent||e._dp;return t}function ya(t,e,r,i,n){void 0===r&&(r="_first"),void 0===i&&(i="_last");var a,s=t[i];if(n)for(a=e[n];s&&s[n]>a;)s=s._prev;return s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t,e}function za(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function Aa(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0}function Ba(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function Da(t,e,r,i){return t._startAt&&(L?t._startAt.revert(ht):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,i))}function Fa(t){return t._repeat?Tt(t._tTime,t=t.duration()+t._rDelay)*t:0}function Ha(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function Ia(t){return t._end=ja(t._start+(t._tDur/Math.abs(t._ts||t._rts||U)||0))}function Ja(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=ja(r._time-(0<t._ts?e/t._ts:((t._dirty?t.totalDuration():t._tDur)-e)/-t._ts)),Ia(t),r._dirty||Ba(r,t)),t}function Ka(t,e){var r;if((e._time||!e._dur&&e._initted||e._start<t._time&&(e._dur||!e.add))&&(r=Ha(t.rawTime(),e),(!e._dur||Mt(0,e.totalDuration(),r)-e._tTime>U)&&e.render(r,!0)),Ba(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur<t.duration())for(r=t;r._dp;)0<=r.rawTime()&&r.totalTime(r._tTime),r=r._dp;t._zTime=-U}}function La(e,r,i,n){return r.parent&&Aa(r),r._start=ja((t(i)?i:i||e!==I?xt(e,i,r):e._time)+r._delay),r._end=ja(r._start+(r.totalDuration()/Math.abs(r.timeScale())||0)),ya(e,r,"_first","_last",e._sort?"_start":0),bt(r)||(e._recent=r),n||Ka(e,r),e._ts<0&&Ja(e,e._tTime),e}function Ma(t,e){return(ot.ScrollTrigger||Q("scrollTrigger",e))&&ot.ScrollTrigger.create(e,t)}function Na(t,e,r,i,n){return Wt(t,e,n),t._initted?!r&&t._pt&&!L&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&f!==Rt.frame?(dt.push(t),t._lazy=[n,i],1):void 0:1}function Sa(t,e,r,i){var n=t._repeat,a=ja(e)||0,s=t._tTime/t._tDur;return s&&!i&&(t._time*=a/t._dur),t._dur=a,t._tDur=n?n<0?1e10:ja(a*(n+1)+t._rDelay*n):a,0<s&&!i&&Ja(t,t._tTime=t._tDur*s),t.parent&&Ia(t),r||Ba(t.parent,t),t}function Ta(t){return t instanceof Qt?Ba(t):Sa(t,t._dur)}function Wa(e,r,i){var n,a,s=t(r[1]),o=(s?2:1)+(e<2?0:1),u=r[o];if(s&&(u.duration=r[1]),u.parent=i,e){for(n=u,a=i;a&&!("immediateRender"in n);)n=a.vars.defaults||{},a=w(a.vars.inherit)&&a.parent;u.immediateRender=w(n.immediateRender),e<2?u.runBackwards=1:u.startAt=r[o-1]}return new Jt(r[0],u,r[1+o])}function Xa(t,e){return t||0===t?e(t):e}function Za(t,e){return r(t)&&(e=st.exec(t))?e[1]:""}function ab(t,e){return t&&v(t)&&"length"in t&&(!e&&!t.length||t.length-1 in t&&v(t[0]))&&!t.nodeType&&t!==h}function db(r){return r=Ot(r)[0]||R("Invalid scope")||{},function(t){var e=r.current||r.nativeElement||r;return Ot(t,e.querySelectorAll?e:e===r?R("Invalid scope")||a.createElement("div"):r)}}function eb(t){return t.sort(function(){return.5-Math.random()})}function fb(t){if(s(t))return t;var p=v(t)?t:{each:t},_=Yt(p.ease),m=p.from||0,g=parseFloat(p.base)||0,y={},e=0<m&&m<1,T=isNaN(m)||e,b=p.axis,w=m,x=m;return r(m)?w=x={center:.5,edges:.5,end:1}[m]||0:!e&&T&&(w=m[0],x=m[1]),function(t,e,r){var i,n,a,s,o,u,h,l,f,d=(r||p).length,c=y[d];if(!c){if(!(f="auto"===p.grid?0:(p.grid||[1,N])[1])){for(h=-N;h<(h=r[f++].getBoundingClientRect().left)&&f<d;);f<d&&f--}for(c=y[d]=[],i=T?Math.min(f,d)*w-.5:m%f,n=f===N?0:T?d*x/f-.5:m/f|0,l=N,u=h=0;u<d;u++)a=u%f-i,s=n-(u/f|0),c[u]=o=b?Math.abs("y"===b?s:a):G(a*a+s*s),h<o&&(h=o),o<l&&(l=o);"random"===m&&eb(c),c.max=h-l,c.min=l,c.v=d=(parseFloat(p.amount)||parseFloat(p.each)*(d<f?d-1:b?"y"===b?d/f:f:Math.max(f,d/f))||0)*("edges"===m?-1:1),c.b=d<0?g-d:g,c.u=Za(p.amount||p.each)||0,_=_&&d<0?jt(_):_}return d=(c[t]-c.min)/c.max||0,ja(c.b+(_?_(d):d)*c.v)+c.u}}function gb(i){var n=Math.pow(10,((i+"").split(".")[1]||"").length);return function(e){var r=ja(Math.round(parseFloat(e)/i)*i*n);return(r-r%1)/n+(t(e)?0:Za(e))}}function hb(h,e){var l,f,r=$(h);return!r&&v(h)&&(l=r=h.radius||N,h.values?(h=Ot(h.values),(f=!t(h[0]))&&(l*=l)):h=gb(h.increment)),Xa(e,r?s(h)?function(t){return f=h(t),Math.abs(f-t)<=l?f:t}:function(e){for(var r,i,n=parseFloat(f?e.x:e),a=parseFloat(f?e.y:0),s=N,o=0,u=h.length;u--;)(r=f?(r=h[u].x-n)*r+(i=h[u].y-a)*i:Math.abs(h[u]-n))<s&&(s=r,o=u);return o=!l||s<=l?h[o]:e,f||o===e||t(e)?o:o+Za(e)}:gb(h))}function ib(t,e,r,i){return Xa($(t)?!e:!0===r?!!(r=0):!i,function(){return $(t)?t[~~(Math.random()*t.length)]:(r=r||1e-5)&&(i=r<1?Math.pow(10,(r+"").length-2):1)&&Math.floor(Math.round((t-r/2+Math.random()*(e-t+.99*r))/r)*r*i)/i})}function mb(e,r,t){return Xa(t,function(t){return e[~~r(t)]})}function pb(t){for(var e,r,i,n,a=0,s="";~(e=t.indexOf("random(",a));)i=t.indexOf(")",e),n="["===t.charAt(e+7),r=t.substr(e+7,i-e-7).match(n?at:tt),s+=t.substr(a,e-a)+ib(n?r:+r[0],n?0:+r[1],+r[2]||1e-5),a=i+1;return s+t.substr(a,t.length-a)}function sb(t,e,r){var i,n,a,s=t.labels,o=N;for(i in s)(n=s[i]-e)<0==!!r&&n&&o>(n=Math.abs(n))&&(a=i,o=n);return a}function ub(t){return Aa(t),t.scrollTrigger&&t.scrollTrigger.kill(!!L),t.progress()<1&&Pt(t,"onInterrupt"),t}function xb(t){if(t)if(t=!t.name&&t.default||t,x()||t.headless){var e=t.name,r=s(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:T,render:ue,add:Vt,kill:de,modifier:he,rawVars:0},a={targetTest:0,get:0,getSetter:ie,aliases:{},register:0};if(Ft(),t!==i){if(pt[e])return;ra(i,ra(va(t,n),a)),yt(i.prototype,yt(n,va(t,a))),pt[i.prop=e]=i,t.targetTest&&(gt.push(i),ft[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}S(e,i),t.register&&t.register(ze,i,ge)}else Ct.push(t)}function Ab(t,e,r){return(6*(t+=t<0?1:1<t?-1:0)<1?e+(r-e)*t*6:t<.5?r:3*t<2?e+(r-e)*(2/3-t)*6:e)*St+.5|0}function Bb(e,r,i){var n,a,s,o,u,h,l,f,d,c,p=e?t(e)?[e>>16,e>>8&St,e&St]:0:Dt.black;if(!p){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),Dt[e])p=Dt[e];else if("#"===e.charAt(0)){if(e.length<6&&(e="#"+(n=e.charAt(1))+n+(a=e.charAt(2))+a+(s=e.charAt(3))+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(p=parseInt(e.substr(1,6),16))>>16,p>>8&St,p&St,parseInt(e.substr(7),16)/255];p=[(e=parseInt(e.substr(1),16))>>16,e>>8&St,e&St]}else if("hsl"===e.substr(0,3))if(p=c=e.match(tt),r){if(~e.indexOf("="))return p=e.match(et),i&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,u=p[1]/100,n=2*(h=p[2]/100)-(a=h<=.5?h*(u+1):h+u-h*u),3<p.length&&(p[3]*=1),p[0]=Ab(o+1/3,n,a),p[1]=Ab(o,n,a),p[2]=Ab(o-1/3,n,a);else p=e.match(tt)||Dt.transparent;p=p.map(Number)}return r&&!c&&(n=p[0]/St,a=p[1]/St,s=p[2]/St,h=((l=Math.max(n,a,s))+(f=Math.min(n,a,s)))/2,l===f?o=u=0:(d=l-f,u=.5<h?d/(2-l-f):d/(l+f),o=l===n?(a-s)/d+(a<s?6:0):l===a?(s-n)/d+2:(n-a)/d+4,o*=60),p[0]=~~(o+.5),p[1]=~~(100*u+.5),p[2]=~~(100*h+.5)),i&&p.length<4&&(p[3]=1),p}function Cb(t){var r=[],i=[],n=-1;return t.split(zt).forEach(function(t){var e=t.match(rt)||[];r.push.apply(r,e),i.push(n+=e.length+1)}),r.c=i,r}function Db(t,e,r){var i,n,a,s,o="",u=(t+o).match(zt),h=e?"hsla(":"rgba(",l=0;if(!u)return t;if(u=u.map(function(t){return(t=Bb(t,e,1))&&h+(e?t[0]+","+t[1]+"%,"+t[2]+"%,"+t[3]:t.join(","))+")"}),r&&(a=Cb(t),(i=r.c).join(o)!==a.c.join(o)))for(s=(n=t.replace(zt,"1").split(rt)).length-1;l<s;l++)o+=n[l]+(~i.indexOf(l)?u.shift()||h+"0,0,0,0)":(a.length?a:u.length?u:r).shift());if(!n)for(s=(n=t.split(zt)).length-1;l<s;l++)o+=n[l]+u[l];return o+n[s]}function Gb(t){var e,r=t.join(" ");if(zt.lastIndex=0,zt.test(r))return e=Et.test(r),t[1]=Db(t[1],e),t[0]=Db(t[0],e,Cb(t[1])),!0}function Pb(t){var e=(t+"").split("("),r=Lt[e[0]];return r&&1<e.length&&r.config?r.config.apply(null,~t.indexOf("{")?[function _parseObjectInString(t){for(var e,r,i,n={},a=t.substr(1,t.length-3).split(":"),s=a[0],o=1,u=a.length;o<u;o++)r=a[o],e=o!==u-1?r.lastIndexOf(","):r.length,i=r.substr(0,e),n[s]=isNaN(i)?i.replace(Bt,"").trim():+i,s=r.substr(e+1).trim();return n}(e[1])]:function _valueInParentheses(t){var e=t.indexOf("(")+1,r=t.indexOf(")"),i=t.indexOf("(",e);return t.substring(e,~i&&i<r?t.indexOf(")",r+1):r)}(t).split(",").map(pa)):Lt._CE&&It.test(t)?Lt._CE("",t):r}function Rb(t,e){for(var r,i=t._first;i;)i instanceof Qt?Rb(i,e):!i.vars.yoyoEase||i._yoyo&&i._repeat||i._yoyo===e||(i.timeline?Rb(i.timeline,e):(r=i._ease,i._ease=i._yEase,i._yEase=r,i._yoyo=e)),i=i._next}function Tb(t,e,r,i){void 0===r&&(r=function easeOut(t){return 1-e(1-t)}),void 0===i&&(i=function easeInOut(t){return t<.5?e(2*t)/2:1-e(2*(1-t))/2});var n,a={easeIn:e,easeOut:r,easeInOut:i};return ha(t,function(t){for(var e in Lt[t]=ot[t]=a,Lt[n=t.toLowerCase()]=r,a)Lt[n+("easeIn"===e?".in":"easeOut"===e?".out":".inOut")]=Lt[t+"."+e]=a[e]}),a}function Ub(e){return function(t){return t<.5?(1-e(1-2*t))/2:.5+e(2*(t-.5))/2}}function Vb(r,t,e){function Lm(t){return 1===t?1:i*Math.pow(2,-10*t)*K((t-a)*n)+1}var i=1<=t?t:1,n=(e||(r?.3:.45))/(t<1?t:1),a=n/q*(Math.asin(1/i)||0),s="out"===r?Lm:"in"===r?function(t){return 1-Lm(1-t)}:Ub(Lm);return n=q/n,s.config=function(t,e){return Vb(r,t,e)},s}function Wb(e,r){function Tm(t){return t?--t*t*((r+1)*t+r)+1:0}void 0===r&&(r=1.70158);var t="out"===e?Tm:"in"===e?function(t){return 1-Tm(1-t)}:Ub(Tm);return t.config=function(t){return Wb(e,t)},t}var F,L,l,I,h,n,a,i,o,f,d,c,p,_,m,g,b,M,k,O,A,C,D,z,E,B,j,Y,X={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},Z={duration:.5,overwrite:!1,delay:0},N=1e8,U=1/N,q=2*Math.PI,V=q/4,W=0,G=Math.sqrt,H=Math.cos,K=Math.sin,J="function"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},$=Array.isArray,tt=/(?:-?\.?\d|\.)+/gi,et=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,rt=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,it=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,nt=/[+-]=-?[.\d]+/,at=/[^,'"\[\]\s]+/gi,st=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,ot={},ut={suppressEvents:!0,isStart:!0,kill:!1},ht={suppressEvents:!0,kill:!1},lt={suppressEvents:!0},ft={},dt=[],ct={},pt={},_t={},mt=30,gt=[],vt="",yt=function _merge(t,e){for(var r in e)t[r]=e[r];return t},Tt=function _animationCycle(t,e){var r=Math.floor(t=ja(t/e));return t&&r===t?r-1:r},bt=function _isFromOrFromStart(t){var e=t.data;return"isFromStart"===e||"isStart"===e},wt={_start:0,endTime:T,totalDuration:T},xt=function _parsePosition(t,e,i){var n,a,s,o=t.labels,u=t._recent||wt,h=t.duration()>=N?u.endTime(!1):t._dur;return r(e)&&(isNaN(e)||e in o)?(a=e.charAt(0),s="%"===e.substr(-1),n=e.indexOf("="),"<"===a||">"===a?(0<=n&&(e=e.replace(/=/,"")),("<"===a?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(s?(n<0?u:i).totalDuration()/100:1)):n<0?(e in o||(o[e]=h),o[e]):(a=parseFloat(e.charAt(n-1)+e.substr(n+1)),s&&i&&(a=a/100*($(i)?i[0]:i).totalDuration()),1<n?_parsePosition(t,e.substr(0,n-1),i)+a:h+a)):null==e?h:+e},Mt=function _clamp(t,e,r){return r<t?t:e<r?e:r},kt=[].slice,Ot=function toArray(t,e,i){return l&&!e&&l.selector?l.selector(t):!r(t)||i||!n&&Ft()?$(t)?function _flatten(t,e,i){return void 0===i&&(i=[]),t.forEach(function(t){return r(t)&&!e||ab(t,1)?i.push.apply(i,Ot(t)):i.push(t)})||i}(t,i):ab(t)?kt.call(t,0):t?[t]:[]:kt.call((e||a).querySelectorAll(t),0)},At=function mapRange(e,t,r,i,n){var a=t-e,s=i-r;return Xa(n,function(t){return r+((t-e)/a*s||0)})},Pt=function _callback(t,e,r){var i,n,a,s=t.vars,o=s[e],u=l,h=t._ctx;if(o)return i=s[e+"Params"],n=s.callbackScope||t,r&&dt.length&&ma(),h&&(l=h),a=i?o.apply(n,i):o.call(n),l=u,a},Ct=[],St=255,Dt={aqua:[0,St,St],lime:[0,St,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,St],navy:[0,0,128],white:[St,St,St],olive:[128,128,0],yellow:[St,St,0],orange:[St,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[St,0,0],pink:[St,192,203],cyan:[0,St,St],transparent:[St,St,St,0]},zt=function(){var t,e="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b";for(t in Dt)e+="|"+t+"\\b";return new RegExp(e+")","gi")}(),Et=/hsl[a]?\(/,Rt=(k=Date.now,O=500,A=33,C=k(),D=C,E=z=1e3/240,g={time:0,frame:0,tick:function tick(){Al(!0)},deltaRatio:function deltaRatio(t){return b/(1e3/(t||60))},wake:function wake(){o&&(!n&&x()&&(h=n=window,a=h.document||{},ot.gsap=ze,(h.gsapVersions||(h.gsapVersions=[])).push(ze.version),P(i||h.GreenSockGlobals||!h.gsap&&h||{}),Ct.forEach(xb)),m="undefined"!=typeof requestAnimationFrame&&requestAnimationFrame,p&&g.sleep(),_=m||function(t){return setTimeout(t,E-1e3*g.time+1|0)},c=1,Al(2))},sleep:function sleep(){(m?cancelAnimationFrame:clearTimeout)(p),c=0,_=T},lagSmoothing:function lagSmoothing(t,e){O=t||1/0,A=Math.min(e||33,O)},fps:function fps(t){z=1e3/(t||240),E=1e3*g.time+z},add:function add(n,t,e){var a=t?function(t,e,r,i){n(t,e,r,i),g.remove(a)}:n;return g.remove(n),B[e?"unshift":"push"](a),Ft(),a},remove:function remove(t,e){~(e=B.indexOf(t))&&B.splice(e,1)&&e<=M&&M--},_listeners:B=[]}),Ft=function _wake(){return!c&&Rt.wake()},Lt={},It=/^[\d.\-M][\d.\-,\s]/,Bt=/["']/g,jt=function _invertEase(e){return function(t){return 1-e(1-t)}},Yt=function _parseEase(t,e){return t&&(s(t)?t:Lt[t]||Pb(t))||e};function Al(t){var e,r,i,n,a=k()-D,s=!0===t;if((O<a||a<0)&&(C+=a-A),(0<(e=(i=(D+=a)-C)-E)||s)&&(n=++g.frame,b=i-1e3*g.time,g.time=i/=1e3,E+=e+(z<=e?4:z-e),r=1),s||(p=_(Al)),r)for(M=0;M<B.length;M++)B[M](i,b,n,t)}function jn(t){return t<Y?j*t*t:t<.7272727272727273?j*Math.pow(t-1.5/2.75,2)+.75:t<.9090909090909092?j*(t-=2.25/2.75)*t+.9375:j*Math.pow(t-2.625/2.75,2)+.984375}ha("Linear,Quad,Cubic,Quart,Quint,Strong",function(t,e){var r=e<5?e+1:e;Tb(t+",Power"+(r-1),e?function(t){return Math.pow(t,r)}:function(t){return t},function(t){return 1-Math.pow(1-t,r)},function(t){return t<.5?Math.pow(2*t,r)/2:1-Math.pow(2*(1-t),r)/2})}),Lt.Linear.easeNone=Lt.none=Lt.Linear.easeIn,Tb("Elastic",Vb("in"),Vb("out"),Vb()),j=7.5625,Y=1/2.75,Tb("Bounce",function(t){return 1-jn(1-t)},jn),Tb("Expo",function(t){return Math.pow(2,10*(t-1))*t+t*t*t*t*t*t*(1-t)}),Tb("Circ",function(t){return-(G(1-t*t)-1)}),Tb("Sine",function(t){return 1===t?1:1-H(t*V)}),Tb("Back",Wb("in"),Wb("out"),Wb()),Lt.SteppedEase=Lt.steps=ot.SteppedEase={config:function config(t,e){void 0===t&&(t=1);var r=1/t,i=t+(e?0:1),n=e?1:0;return function(t){return((i*Mt(0,.99999999,t)|0)+n)*r}}},Z.ease=Lt["quad.out"],ha("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt",function(t){return vt+=t+","+t+"Params,"});var Xt,Zt=function GSCache(t,e){this.id=W++,(t._gsap=this).target=t,this.harness=e,this.get=e?e.get:ga,this.set=e?e.getSetter:ie},Nt=((Xt=Animation.prototype).delay=function delay(t){return t||0===t?(this.parent&&this.parent.smoothChildTiming&&this.startTime(this._start+t-this._delay),this._delay=t,this):this._delay},Xt.duration=function duration(t){return arguments.length?this.totalDuration(0<this._repeat?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},Xt.totalDuration=function totalDuration(t){return arguments.length?(this._dirty=0,Sa(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},Xt.totalTime=function totalTime(t,e){if(Ft(),!arguments.length)return this._tTime;var r=this._dp;if(r&&r.smoothChildTiming&&this._ts){for(Ja(this,t),!r._dp||r.parent||Ka(r,this);r&&r.parent;)r.parent._time!==r._start+(0<=r._ts?r._tTime/r._ts:(r.totalDuration()-r._tTime)/-r._ts)&&r.totalTime(r._tTime,!0),r=r.parent;!this.parent&&this._dp.autoRemoveChildren&&(0<this._ts&&t<this._tDur||this._ts<0&&0<t||!this._tDur&&!t)&&La(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&Math.abs(this._zTime)===U||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),oa(this,t,e)),this},Xt.time=function time(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+Fa(this))%(this._dur+this._rDelay)||(t?this._dur:0),e):this._time},Xt.totalProgress=function totalProgress(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):0<=this.rawTime()&&this._initted?1:0},Xt.progress=function progress(t,e){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?t:1-t)+Fa(this),e):this.duration()?Math.min(1,this._time/this._dur):0<this.rawTime()?1:0},Xt.iteration=function iteration(t,e){var r=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*r,e):this._repeat?Tt(this._tTime,r)+1:1},Xt.timeScale=function timeScale(t,e){if(!arguments.length)return this._rts===-U?0:this._rts;if(this._rts===t)return this;var r=this.parent&&this._ts?Ha(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||t===-U?0:this._rts,this.totalTime(Mt(-Math.abs(this._delay),this.totalDuration(),r),!1!==e),Ia(this),function _recacheAncestors(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t}(this)},Xt.paused=function paused(t){return arguments.length?(this._ps!==t&&((this._ps=t)?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(Ft(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&Math.abs(this._zTime)!==U&&(this._tTime-=U)))),this):this._ps},Xt.startTime=function startTime(t){if(arguments.length){this._start=t;var e=this.parent||this._dp;return!e||!e._sort&&this.parent||La(e,this,t-this._delay),this}return this._start},Xt.endTime=function endTime(t){return this._start+(w(t)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},Xt.rawTime=function rawTime(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?Ha(e.rawTime(t),this):this._tTime:this._tTime},Xt.revert=function revert(t){void 0===t&&(t=lt);var e=L;return L=t,na(this)&&(this.timeline&&this.timeline.revert(t),this.totalTime(-.01,t.suppressEvents)),"nested"!==this.data&&!1!==t.kill&&this.kill(),L=e,this},Xt.globalTime=function globalTime(t){for(var e=this,r=arguments.length?t:e.rawTime();e;)r=e._start+r/(Math.abs(e._ts)||1),e=e._dp;return!this.parent&&this._sat?this._sat.globalTime(t):r},Xt.repeat=function repeat(t){return arguments.length?(this._repeat=t===1/0?-2:t,Ta(this)):-2===this._repeat?1/0:this._repeat},Xt.repeatDelay=function repeatDelay(t){if(arguments.length){var e=this._time;return this._rDelay=t,Ta(this),e?this.time(e):this}return this._rDelay},Xt.yoyo=function yoyo(t){return arguments.length?(this._yoyo=t,this):this._yoyo},Xt.seek=function seek(t,e){return this.totalTime(xt(this,t),w(e))},Xt.restart=function restart(t,e){return this.play().totalTime(t?-this._delay:0,w(e)),this._dur||(this._zTime=-U),this},Xt.play=function play(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},Xt.reverse=function reverse(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},Xt.pause=function pause(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},Xt.resume=function resume(){return this.paused(!1)},Xt.reversed=function reversed(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-U:0)),this):this._rts<0},Xt.invalidate=function invalidate(){return this._initted=this._act=0,this._zTime=-U,this},Xt.isActive=function isActive(){var t,e=this.parent||this._dp,r=this._start;return!(e&&!(this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=r&&t<this.endTime(!0)-U))},Xt.eventCallback=function eventCallback(t,e,r){var i=this.vars;return 1<arguments.length?(e?(i[t]=e,r&&(i[t+"Params"]=r),"onUpdate"===t&&(this._onUpdate=e)):delete i[t],this):i[t]},Xt.then=function then(t){var i=this;return new Promise(function(e){function Eo(){var t=i.then;i.then=null,s(r)&&(r=r(i))&&(r.then||r===i)&&(i.then=t),e(r),i.then=t}var r=s(t)?t:qa;i._initted&&1===i.totalProgress()&&0<=i._ts||!i._tTime&&i._ts<0?Eo():i._prom=Eo})},Xt.kill=function kill(){ub(this)},Animation);function Animation(t){this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)&&(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,Sa(this,+t.duration,1,1),this.data=t.data,l&&(this._ctx=l).data.push(this),c||Rt.wake()}ra(Nt.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-U,_prom:0,_ps:!1,_rts:1});var Qt=function(i){function Timeline(t,e){var r;return void 0===t&&(t={}),(r=i.call(this,t)||this).labels={},r.smoothChildTiming=!!t.smoothChildTiming,r.autoRemoveChildren=!!t.autoRemoveChildren,r._sort=w(t.sortChildren),I&&La(t.parent||I,_assertThisInitialized(r),e),t.reversed&&r.reverse(),t.paused&&r.paused(!0),t.scrollTrigger&&Ma(_assertThisInitialized(r),t.scrollTrigger),r}_inheritsLoose(Timeline,i);var e=Timeline.prototype;return e.to=function to(t,e,r){return Wa(0,arguments,this),this},e.from=function from(t,e,r){return Wa(1,arguments,this),this},e.fromTo=function fromTo(t,e,r,i){return Wa(2,arguments,this),this},e.set=function set(t,e,r){return e.duration=0,e.parent=this,wa(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new Jt(t,e,xt(this,r),1),this},e.call=function call(t,e,r){return La(this,Jt.delayedCall(0,t,e),r)},e.staggerTo=function staggerTo(t,e,r,i,n,a,s){return r.duration=e,r.stagger=r.stagger||i,r.onComplete=a,r.onCompleteParams=s,r.parent=this,new Jt(t,r,xt(this,n)),this},e.staggerFrom=function staggerFrom(t,e,r,i,n,a,s){return r.runBackwards=1,wa(r).immediateRender=w(r.immediateRender),this.staggerTo(t,e,r,i,n,a,s)},e.staggerFromTo=function staggerFromTo(t,e,r,i,n,a,s,o){return i.startAt=r,wa(i).immediateRender=w(i.immediateRender),this.staggerTo(t,e,i,n,a,s,o)},e.render=function render(t,e,r){var i,n,a,s,o,u,h,l,f,d,c,p,_=this._time,m=this._dirty?this.totalDuration():this._tDur,g=this._dur,v=t<=0?0:ja(t),y=this._zTime<0!=t<0&&(this._initted||!g);if(this!==I&&m<v&&0<=t&&(v=m),v!==this._tTime||r||y){if(_!==this._time&&g&&(v+=this._time-_,t+=this._time-_),i=v,f=this._start,u=!(l=this._ts),y&&(g||(_=this._zTime),!t&&e||(this._zTime=t)),this._repeat){if(c=this._yoyo,o=g+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*o+t,e,r);if(i=ja(v%o),v===m?(s=this._repeat,i=g):((s=~~(d=ja(v/o)))&&s===d&&(i=g,s--),g<i&&(i=g)),d=Tt(this._tTime,o),!_&&this._tTime&&d!==s&&this._tTime-d*o-this._dur<=0&&(d=s),c&&1&s&&(i=g-i,p=1),s!==d&&!this._lock){var T=c&&1&d,b=T===(c&&1&s);if(s<d&&(T=!T),_=T?0:v%g?g:v,this._lock=1,this.render(_||(p?0:ja(s*o)),e,!g)._lock=0,this._tTime=v,!e&&this.parent&&Pt(this,"onRepeat"),this.vars.repeatRefresh&&!p&&(this.invalidate()._lock=1),_&&_!==this._time||u!=!this._ts||this.vars.onRepeat&&!this.parent&&!this._act)return this;if(g=this._dur,m=this._tDur,b&&(this._lock=2,_=T?g:-1e-4,this.render(_,!0),this.vars.repeatRefresh&&!p&&this.invalidate()),this._lock=0,!this._ts&&!u)return this;Rb(this,p)}}if(this._hasPause&&!this._forcing&&this._lock<2&&(h=function _findNextPauseTween(t,e,r){var i;if(e<r)for(i=t._first;i&&i._start<=r;){if("isPause"===i.data&&i._start>e)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if("isPause"===i.data&&i._start<e)return i;i=i._prev}}(this,ja(_),ja(i)))&&(v-=i-(i=h._start)),this._tTime=v,this._time=i,this._act=!l,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=t,_=0),!_&&v&&!e&&!d&&(Pt(this,"onStart"),this._tTime!==v))return this;if(_<=i&&0<=t)for(n=this._first;n;){if(a=n._next,(n._act||i>=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0<n._ts?(i-n._start)*n._ts:(n._dirty?n.totalDuration():n._tDur)+(i-n._start)*n._ts,e,r),i!==this._time||!this._ts&&!u){h=0,a&&(v+=this._zTime=-U);break}}n=a}else{n=this._last;for(var w=t<0?t:i;n;){if(a=n._prev,(n._act||w<=n._end)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0<n._ts?(w-n._start)*n._ts:(n._dirty?n.totalDuration():n._tDur)+(w-n._start)*n._ts,e,r||L&&na(n)),i!==this._time||!this._ts&&!u){h=0,a&&(v+=this._zTime=w?-U:U);break}}n=a}}if(h&&!e&&(this.pause(),h.render(_<=i?0:-U)._zTime=_<=i?1:-1,this._ts))return this._start=f,Ia(this),this.render(t,e,r);this._onUpdate&&!e&&Pt(this,"onUpdate",!0),(v===m&&this._tTime>=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0<this._ts||!v&&this._ts<0)||Aa(this,1),e||t<0&&!_||!v&&!_&&m||(Pt(this,v===m&&0<=t?"onComplete":"onReverseComplete",!0),!this._prom||v<m&&0<this.timeScale()||this._prom())))}return this},e.add=function add(e,i){var n=this;if(t(i)||(i=xt(this,i,e)),!(e instanceof Nt)){if($(e))return e.forEach(function(t){return n.add(t,i)}),this;if(r(e))return this.addLabel(e,i);if(!s(e))return this;e=Jt.delayedCall(0,e)}return this!==e?La(this,e,i):this},e.getChildren=function getChildren(t,e,r,i){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===r&&(r=!0),void 0===i&&(i=-N);for(var n=[],a=this._first;a;)a._start>=i&&(a instanceof Jt?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return r(t)?this.removeLabel(t):s(t)?this.killTweensOf(t):(t.parent===this&&za(this,t),t===this._recent&&(this._recent=this._last),Ba(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=ja(Rt.time-(0<this._ts?t/this._ts:(this.totalDuration()-t)/-this._ts))),i.prototype.totalTime.call(this,t,e),this._forcing=0,this):this._tTime},e.addLabel=function addLabel(t,e){return this.labels[t]=xt(this,e),this},e.removeLabel=function removeLabel(t){return delete this.labels[t],this},e.addPause=function addPause(t,e,r){var i=Jt.delayedCall(0,e||T,r);return i.data="isPause",this._hasPause=1,La(this,i,xt(this,t))},e.removePause=function removePause(t){var e=this._first;for(t=xt(this,t);e;)e._start===t&&"isPause"===e.data&&Aa(e),e=e._next},e.killTweensOf=function killTweensOf(t,e,r){for(var i=this.getTweensOf(t,r),n=i.length;n--;)Ut!==i[n]&&i[n].kill(t,e);return this},e.getTweensOf=function getTweensOf(e,r){for(var i,n=[],a=Ot(e),s=this._first,o=t(r);s;)s instanceof Jt?la(s._targets,a)&&(o?(!Ut||s._initted&&s._ts)&&s.globalTime(0)<=r&&s.globalTime(s.totalDuration())>r:!r||s.isActive())&&n.push(s):(i=s.getTweensOf(a,r)).length&&n.push.apply(n,i),s=s._next;return n},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=xt(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=Jt.to(i,ra({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||U,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Sa(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,ra({startAt:{time:xt(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),sb(this,xt(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),sb(this,xt(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+U)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);for(var i,n=this._first,a=this.labels;n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return Ba(this)},e.invalidate=function invalidate(t){var e=this._first;for(this._lock=0;e;)e.invalidate(t),e=e._next;return i.prototype.invalidate.call(this,t)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Ba(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=N;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,La(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=r/a._ts,a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Sa(a,a===I&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(I._ts&&(oa(I,Ha(t,I)),f=Rt.frame),Rt.frame>=mt){mt+=X.autoSleep||120;var e=I._first;if((!e||!e._ts)&&X.autoSleep&&Rt._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Rt.sleep()}}},Timeline}(Nt);ra(Qt.prototype,{_lock:0,_hasPause:0,_forcing:0});function bc(t,e,i,n,a,o){var u,h,l,f;if(pt[t]&&!1!==(u=new pt[t]).init(a,u.rawVars?e[t]:function _processVars(t,e,i,n,a){if(s(t)&&(t=Gt(t,a,e,i,n)),!v(t)||t.style&&t.nodeType||$(t)||J(t))return r(t)?Gt(t,a,e,i,n):t;var o,u={};for(o in t)u[o]=Gt(t[o],a,e,i,n);return u}(e[t],n,a,o,i),i,n,o)&&(i._pt=h=new ge(i._pt,a,t,0,1,u.render,u,0,u.priority),i!==d))for(l=i._ptLookup[i._targets.indexOf(a)],f=u._props.length;f--;)l[u._props[f]]=h;return u}function hc(t,r,e,i){var n,a,s=r.ease||i||"power1.inOut";if($(r))a=e[t]||(e[t]=[]),r.forEach(function(t,e){return a.push({t:e/(r.length-1)*100,v:t,e:s})});else for(n in r)a=e[n]||(e[n]=[]),"ease"===n||a.push({t:parseFloat(t),v:r[n],e:s})}var Ut,qt,Vt=function _addPropTween(t,e,i,n,a,o,u,h,l,f){s(n)&&(n=n(a||0,t,o));var d,c=t[e],p="get"!==i?i:s(c)?l?t[e.indexOf("set")||!s(t["get"+e.substr(3)])?e:"get"+e.substr(3)](l):t[e]():c,_=s(c)?l?re:te:$t;if(r(n)&&(~n.indexOf("random(")&&(n=pb(n)),"="===n.charAt(1)&&(!(d=ka(p,n)+(Za(p)||0))&&0!==d||(n=d))),!f||p!==n||qt)return isNaN(p*n)||""===n?(c||e in t||Q(e,n),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,d,c,p,_=new ge(this._pt,t,e,0,1,oe,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(c=~(i+="").indexOf("random("))&&(i=pb(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(it)||[];o=it.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(d=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:d,c:"="===l.charAt(1)?ka(d,l)-d:parseFloat(l)-d,m:h&&h<4?Math.round:0},m=it.lastIndex);return _.c=m<i.length?i.substring(m,i.length):"",_.fp=s,(nt.test(i)||c)&&(_.e=0),this._pt=_}.call(this,t,e,p,n,_,h||X.stringFilter,l)):(d=new ge(this._pt,t,e,+p||0,n-(p||0),"boolean"==typeof c?se:ne,0,_),l&&(d.fp=l),u&&d.modifier(u,this,t),this._pt=d)},Wt=function _initTween(t,e,r){var i,n,a,s,o,u,h,l,f,d,c,p,_,m=t.vars,g=m.ease,v=m.startAt,y=m.immediateRender,T=m.lazy,b=m.onUpdate,x=m.runBackwards,M=m.yoyoEase,k=m.keyframes,O=m.autoRevert,A=t._dur,P=t._startAt,C=t._targets,S=t.parent,D=S&&"nested"===S.data?S.vars.targets:C,z="auto"===t._overwrite&&!F,E=t.timeline;if(!E||k&&g||(g="none"),t._ease=Yt(g,Z.ease),t._yEase=M?jt(Yt(!0===M?g:M,Z.ease)):0,M&&t._yoyo&&!t._repeat&&(M=t._yEase,t._yEase=t._ease,t._ease=M),t._from=!E&&!!m.runBackwards,!E||k&&!m.stagger){if(p=(l=C[0]?fa(C[0]).harness:0)&&m[l.prop],i=va(m,ft),P&&(P._zTime<0&&P.progress(1),e<0&&x&&y&&!O?P.render(-1,!0):P.revert(x&&A?ht:ut),P._lazy=0),v){if(Aa(t._startAt=Jt.set(C,ra({data:"isStart",overwrite:!1,parent:S,immediateRender:!0,lazy:!P&&w(T),startAt:null,delay:0,onUpdate:b&&function(){return Pt(t,"onUpdate")},stagger:0},v))),t._startAt._dp=0,t._startAt._sat=t,e<0&&(L||!y&&!O)&&t._startAt.revert(ht),y&&A&&e<=0&&r<=0)return void(e&&(t._zTime=e))}else if(x&&A&&!P)if(e&&(y=!1),a=ra({overwrite:!1,data:"isFromStart",lazy:y&&!P&&w(T),immediateRender:y,stagger:0,parent:S},i),p&&(a[l.prop]=p),Aa(t._startAt=Jt.set(C,a)),t._startAt._dp=0,t._startAt._sat=t,e<0&&(L?t._startAt.revert(ht):t._startAt.render(-1,!0)),t._zTime=e,y){if(!e)return}else _initTween(t._startAt,U,U);for(t._pt=t._ptCache=0,T=A&&w(T)||T&&!A,n=0;n<C.length;n++){if(h=(o=C[n])._gsap||ea(C)[n]._gsap,t._ptLookup[n]=d={},ct[h.id]&&dt.length&&ma(),c=D===C?n:D.indexOf(o),l&&!1!==(f=new l).init(o,p||i,t,c,D)&&(t._pt=s=new ge(t._pt,o,f.name,0,1,f.render,f,0,f.priority),f._props.forEach(function(t){d[t]=s}),f.priority&&(u=1)),!l||p)for(a in i)pt[a]&&(f=bc(a,i,t,c,o,D))?f.priority&&(u=1):d[a]=s=Vt.call(t,o,a,"get",i[a],c,D,0,m.stringFilter);t._op&&t._op[n]&&t.kill(o,t._op[n]),z&&t._pt&&(Ut=t,I.killTweensOf(o,d,t.globalTime(e)),_=!t.parent,Ut=0),t._pt&&T&&(ct[h.id]=1)}u&&_e(t),t._onInit&&t._onInit(t)}t._onUpdate=b,t._initted=(!t._op||t._pt)&&!_,k&&e<=0&&E.render(N,!0,!0)},Gt=function _parseFuncOrString(t,e,i,n,a){return s(t)?t.call(e,i,n,a):r(t)&&~t.indexOf("random(")?pb(t):t},Ht=vt+"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert",Kt={};ha(Ht+",id,stagger,delay,duration,paused,scrollTrigger",function(t){return Kt[t]=1});var Jt=function(E){function Tween(e,r,i,n){var a;"number"==typeof r&&(i.duration=r,r=i,i=null);var s,o,u,h,l,f,d,c,p=(a=E.call(this,n?r:wa(r))||this).vars,_=p.duration,m=p.delay,g=p.immediateRender,T=p.stagger,b=p.overwrite,x=p.keyframes,M=p.defaults,k=p.scrollTrigger,O=p.yoyoEase,A=r.parent||I,P=($(e)||J(e)?t(e[0]):"length"in r)?[e]:Ot(e);if(a._targets=P.length?ea(P):R("GSAP target "+e+" not found. https://gsap.com",!X.nullTargetWarn)||[],a._ptLookup=[],a._overwrite=b,x||T||y(_)||y(m)){if(r=a.vars,(s=a.timeline=new Qt({data:"nested",defaults:M||{},targets:A&&"nested"===A.data?A.vars.targets:P})).kill(),s.parent=s._dp=_assertThisInitialized(a),s._start=0,T||y(_)||y(m)){if(h=P.length,d=T&&fb(T),v(T))for(l in T)~Ht.indexOf(l)&&((c=c||{})[l]=T[l]);for(o=0;o<h;o++)(u=va(r,Kt)).stagger=0,O&&(u.yoyoEase=O),c&&yt(u,c),f=P[o],u.duration=+Gt(_,_assertThisInitialized(a),o,f,P),u.delay=(+Gt(m,_assertThisInitialized(a),o,f,P)||0)-a._delay,!T&&1===h&&u.delay&&(a._delay=m=u.delay,a._start+=m,u.delay=0),s.to(f,u,d?d(o,f,P):0),s._ease=Lt.none;s.duration()?_=m=0:a.timeline=0}else if(x){wa(ra(s.vars.defaults,{ease:"none"})),s._ease=Yt(x.ease||r.ease||"none");var C,S,D,z=0;if($(x))x.forEach(function(t){return s.to(P,t,">")}),s.duration();else{for(l in u={},x)"ease"===l||"easeEach"===l||hc(l,x[l],u,x.easeEach);for(l in u)for(C=u[l].sort(function(t,e){return t.t-e.t}),o=z=0;o<C.length;o++)(D={ease:(S=C[o]).e,duration:(S.t-(o?C[o-1].t:0))/100*_})[l]=S.v,s.to(P,D,z),z+=D.duration;s.duration()<_&&s.to({},{duration:_-s.duration()})}}_||a.duration(_=s.duration())}else a.timeline=0;return!0!==b||F||(Ut=_assertThisInitialized(a),I.killTweensOf(P),Ut=0),La(A,_assertThisInitialized(a),i),r.reversed&&a.reverse(),r.paused&&a.paused(!0),(g||!_&&!x&&a._start===ja(A._time)&&w(g)&&function _hasNoPausedAncestors(t){return!t||t._ts&&_hasNoPausedAncestors(t.parent)}(_assertThisInitialized(a))&&"nested"!==A.data)&&(a._tTime=-U,a.render(Math.max(0,-m)||0)),k&&Ma(_assertThisInitialized(a),k),a}_inheritsLoose(Tween,E);var e=Tween.prototype;return e.render=function render(t,e,r){var i,n,a,s,o,u,h,l,f,d=this._time,c=this._tDur,p=this._dur,_=t<0,m=c-U<t&&!_?c:t<U?0:t;if(p){if(m!==this._tTime||!t||r||!this._initted&&this._tTime||this._startAt&&this._zTime<0!=_||this._lazy){if(i=m,l=this.timeline,this._repeat){if(s=p+this._rDelay,this._repeat<-1&&_)return this.totalTime(100*s+t,e,r);if(i=ja(m%s),m===c?(a=this._repeat,i=p):(a=~~(o=ja(m/s)))&&a===o?(i=p,a--):p<i&&(i=p),(u=this._yoyo&&1&a)&&(f=this._yEase,i=p-i),o=Tt(this._tTime,s),i===d&&!r&&this._initted&&a===o)return this._tTime=m,this;a!==o&&(l&&this._yEase&&Rb(l,u),this.vars.repeatRefresh&&!u&&!this._lock&&i!==s&&this._initted&&(this._lock=r=1,this.render(ja(s*a),!0).invalidate()._lock=0))}if(!this._initted){if(Na(this,_?t:i,r,e,m))return this._tTime=0,this;if(!(d===this._time||r&&this.vars.repeatRefresh&&a!==o))return this;if(p!==this._dur)return this.render(t,e,r)}if(this._tTime=m,this._time=i,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=h=(f||this._ease)(i/p),this._from&&(this.ratio=h=1-h),!d&&m&&!e&&!o&&(Pt(this,"onStart"),this._tTime!==m))return this;for(n=this._pt;n;)n.r(h,n.d),n=n._next;l&&l.render(t<0?t:l._dur*l._ease(i/this._dur),e,r)||this._startAt&&(this._zTime=t),this._onUpdate&&!e&&(_&&Da(this,t,0,r),Pt(this,"onUpdate")),this._repeat&&a!==o&&this.vars.onRepeat&&!e&&this.parent&&Pt(this,"onRepeat"),m!==this._tDur&&m||this._tTime!==m||(_&&!this._onUpdate&&Da(this,t,0,!0),!t&&p||!(m===this._tDur&&0<this._ts||!m&&this._ts<0)||Aa(this,1),e||_&&!d||!(m||d||u)||(Pt(this,m===c?"onComplete":"onReverseComplete",!0),!this._prom||m<c&&0<this.timeScale()||this._prom()))}}else!function _renderZeroDurationTween(t,e,r,i){var n,a,s,o=t.ratio,u=e<0||!e&&(!t._start&&function _parentPlayheadIsBeforeStart(t){var e=t.parent;return e&&e._ts&&e._initted&&!e._lock&&(e.rawTime()<0||_parentPlayheadIsBeforeStart(e))}(t)&&(t._initted||!bt(t))||(t._ts<0||t._dp._ts<0)&&!bt(t))?0:1,h=t._rDelay,l=0;if(h&&t._repeat&&(l=Mt(0,t._tDur,e),a=Tt(l,h),t._yoyo&&1&a&&(u=1-u),a!==Tt(t._tTime,h)&&(o=1-u,t.vars.repeatRefresh&&t._initted&&t.invalidate())),u!==o||L||i||t._zTime===U||!e&&t._zTime){if(!t._initted&&Na(t,e,i,r,l))return;for(s=t._zTime,t._zTime=e||(r?U:0),r=r||e&&!s,t.ratio=u,t._from&&(u=1-u),t._time=0,t._tTime=l,n=t._pt;n;)n.r(u,n.d),n=n._next;e<0&&Da(t,e,0,!0),t._onUpdate&&!r&&Pt(t,"onUpdate"),l&&t._repeat&&!r&&t.parent&&Pt(t,"onRepeat"),(e>=t._tDur||e<0)&&t.ratio===u&&(u&&Aa(t,1),r||L||(Pt(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(t){return t&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),E.prototype.invalidate.call(this,t)},e.resetTo=function resetTo(t,e,r,i,n){c||Rt.wake(),this._ts||this.play();var a,s=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Wt(this,s),a=this._ease(s/this._dur),function _updatePropTweens(t,e,r,i,n,a,s,o){var u,h,l,f,d=(t._pt&&t._ptCache||(t._ptCache={}))[e];if(!d)for(d=t._ptCache[e]=[],l=t._ptLookup,f=t._targets.length;f--;){if((u=l[f][e])&&u.d&&u.d._pt)for(u=u.d._pt;u&&u.p!==e&&u.fp!==e;)u=u._next;if(!u)return qt=1,t.vars[e]="+=0",Wt(t,s),qt=0,o?R(e+" not eligible for reset"):1;d.push(u)}for(f=d.length;f--;)(u=(h=d[f])._pt||h).s=!i&&0!==i||n?u.s+(i||0)+a*u.c:i,u.c=r-u.s,h.e&&(h.e=ia(r)+Za(h.e)),h.b&&(h.b=u.s+Za(h.b))}(this,t,e,r,i,a,s,n)?this.resetTo(t,e,r,i,1):(Ja(this,0),this.parent||ya(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?ub(this):this.scrollTrigger&&this.scrollTrigger.kill(!!L),this;if(this.timeline){var i=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Ut&&!0!==Ut.vars.overwrite)._first||ub(this),this.parent&&i!==this.timeline.totalDuration()&&Sa(this,this._dur*this.timeline._tDur/i,0,1),this}var n,a,s,o,u,h,l,f=this._targets,d=t?Ot(t):f,c=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,d))return"all"===e&&(this._pt=0),ub(this);for(n=this._op=this._op||[],"all"!==e&&(r(e)&&(u={},ha(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?fa(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=yt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~d.indexOf(f[l]))for(u in a=c[l],"all"===e?(n[l]=e,o=a,s={}):(s=n[l]=n[l]||{},o=e),o)(h=a&&a[u])&&("kill"in h.d&&!0!==h.d.kill(u)||za(this,h,"_pt"),delete a[u]),"all"!==s&&(s[u]=1);return this._initted&&!this._pt&&p&&ub(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Wa(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Wa(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return I.killTweensOf(t,e,r)},Tween}(Nt);ra(Jt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ha("staggerTo,staggerFrom,staggerFromTo",function(r){Jt[r]=function(){var t=new Qt,e=kt.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function pc(t,e,r){return t.setAttribute(e,r)}function xc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var $t=function _setterPlain(t,e,r){return t[e]=r},te=function _setterFunc(t,e,r){return t[e](r)},re=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},ie=function _getSetter(t,e){return s(t[e])?te:u(t[e])&&t.setAttribute?pc:$t},ne=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},se=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},oe=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},ue=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},he=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},de=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?za(this,i,"_pt"):i.dep||(e=1),i=r;return!e},_e=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},ge=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=xc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||ne,this.d=s||this,this.set=o||$t,this.pr=u||0,(this._next=t)&&(t._prev=this)}ha(vt+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",function(t){return ft[t]=1}),ot.TweenMax=ot.TweenLite=Jt,ot.TimelineLite=ot.TimelineMax=Qt,I=new Qt({sortChildren:!1,defaults:Z,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),X.stringFilter=Gb;function Fc(t){return(be[t]||Me).map(function(t){return t()})}function Gc(){var t=Date.now(),o=[];2<t-Oe&&(Fc("matchMediaInit"),Te.forEach(function(t){var e,r,i,n,a=t.queries,s=t.conditions;for(r in a)(e=h.matchMedia(a[r]).matches)&&(i=1),e!==s[r]&&(s[r]=e,n=1);n&&(t.revert(),i&&o.push(t))}),Fc("matchMediaRevert"),o.forEach(function(e){return e.onMatch(e,function(t){return e.add(null,t)})}),Oe=t,Fc("matchMedia"))}var ve,Te=[],be={},Me=[],Oe=0,Ae=0,Pe=((ve=Context.prototype).add=function add(t,i,n){function Iw(){var t,e=l,r=a.selector;return e&&e!==a&&e.data.push(a),n&&(a.selector=db(n)),l=a,t=i.apply(a,arguments),s(t)&&a._r.push(t),l=e,a.selector=r,a.isReverted=!1,t}s(t)&&(n=i,i=t,t=s);var a=this;return a.last=Iw,t===s?Iw(a,function(t){return a.add(null,t)}):t?a[t]=Iw:Iw},ve.ignore=function ignore(t){var e=l;l=null,t(this),l=e},ve.getTweens=function getTweens(){var e=[];return this.data.forEach(function(t){return t instanceof Context?e.push.apply(e,t.getTweens()):t instanceof Jt&&!(t.parent&&"nested"===t.parent.data)&&e.push(t)}),e},ve.clear=function clear(){this._r.length=this.data.length=0},ve.kill=function kill(i,t){var n=this;if(i?function(){for(var t,e=n.getTweens(),r=n.data.length;r--;)"isFlip"===(t=n.data[r]).data&&(t.revert(),t.getChildren(!0,!0,!1).forEach(function(t){return e.splice(e.indexOf(t),1)}));for(e.map(function(t){return{g:t._dur||t._delay||t._sat&&!t._sat.vars.immediateRender?t.globalTime(0):-1/0,t:t}}).sort(function(t,e){return e.g-t.g||-1/0}).forEach(function(t){return t.t.revert(i)}),r=n.data.length;r--;)(t=n.data[r])instanceof Qt?"nested"!==t.data&&(t.scrollTrigger&&t.scrollTrigger.revert(),t.kill()):t instanceof Jt||!t.revert||t.revert(i);n._r.forEach(function(t){return t(i,n)}),n.isReverted=!0}():this.data.forEach(function(t){return t.kill&&t.kill()}),this.clear(),t)for(var e=Te.length;e--;)Te[e].id===this.id&&Te.splice(e,1)},ve.revert=function revert(t){this.kill(t||{})},Context);function Context(t,e){this.selector=e&&db(e),this.data=[],this._r=[],this.isReverted=!1,this.id=Ae++,t&&this.add(t)}var Ce,Se=((Ce=MatchMedia.prototype).add=function add(t,e,r){v(t)||(t={matches:t});var i,n,a,s=new Pe(0,r||this.scope),o=s.conditions={};for(n in l&&!s.selector&&(s.selector=l.selector),this.contexts.push(s),e=s.add("onMatch",e),s.queries=t)"all"===n?a=1:(i=h.matchMedia(t[n]))&&(Te.indexOf(s)<0&&Te.push(s),(o[n]=i.matches)&&(a=1),i.addListener?i.addListener(Gc):i.addEventListener("change",Gc));return a&&e(s,function(t){return s.add(null,t)}),this},Ce.revert=function revert(t){this.kill(t||{})},Ce.kill=function kill(e){this.contexts.forEach(function(t){return t.kill(e,!0)})},MatchMedia);function MatchMedia(t){this.contexts=[],this.scope=t,l&&l.data.push(this)}var De={registerPlugin:function registerPlugin(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];e.forEach(function(t){return xb(t)})},timeline:function timeline(t){return new Qt(t)},getTweensOf:function getTweensOf(t,e){return I.getTweensOf(t,e)},getProperty:function getProperty(i,t,e,n){r(i)&&(i=Ot(i)[0]);var a=fa(i||{}).get,s=e?qa:pa;return"native"===e&&(e=""),i?t?s((pt[t]&&pt[t].get||a)(i,t,e,n)):function(t,e,r){return s((pt[t]&&pt[t].get||a)(i,t,e,r))}:i},quickSetter:function quickSetter(r,e,i){if(1<(r=Ot(r)).length){var n=r.map(function(t){return ze.quickSetter(t,e,i)}),a=n.length;return function(t){for(var e=a;e--;)n[e](t)}}r=r[0]||{};var s=pt[e],o=fa(r),u=o.harness&&(o.harness.aliases||{})[e]||e,h=s?function(t){var e=new s;d._pt=0,e.init(r,i?t+i:t,d,0,[r]),e.render(1,e),d._pt&&ue(1,d)}:o.set(r,u);return s?h:function(t){return h(r,u,i?t+i:t,o,1)}},quickTo:function quickTo(t,i,e){function ay(t,e,r){return n.resetTo(i,t,e,r)}var r,n=ze.to(t,ra(((r={})[i]="+=0.1",r.paused=!0,r.stagger=0,r),e||{}));return ay.tween=n,ay},isTweening:function isTweening(t){return 0<I.getTweensOf(t,!0).length},defaults:function defaults(t){return t&&t.ease&&(t.ease=Yt(t.ease,Z.ease)),ua(Z,t||{})},config:function config(t){return ua(X,t||{})},registerEffect:function registerEffect(t){var i=t.name,n=t.effect,e=t.plugins,a=t.defaults,r=t.extendTimeline;(e||"").split(",").forEach(function(t){return t&&!pt[t]&&!ot[t]&&R(i+" effect requires "+t+" plugin.")}),_t[i]=function(t,e,r){return n(Ot(t),ra(e||{},a),r)},r&&(Qt.prototype[i]=function(t,e,r){return this.add(_t[i](t,v(e)?e:(r=e)&&{},this),r)})},registerEase:function registerEase(t,e){Lt[t]=Yt(e)},parseEase:function parseEase(t,e){return arguments.length?Yt(t,e):Lt},getById:function getById(t){return I.getById(t)},exportRoot:function exportRoot(t,e){void 0===t&&(t={});var r,i,n=new Qt(t);for(n.smoothChildTiming=w(t.smoothChildTiming),I.remove(n),n._dp=0,n._time=n._tTime=I._time,r=I._first;r;)i=r._next,!e&&!r._dur&&r instanceof Jt&&r.vars.onComplete===r._targets[0]||La(n,r,r._start-r._delay),r=i;return La(I,n,0),n},context:function context(t,e){return t?new Pe(t,e):l},matchMedia:function matchMedia(t){return new Se(t)},matchMediaRefresh:function matchMediaRefresh(){return Te.forEach(function(t){var e,r,i=t.conditions;for(r in i)i[r]&&(i[r]=!1,e=1);e&&t.revert()})||Gc()},addEventListener:function addEventListener(t,e){var r=be[t]||(be[t]=[]);~r.indexOf(e)||r.push(e)},removeEventListener:function removeEventListener(t,e){var r=be[t],i=r&&r.indexOf(e);0<=i&&r.splice(i,1)},utils:{wrap:function wrap(e,t,r){var i=t-e;return $(e)?mb(e,wrap(0,e.length),t):Xa(r,function(t){return(i+(t-e)%i)%i+e})},wrapYoyo:function wrapYoyo(e,t,r){var i=t-e,n=2*i;return $(e)?mb(e,wrapYoyo(0,e.length-1),t):Xa(r,function(t){return e+(i<(t=(n+(t-e)%n)%n||0)?n-t:t)})},distribute:fb,random:ib,snap:hb,normalize:function normalize(t,e,r){return At(t,e,0,1,r)},getUnit:Za,clamp:function clamp(e,r,t){return Xa(t,function(t){return Mt(e,r,t)})},splitColor:Bb,toArray:Ot,selector:db,mapRange:At,pipe:function pipe(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(t){return e.reduce(function(t,e){return e(t)},t)}},unitize:function unitize(e,r){return function(t){return e(parseFloat(t))+(r||Za(t))}},interpolate:function interpolate(e,i,t,n){var a=isNaN(e+i)?0:function(t){return(1-t)*e+t*i};if(!a){var s,o,u,h,l,f=r(e),d={};if(!0===t&&(n=1)&&(t=null),f)e={p:e},i={p:i};else if($(e)&&!$(i)){for(u=[],h=e.length,l=h-2,o=1;o<h;o++)u.push(interpolate(e[o-1],e[o]));h--,a=function func(t){t*=h;var e=Math.min(l,~~t);return u[e](t-e)},t=i}else n||(e=yt($(e)?[]:{},e));if(!u){for(s in i)Vt.call(d,e,s,"get",i[s]);a=function func(t){return ue(t,d)||(f?e.p:e)}}}return Xa(t,a)},shuffle:eb},install:P,effects:_t,ticker:Rt,updateRoot:Qt.updateRoot,plugins:pt,globalTimeline:I,core:{PropTween:ge,globals:S,Tween:Jt,Timeline:Qt,Animation:Nt,getCache:fa,_removeLinkedListItem:za,reverting:function reverting(){return L},context:function context(t){return t&&l&&(l.data.push(t),t._ctx=l),l},suppressOverwrites:function suppressOverwrites(t){return F=t}}};ha("to,from,fromTo,delayedCall,set,killTweensOf",function(t){return De[t]=Jt[t]}),Rt.add(Qt.updateRoot),d=De.to({},{duration:0});function Kc(t,e){for(var r=t._pt;r&&r.p!==e&&r.op!==e&&r.fp!==e;)r=r._next;return r}function Mc(t,a){return{name:t,headless:1,rawVars:1,init:function init(t,n,e){e._onInit=function(t){var e,i;if(r(n)&&(e={},ha(n,function(t){return e[t]=1}),n=e),a){for(i in e={},n)e[i]=a(n[i]);n=e}!function _addModifiers(t,e){var r,i,n,a=t._targets;for(r in e)for(i=a.length;i--;)(n=(n=t._ptLookup[i][r])&&n.d)&&(n._pt&&(n=Kc(n,r)),n&&n.modifier&&n.modifier(e[r],t,a[i],r))}(t,n)}}}}var ze=De.registerPlugin({name:"attr",init:function init(t,e,r,i,n){var a,s,o;for(a in this.tween=r,e)o=t.getAttribute(a)||"",(s=this.add(t,"setAttribute",(o||0)+"",e[a],i,n,0,0,a)).op=a,s.b=o,this._props.push(a)},render:function render(t,e){for(var r=e._pt;r;)L?r.set(r.t,r.p,r.b,r):r.r(t,r.d),r=r._next}},{name:"endArray",headless:1,init:function init(t,e){for(var r=e.length;r--;)this.add(t,r,t[r]||0,e[r],0,0,0,0,0,1)}},Mc("roundProps",gb),Mc("modifiers"),Mc("snap",hb))||De;Jt.version=Qt.version=ze.version="3.13.0",o=1,x()&&Ft();function wd(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)}function xd(t,e){return e.set(e.t,e.p,1===t?e.e:Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)}function yd(t,e){return e.set(e.t,e.p,t?Math.round(1e4*(e.s+e.c*t))/1e4+e.u:e.b,e)}function zd(t,e){var r=e.s+e.c*t;e.set(e.t,e.p,~~(r+(r<0?-.5:.5))+e.u,e)}function Ad(t,e){return e.set(e.t,e.p,t?e.e:e.b,e)}function Bd(t,e){return e.set(e.t,e.p,1!==t?e.b:e.e,e)}function Cd(t,e,r){return t.style[e]=r}function Dd(t,e,r){return t.style.setProperty(e,r)}function Ed(t,e,r){return t._gsap[e]=r}function Fd(t,e,r){return t._gsap.scaleX=t._gsap.scaleY=r}function Gd(t,e,r,i,n){var a=t._gsap;a.scaleX=a.scaleY=r,a.renderTransform(n,a)}function Hd(t,e,r,i,n){var a=t._gsap;a[e]=r,a.renderTransform(n,a)}function Kd(t,e){var r=this,i=this.target,n=i.style,a=i._gsap;if(t in sr&&n){if(this.tfm=this.tfm||{},"transform"===t)return cr.transform.split(",").forEach(function(t){return Kd.call(r,t,e)});if(~(t=cr[t]||t).indexOf(",")?t.split(",").forEach(function(t){return r.tfm[t]=Tr(i,t)}):this.tfm[t]=a.x?a[t]:Tr(i,t),t===_r&&(this.tfm.zOrigin=a.zOrigin),0<=this.props.indexOf(pr))return;a.svg&&(this.svgo=i.getAttribute("data-svg-origin"),this.props.push(_r,e,"")),t=pr}(n||e)&&this.props.push(t,e,n[t])}function Ld(t){t.translate&&(t.removeProperty("translate"),t.removeProperty("scale"),t.removeProperty("rotate"))}function Md(){var t,e,r=this.props,i=this.target,n=i.style,a=i._gsap;for(t=0;t<r.length;t+=3)r[t+1]?2===r[t+1]?i[r[t]](r[t+2]):i[r[t]]=r[t+2]:r[t+2]?n[r[t]]=r[t+2]:n.removeProperty("--"===r[t].substr(0,2)?r[t]:r[t].replace(lr,"-$1").toLowerCase());if(this.tfm){for(e in this.tfm)a[e]=this.tfm[e];a.svg&&(a.renderTransform(),i.setAttribute("data-svg-origin",this.svgo||"")),(t=Ye())&&t.isStart||n[pr]||(Ld(n),a.zOrigin&&n[_r]&&(n[_r]+=" "+a.zOrigin+"px",a.zOrigin=0,a.renderTransform()),a.uncache=1)}}function Nd(t,e){var r={target:t,props:[],revert:Md,save:Kd};return t._gsap||ze.core.getCache(t),e&&t.style&&t.nodeType&&e.split(",").forEach(function(t){return r.save(t)}),r}function Pd(t,e){var r=Re.createElementNS?Re.createElementNS((e||"http://www.w3.org/1999/xhtml").replace(/^https/,"http"),t):Re.createElement(t);return r&&r.style?r:Re.createElement(t)}function Qd(t,e,r){var i=getComputedStyle(t);return i[e]||i.getPropertyValue(e.replace(lr,"-$1").toLowerCase())||i.getPropertyValue(e)||!r&&Qd(t,gr(e)||e,1)||""}function Td(){(function _windowExists(){return"undefined"!=typeof window})()&&window.document&&(Ee=window,Re=Ee.document,Fe=Re.documentElement,Ie=Pd("div")||{style:{}},Pd("div"),pr=gr(pr),_r=pr+"Origin",Ie.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",Xe=!!gr("perspective"),Ye=ze.core.reverting,Le=1)}function Ud(t){var e,r=t.ownerSVGElement,i=Pd("svg",r&&r.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),n=t.cloneNode(!0);n.style.display="block",i.appendChild(n),Fe.appendChild(i);try{e=n.getBBox()}catch(t){}return i.removeChild(n),Fe.removeChild(i),e}function Vd(t,e){for(var r=e.length;r--;)if(t.hasAttribute(e[r]))return t.getAttribute(e[r])}function Wd(e){var r,i;try{r=e.getBBox()}catch(t){r=Ud(e),i=1}return r&&(r.width||r.height)||i||(r=Ud(e)),!r||r.width||r.x||r.y?r:{x:+Vd(e,["x","cx","x1"])||0,y:+Vd(e,["y","cy","y1"])||0,width:0,height:0}}function Xd(t){return!(!t.getCTM||t.parentNode&&!t.ownerSVGElement||!Wd(t))}function Yd(t,e){if(e){var r,i=t.style;e in sr&&e!==_r&&(e=pr),i.removeProperty?("ms"!==(r=e.substr(0,2))&&"webkit"!==e.substr(0,6)||(e="-"+e),i.removeProperty("--"===r?e:e.replace(lr,"-$1").toLowerCase())):i.removeAttribute(e)}}function Zd(t,e,r,i,n,a){var s=new ge(t._pt,e,r,0,1,a?Bd:Ad);return(t._pt=s).b=i,s.e=n,t._props.push(r),s}function ae(t,e,r,i){var n,a,s,o,u=parseFloat(r)||0,h=(r+"").trim().substr((u+"").length)||"px",l=Ie.style,f=fr.test(e),d="svg"===t.tagName.toLowerCase(),c=(d?"client":"offset")+(f?"Width":"Height"),p="px"===i,_="%"===i;if(i===h||!u||vr[i]||vr[h])return u;if("px"===h||p||(u=ae(t,e,r,"px")),o=t.getCTM&&Xd(t),(_||"%"===h)&&(sr[e]||~e.indexOf("adius")))return n=o?t.getBBox()[f?"width":"height"]:t[c],ia(_?u/n*100:u/100*n);if(l[f?"width":"height"]=100+(p?h:i),a="rem"!==i&&~e.indexOf("adius")||"em"===i&&t.appendChild&&!d?t:t.parentNode,o&&(a=(t.ownerSVGElement||{}).parentNode),a&&a!==Re&&a.appendChild||(a=Re.body),(s=a._gsap)&&_&&s.width&&f&&s.time===Rt.time&&!s.uncache)return ia(u/s.width*100);if(!_||"height"!==e&&"width"!==e)!_&&"%"!==h||yr[Qd(a,"display")]||(l.position=Qd(t,"position")),a===t&&(l.position="static"),a.appendChild(Ie),n=Ie[c],a.removeChild(Ie),l.position="absolute";else{var m=t.style[e];t.style[e]=100+i,n=t[c],m?t.style[e]=m:Yd(t,e)}return f&&_&&((s=fa(a)).time=Rt.time,s.width=a[c]),ia(p?n*u/100:n&&u?100/n*u:0)}function ce(t,e,r,i){if(!r||"none"===r){var n=gr(e,t,1),a=n&&Qd(t,n,1);a&&a!==r?(e=n,r=a):"borderColor"===e&&(r=Qd(t,"borderTopColor"))}var s,o,u,h,l,f,d,c,p,_,m,g=new ge(this._pt,t.style,e,0,1,oe),v=0,y=0;if(g.b=r,g.e=i,r+="","var(--"===(i+="").substring(0,6)&&(i=Qd(t,i.substring(4,i.indexOf(")")))),"auto"===i&&(f=t.style[e],t.style[e]=i,i=Qd(t,e)||i,f?t.style[e]=f:Yd(t,e)),Gb(s=[r,i]),i=s[1],u=(r=s[0]).match(rt)||[],(i.match(rt)||[]).length){for(;o=rt.exec(i);)d=o[0],p=i.substring(v,o.index),l?l=(l+1)%5:"rgba("!==p.substr(-5)&&"hsla("!==p.substr(-5)||(l=1),d!==(f=u[y++]||"")&&(h=parseFloat(f)||0,m=f.substr((h+"").length),"="===d.charAt(1)&&(d=ka(h,d)+m),c=parseFloat(d),_=d.substr((c+"").length),v=rt.lastIndex-_.length,_||(_=_||X.units[e]||m,v===i.length&&(i+=_,g.e+=_)),m!==_&&(h=ae(t,e,f,_)||0),g._pt={_next:g._pt,p:p||1===y?p:",",s:h,c:c-h,m:l&&l<4||"zIndex"===e?Math.round:0});g.c=v<i.length?i.substring(v,i.length):""}else g.r="display"===e&&"none"===i?Bd:Ad;return nt.test(i)&&(g.e=0),this._pt=g}function ee(t){var e=t.split(" "),r=e[0],i=e[1]||"50%";return"top"!==r&&"bottom"!==r&&"left"!==i&&"right"!==i||(t=r,r=i,i=t),e[0]=br[r]||r,e[1]=br[i]||i,e.join(" ")}function fe(t,e){if(e.tween&&e.tween._time===e.tween._dur){var r,i,n,a=e.t,s=a.style,o=e.u,u=a._gsap;if("all"===o||!0===o)s.cssText="",i=1;else for(n=(o=o.split(",")).length;-1<--n;)r=o[n],sr[r]&&(i=1,r="transformOrigin"===r?_r:pr),Yd(a,r);i&&(Yd(a,pr),u&&(u.svg&&a.removeAttribute("transform"),s.scale=s.rotate=s.translate="none",kr(a,1),u.uncache=1,Ld(s)))}}function je(t){return"matrix(1, 0, 0, 1, 0, 0)"===t||"none"===t||!t}function ke(t){var e=Qd(t,pr);return je(e)?xr:e.substr(7).match(et).map(ia)}function le(t,e){var r,i,n,a,s=t._gsap||fa(t),o=t.style,u=ke(t);return s.svg&&t.getAttribute("transform")?"1,0,0,1,0,0"===(u=[(n=t.transform.baseVal.consolidate().matrix).a,n.b,n.c,n.d,n.e,n.f]).join(",")?xr:u:(u!==xr||t.offsetParent||t===Fe||s.svg||(n=o.display,o.display="block",(r=t.parentNode)&&(t.offsetParent||t.getBoundingClientRect().width)||(a=1,i=t.nextElementSibling,Fe.appendChild(t)),u=ke(t),n?o.display=n:Yd(t,"display"),a&&(i?r.insertBefore(t,i):r?r.appendChild(t):Fe.removeChild(t))),e&&6<u.length?[u[0],u[1],u[4],u[5],u[12],u[13]]:u)}function me(t,e,r,i,n,a){var s,o,u,h=t._gsap,l=n||le(t,!0),f=h.xOrigin||0,d=h.yOrigin||0,c=h.xOffset||0,p=h.yOffset||0,_=l[0],m=l[1],g=l[2],v=l[3],y=l[4],T=l[5],b=e.split(" "),w=parseFloat(b[0])||0,x=parseFloat(b[1])||0;r?l!==xr&&(o=_*v-m*g)&&(u=w*(-m/o)+x*(_/o)-(_*T-m*y)/o,w=w*(v/o)+x*(-g/o)+(g*T-v*y)/o,x=u):(w=(s=Wd(t)).x+(~b[0].indexOf("%")?w/100*s.width:w),x=s.y+(~(b[1]||b[0]).indexOf("%")?x/100*s.height:x)),i||!1!==i&&h.smooth?(y=w-f,T=x-d,h.xOffset=c+(y*_+T*g)-y,h.yOffset=p+(y*m+T*v)-T):h.xOffset=h.yOffset=0,h.xOrigin=w,h.yOrigin=x,h.smooth=!!i,h.origin=e,h.originIsAbsolute=!!r,t.style[_r]="0px 0px",a&&(Zd(a,h,"xOrigin",f,w),Zd(a,h,"yOrigin",d,x),Zd(a,h,"xOffset",c,h.xOffset),Zd(a,h,"yOffset",p,h.yOffset)),t.setAttribute("data-svg-origin",w+" "+x)}function pe(t,e,r){var i=Za(e);return ia(parseFloat(e)+parseFloat(ae(t,"x",r+"px",i)))+i}function we(t,e,i,n,a){var s,o,u=360,h=r(a),l=parseFloat(a)*(h&&~a.indexOf("rad")?or:1)-n,f=n+l+"deg";return h&&("short"===(s=a.split("_")[1])&&(l%=u)!==l%180&&(l+=l<0?u:-u),"cw"===s&&l<0?l=(l+36e9)%u-~~(l/u)*u:"ccw"===s&&0<l&&(l=(l-36e9)%u-~~(l/u)*u)),t._pt=o=new ge(t._pt,e,i,n,l,xd),o.e=f,o.u="deg",t._props.push(i),o}function xe(t,e){for(var r in e)t[r]=e[r];return t}function ye(t,e,r){var i,n,a,s,o,u,h,l=xe({},r._gsap),f=r.style;for(n in l.svg?(a=r.getAttribute("transform"),r.setAttribute("transform",""),f[pr]=e,i=kr(r,1),Yd(r,pr),r.setAttribute("transform",a)):(a=getComputedStyle(r)[pr],f[pr]=e,i=kr(r,1),f[pr]=a),sr)(a=l[n])!==(s=i[n])&&"perspective,force3D,transformOrigin,svgOrigin".indexOf(n)<0&&(o=Za(a)!==(h=Za(s))?ae(r,n,a,h):parseFloat(a),u=parseFloat(s),t._pt=new ge(t._pt,i,n,o,u-o,wd),t._pt.u=h||0,t._props.push(n));xe(i,l)}var Ee,Re,Fe,Le,Ie,Be,Ye,Xe,Ze=Lt.Power0,Ne=Lt.Power1,Qe=Lt.Power2,Ue=Lt.Power3,qe=Lt.Power4,Ve=Lt.Linear,We=Lt.Quad,Ge=Lt.Cubic,He=Lt.Quart,Ke=Lt.Quint,Je=Lt.Strong,$e=Lt.Elastic,tr=Lt.Back,er=Lt.SteppedEase,rr=Lt.Bounce,ir=Lt.Sine,nr=Lt.Expo,ar=Lt.Circ,sr={},or=180/Math.PI,ur=Math.PI/180,hr=Math.atan2,lr=/([A-Z])/g,fr=/(left|right|width|margin|padding|x)/i,dr=/[\s,\(]\S/,cr={autoAlpha:"opacity,visibility",scale:"scaleX,scaleY",alpha:"opacity"},pr="transform",_r=pr+"Origin",mr="O,Moz,ms,Ms,Webkit".split(","),gr=function _checkPropPrefix(t,e,r){var i=(e||Ie).style,n=5;if(t in i&&!r)return t;for(t=t.charAt(0).toUpperCase()+t.substr(1);n--&&!(mr[n]+t in i););return n<0?null:(3===n?"ms":0<=n?mr[n]:"")+t},vr={deg:1,rad:1,turn:1},yr={grid:1,flex:1},Tr=function _get(t,e,r,i){var n;return Le||Td(),e in cr&&"transform"!==e&&~(e=cr[e]).indexOf(",")&&(e=e.split(",")[0]),sr[e]&&"transform"!==e?(n=kr(t,i),n="transformOrigin"!==e?n[e]:n.svg?n.origin:Or(Qd(t,_r))+" "+n.zOrigin+"px"):(n=t.style[e])&&"auto"!==n&&!i&&!~(n+"").indexOf("calc(")||(n=wr[e]&&wr[e](t,e,r)||Qd(t,e)||ga(t,e)||("opacity"===e?1:0)),r&&!~(n+"").trim().indexOf(" ")?ae(t,e,n,r)+r:n},br={top:"0%",bottom:"100%",left:"0%",right:"100%",center:"50%"},wr={clearProps:function clearProps(t,e,r,i,n){if("isFromStart"!==n.data){var a=t._pt=new ge(t._pt,e,r,0,0,fe);return a.u=i,a.pr=-10,a.tween=n,t._props.push(r),1}}},xr=[1,0,0,1,0,0],Mr={},kr=function _parseTransform(t,e){var r=t._gsap||new Zt(t);if("x"in r&&!e&&!r.uncache)return r;var i,n,a,s,o,u,h,l,f,d,c,p,_,m,g,v,y,T,b,w,x,M,k,O,A,P,C,S,D,z,E,R,F=t.style,L=r.scaleX<0,I="deg",B=getComputedStyle(t),j=Qd(t,_r)||"0";return i=n=a=u=h=l=f=d=c=0,s=o=1,r.svg=!(!t.getCTM||!Xd(t)),B.translate&&("none"===B.translate&&"none"===B.scale&&"none"===B.rotate||(F[pr]=("none"!==B.translate?"translate3d("+(B.translate+" 0 0").split(" ").slice(0,3).join(", ")+") ":"")+("none"!==B.rotate?"rotate("+B.rotate+") ":"")+("none"!==B.scale?"scale("+B.scale.split(" ").join(",")+") ":"")+("none"!==B[pr]?B[pr]:"")),F.scale=F.rotate=F.translate="none"),m=le(t,r.svg),r.svg&&(O=r.uncache?(A=t.getBBox(),j=r.xOrigin-A.x+"px "+(r.yOrigin-A.y)+"px",""):!e&&t.getAttribute("data-svg-origin"),me(t,O||j,!!O||r.originIsAbsolute,!1!==r.smooth,m)),p=r.xOrigin||0,_=r.yOrigin||0,m!==xr&&(T=m[0],b=m[1],w=m[2],x=m[3],i=M=m[4],n=k=m[5],6===m.length?(s=Math.sqrt(T*T+b*b),o=Math.sqrt(x*x+w*w),u=T||b?hr(b,T)*or:0,(f=w||x?hr(w,x)*or+u:0)&&(o*=Math.abs(Math.cos(f*ur))),r.svg&&(i-=p-(p*T+_*w),n-=_-(p*b+_*x))):(R=m[6],z=m[7],C=m[8],S=m[9],D=m[10],E=m[11],i=m[12],n=m[13],a=m[14],h=(g=hr(R,D))*or,g&&(O=M*(v=Math.cos(-g))+C*(y=Math.sin(-g)),A=k*v+S*y,P=R*v+D*y,C=M*-y+C*v,S=k*-y+S*v,D=R*-y+D*v,E=z*-y+E*v,M=O,k=A,R=P),l=(g=hr(-w,D))*or,g&&(v=Math.cos(-g),E=x*(y=Math.sin(-g))+E*v,T=O=T*v-C*y,b=A=b*v-S*y,w=P=w*v-D*y),u=(g=hr(b,T))*or,g&&(O=T*(v=Math.cos(g))+b*(y=Math.sin(g)),A=M*v+k*y,b=b*v-T*y,k=k*v-M*y,T=O,M=A),h&&359.9<Math.abs(h)+Math.abs(u)&&(h=u=0,l=180-l),s=ia(Math.sqrt(T*T+b*b+w*w)),o=ia(Math.sqrt(k*k+R*R)),g=hr(M,k),f=2e-4<Math.abs(g)?g*or:0,c=E?1/(E<0?-E:E):0),r.svg&&(O=t.getAttribute("transform"),r.forceCSS=t.setAttribute("transform","")||!je(Qd(t,pr)),O&&t.setAttribute("transform",O))),90<Math.abs(f)&&Math.abs(f)<270&&(L?(s*=-1,f+=u<=0?180:-180,u+=u<=0?180:-180):(o*=-1,f+=f<=0?180:-180)),e=e||r.uncache,r.x=i-((r.xPercent=i&&(!e&&r.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-i)?-50:0)))?t.offsetWidth*r.xPercent/100:0)+"px",r.y=n-((r.yPercent=n&&(!e&&r.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-n)?-50:0)))?t.offsetHeight*r.yPercent/100:0)+"px",r.z=a+"px",r.scaleX=ia(s),r.scaleY=ia(o),r.rotation=ia(u)+I,r.rotationX=ia(h)+I,r.rotationY=ia(l)+I,r.skewX=f+I,r.skewY=d+I,r.transformPerspective=c+"px",(r.zOrigin=parseFloat(j.split(" ")[2])||!e&&r.zOrigin||0)&&(F[_r]=Or(j)),r.xOffset=r.yOffset=0,r.force3D=X.force3D,r.renderTransform=r.svg?zr:Xe?Dr:Ar,r.uncache=0,r},Or=function _firstTwoOnly(t){return(t=t.split(" "))[0]+" "+t[1]},Ar=function _renderNon3DTransforms(t,e){e.z="0px",e.rotationY=e.rotationX="0deg",e.force3D=0,Dr(t,e)},Pr="0deg",Cr="0px",Sr=") ",Dr=function _renderCSSTransforms(t,e){var r=e||this,i=r.xPercent,n=r.yPercent,a=r.x,s=r.y,o=r.z,u=r.rotation,h=r.rotationY,l=r.rotationX,f=r.skewX,d=r.skewY,c=r.scaleX,p=r.scaleY,_=r.transformPerspective,m=r.force3D,g=r.target,v=r.zOrigin,y="",T="auto"===m&&t&&1!==t||!0===m;if(v&&(l!==Pr||h!==Pr)){var b,w=parseFloat(h)*ur,x=Math.sin(w),M=Math.cos(w);w=parseFloat(l)*ur,b=Math.cos(w),a=pe(g,a,x*b*-v),s=pe(g,s,-Math.sin(w)*-v),o=pe(g,o,M*b*-v+v)}_!==Cr&&(y+="perspective("+_+Sr),(i||n)&&(y+="translate("+i+"%, "+n+"%) "),!T&&a===Cr&&s===Cr&&o===Cr||(y+=o!==Cr||T?"translate3d("+a+", "+s+", "+o+") ":"translate("+a+", "+s+Sr),u!==Pr&&(y+="rotate("+u+Sr),h!==Pr&&(y+="rotateY("+h+Sr),l!==Pr&&(y+="rotateX("+l+Sr),f===Pr&&d===Pr||(y+="skew("+f+", "+d+Sr),1===c&&1===p||(y+="scale("+c+", "+p+Sr),g.style[pr]=y||"translate(0, 0)"},zr=function _renderSVGTransforms(t,e){var r,i,n,a,s,o=e||this,u=o.xPercent,h=o.yPercent,l=o.x,f=o.y,d=o.rotation,c=o.skewX,p=o.skewY,_=o.scaleX,m=o.scaleY,g=o.target,v=o.xOrigin,y=o.yOrigin,T=o.xOffset,b=o.yOffset,w=o.forceCSS,x=parseFloat(l),M=parseFloat(f);d=parseFloat(d),c=parseFloat(c),(p=parseFloat(p))&&(c+=p=parseFloat(p),d+=p),d||c?(d*=ur,c*=ur,r=Math.cos(d)*_,i=Math.sin(d)*_,n=Math.sin(d-c)*-m,a=Math.cos(d-c)*m,c&&(p*=ur,s=Math.tan(c-p),n*=s=Math.sqrt(1+s*s),a*=s,p&&(s=Math.tan(p),r*=s=Math.sqrt(1+s*s),i*=s)),r=ia(r),i=ia(i),n=ia(n),a=ia(a)):(r=_,a=m,i=n=0),(x&&!~(l+"").indexOf("px")||M&&!~(f+"").indexOf("px"))&&(x=ae(g,"x",l,"px"),M=ae(g,"y",f,"px")),(v||y||T||b)&&(x=ia(x+v-(v*r+y*n)+T),M=ia(M+y-(v*i+y*a)+b)),(u||h)&&(s=g.getBBox(),x=ia(x+u/100*s.width),M=ia(M+h/100*s.height)),s="matrix("+r+","+i+","+n+","+a+","+x+","+M+")",g.setAttribute("transform",s),w&&(g.style[pr]=s)};ha("padding,margin,Width,Radius",function(e,r){var t="Right",i="Bottom",n="Left",o=(r<3?["Top",t,i,n]:["Top"+n,"Top"+t,i+t,i+n]).map(function(t){return r<2?e+t:"border"+t+e});wr[1<r?"border"+e:e]=function(e,t,r,i,n){var a,s;if(arguments.length<4)return a=o.map(function(t){return Tr(e,t,r)}),5===(s=a.join(" ")).split(a[0]).length?a[0]:s;a=(i+"").split(" "),s={},o.forEach(function(t,e){return s[t]=a[e]=a[e]||a[(e-1)/2|0]}),e.init(t,s,n)}});var Er,Rr,Fr,Lr={name:"css",register:Td,targetTest:function targetTest(t){return t.style&&t.nodeType},init:function init(t,e,i,n,a){var s,o,u,h,l,f,d,c,p,_,m,g,v,y,T,b,w=this._props,x=t.style,M=i.vars.startAt;for(d in Le||Td(),this.styles=this.styles||Nd(t),b=this.styles.props,this.tween=i,e)if("autoRound"!==d&&(o=e[d],!pt[d]||!bc(d,e,i,n,t,a)))if(l=typeof o,f=wr[d],"function"===l&&(l=typeof(o=o.call(i,n,t,a))),"string"===l&&~o.indexOf("random(")&&(o=pb(o)),f)f(this,t,d,o,i)&&(T=1);else if("--"===d.substr(0,2))s=(getComputedStyle(t).getPropertyValue(d)+"").trim(),o+="",zt.lastIndex=0,zt.test(s)||(c=Za(s),p=Za(o)),p?c!==p&&(s=ae(t,d,s,p)+p):c&&(o+=c),this.add(x,"setProperty",s,o,n,a,0,0,d),w.push(d),b.push(d,0,x[d]);else if("undefined"!==l){if(M&&d in M?(s="function"==typeof M[d]?M[d].call(i,n,t,a):M[d],r(s)&&~s.indexOf("random(")&&(s=pb(s)),Za(s+"")||"auto"===s||(s+=X.units[d]||Za(Tr(t,d))||""),"="===(s+"").charAt(1)&&(s=Tr(t,d))):s=Tr(t,d),h=parseFloat(s),(_="string"===l&&"="===o.charAt(1)&&o.substr(0,2))&&(o=o.substr(2)),u=parseFloat(o),d in cr&&("autoAlpha"===d&&(1===h&&"hidden"===Tr(t,"visibility")&&u&&(h=0),b.push("visibility",0,x.visibility),Zd(this,x,"visibility",h?"inherit":"hidden",u?"inherit":"hidden",!u)),"scale"!==d&&"transform"!==d&&~(d=cr[d]).indexOf(",")&&(d=d.split(",")[0])),m=d in sr)if(this.styles.save(d),"string"===l&&"var(--"===o.substring(0,6)&&(o=Qd(t,o.substring(4,o.indexOf(")"))),u=parseFloat(o)),g||((v=t._gsap).renderTransform&&!e.parseTransform||kr(t,e.parseTransform),y=!1!==e.smoothOrigin&&v.smooth,(g=this._pt=new ge(this._pt,x,pr,0,1,v.renderTransform,v,0,-1)).dep=1),"scale"===d)this._pt=new ge(this._pt,v,"scaleY",v.scaleY,(_?ka(v.scaleY,_+u):u)-v.scaleY||0,wd),this._pt.u=0,w.push("scaleY",d),d+="X";else{if("transformOrigin"===d){b.push(_r,0,x[_r]),o=ee(o),v.svg?me(t,o,0,y,0,this):((p=parseFloat(o.split(" ")[2])||0)!==v.zOrigin&&Zd(this,v,"zOrigin",v.zOrigin,p),Zd(this,x,d,Or(s),Or(o)));continue}if("svgOrigin"===d){me(t,o,1,y,0,this);continue}if(d in Mr){we(this,v,d,h,_?ka(h,_+o):o);continue}if("smoothOrigin"===d){Zd(this,v,"smooth",v.smooth,o);continue}if("force3D"===d){v[d]=o;continue}if("transform"===d){ye(this,o,t);continue}}else d in x||(d=gr(d)||d);if(m||(u||0===u)&&(h||0===h)&&!dr.test(o)&&d in x)u=u||0,(c=(s+"").substr((h+"").length))!==(p=Za(o)||(d in X.units?X.units[d]:c))&&(h=ae(t,d,s,p)),this._pt=new ge(this._pt,m?v:x,d,h,(_?ka(h,_+u):u)-h,m||"px"!==p&&"zIndex"!==d||!1===e.autoRound?wd:zd),this._pt.u=p||0,c!==p&&"%"!==p&&(this._pt.b=s,this._pt.r=yd);else if(d in x)ce.call(this,t,d,s,_?_+o:o);else if(d in t)this.add(t,d,s||t[d],_?_+o:o,n,a);else if("parseTransform"!==d){Q(d,o);continue}m||(d in x?b.push(d,0,x[d]):"function"==typeof t[d]?b.push(d,2,t[d]()):b.push(d,1,s||t[d])),w.push(d)}T&&_e(this)},render:function render(t,e){if(e.tween._time||!Ye())for(var r=e._pt;r;)r.r(t,r.d),r=r._next;else e.styles.revert()},get:Tr,aliases:cr,getSetter:function getSetter(t,e,r){var i=cr[e];return i&&i.indexOf(",")<0&&(e=i),e in sr&&e!==_r&&(t._gsap.x||Tr(t,"x"))?r&&Be===r?"scale"===e?Fd:Ed:(Be=r||{})&&("scale"===e?Gd:Hd):t.style&&!u(t.style[e])?Cd:~e.indexOf("-")?Dd:ie(t,e)},core:{_removeProperty:Yd,_getMatrix:le}};ze.utils.checkPrefix=gr,ze.core.getStyleSaver=Nd,Fr=ha((Er="x,y,z,scale,scaleX,scaleY,xPercent,yPercent")+","+(Rr="rotation,rotationX,rotationY,skewX,skewY")+",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective",function(t){sr[t]=1}),ha(Rr,function(t){X.units[t]="deg",Mr[t]=1}),cr[Fr[13]]=Er+","+Rr,ha("0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY",function(t){var e=t.split(":");cr[e[1]]=Fr[e[0]]}),ha("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",function(t){X.units[t]="px"}),ze.registerPlugin(Lr);var Ir=ze.registerPlugin(Lr)||ze,Br=Ir.core.Tween;e.Back=tr,e.Bounce=rr,e.CSSPlugin=Lr,e.Circ=ar,e.Cubic=Ge,e.Elastic=$e,e.Expo=nr,e.Linear=Ve,e.Power0=Ze,e.Power1=Ne,e.Power2=Qe,e.Power3=Ue,e.Power4=qe,e.Quad=We,e.Quart=He,e.Quint=Ke,e.Sine=ir,e.SteppedEase=er,e.Strong=Je,e.TimelineLite=Qt,e.TimelineMax=Qt,e.TweenLite=Jt,e.TweenMax=Br,e.default=Ir,e.gsap=Ir;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
|
|
11
|
+
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// MotionDesk Studio — local motion-video studio + command line.
|
|
3
|
+
//
|
|
4
|
+
// npx motiondesk-studio open the studio in your browser (http://127.0.0.1:5199)
|
|
5
|
+
// npx motiondesk-studio prompt --level advanced|base|category|hyperframes --brief "..." [--ratio 16:9] [--seconds 45]
|
|
6
|
+
// npx motiondesk-studio text script.txt [--ratio 9:16] [--palette <id>] [--out video.json] [--mp4 video.mp4] plain text → video, no AI
|
|
7
|
+
// npx motiondesk-studio check video.json validate / auto-repair an LLM answer
|
|
8
|
+
// npx motiondesk-studio build video.json --out folder editable project + standalone player.html
|
|
9
|
+
// npx motiondesk-studio render video.json --out video.mp4 MP4 via your installed Chrome/Edge
|
|
10
|
+
// npx motiondesk-studio templates [--category finance] list gallery templates
|
|
11
|
+
// npx motiondesk-studio template <id> [--out file.json] export one template config
|
|
12
|
+
import http from 'node:http';
|
|
13
|
+
import fs from 'node:fs';
|
|
14
|
+
import fsp from 'node:fs/promises';
|
|
15
|
+
import path from 'node:path';
|
|
16
|
+
import os from 'node:os';
|
|
17
|
+
import { once } from 'node:events';
|
|
18
|
+
import { spawn } from 'node:child_process';
|
|
19
|
+
import { createRequire } from 'node:module';
|
|
20
|
+
import { fileURLToPath } from 'node:url';
|
|
21
|
+
|
|
22
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
23
|
+
const require = createRequire(import.meta.url);
|
|
24
|
+
const studio = require(path.join(root, 'lib', 'studio.cjs'));
|
|
25
|
+
const appRoot = path.join(root, 'app');
|
|
26
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
27
|
+
|
|
28
|
+
const args = process.argv.slice(2);
|
|
29
|
+
const VALUE_FLAGS = new Set(['port', 'level', 'brief', 'ratio', 'seconds', 'tone', 'must', 'category', 'out', 'palette', 'mp4', 'title']);
|
|
30
|
+
const flag = (name, fallback) => { const i = args.indexOf(`--${name}`); return i >= 0 && args[i + 1] !== undefined ? args[i + 1] : fallback; };
|
|
31
|
+
const has = (name) => args.includes(`--${name}`);
|
|
32
|
+
const positional = args.filter((a, i) => !a.startsWith('--') && !(i > 0 && args[i - 1].startsWith('--') && VALUE_FLAGS.has(args[i - 1].slice(2))));
|
|
33
|
+
const command = positional[0] && !positional[0].includes('.') ? positional[0] : 'start';
|
|
34
|
+
const die = (message) => { console.error(`✗ ${message}`); process.exit(1); };
|
|
35
|
+
|
|
36
|
+
function findChrome() {
|
|
37
|
+
if (process.env.MOTIONDESK_CHROME_PATH) return process.env.MOTIONDESK_CHROME_PATH;
|
|
38
|
+
const candidates = process.platform === 'darwin'
|
|
39
|
+
? ['/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge', '/Applications/Chromium.app/Contents/MacOS/Chromium', '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser']
|
|
40
|
+
: process.platform === 'win32'
|
|
41
|
+
? [process.env['PROGRAMFILES'], process.env['PROGRAMFILES(X86)'], process.env.LOCALAPPDATA].filter(Boolean).flatMap((base) => [path.join(base, 'Google/Chrome/Application/chrome.exe'), path.join(base, 'Microsoft/Edge/Application/msedge.exe')])
|
|
42
|
+
: ['/usr/bin/google-chrome', '/usr/bin/google-chrome-stable', '/usr/bin/chromium', '/usr/bin/chromium-browser', '/snap/bin/chromium', '/opt/pw-browsers/chromium', '/usr/bin/microsoft-edge'];
|
|
43
|
+
return candidates.find((file) => { try { return fs.statSync(file).isFile(); } catch { return false; } });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function readJson(file) {
|
|
47
|
+
const text = fs.readFileSync(file, 'utf8');
|
|
48
|
+
try { const data = JSON.parse(text); if (data.schemaVersion && data.scenes) return { project: data }; } catch { /* repaired below */ }
|
|
49
|
+
const result = studio.repairConfig(text);
|
|
50
|
+
if (!result.config) die(result.error || 'invalid config');
|
|
51
|
+
return { config: result.config, fixes: result.fixes };
|
|
52
|
+
}
|
|
53
|
+
const toProject = (input) => input.project ?? studio.configV4ToProject(input.config).project;
|
|
54
|
+
|
|
55
|
+
async function loadCatalog() {
|
|
56
|
+
const dir = path.join(root, 'lib', 'catalog');
|
|
57
|
+
const templates = [];
|
|
58
|
+
for (const file of (await fsp.readdir(path.join(dir, 'studio'))).filter((f) => f.endsWith('.json'))) {
|
|
59
|
+
const data = JSON.parse(await fsp.readFile(path.join(dir, 'studio', file), 'utf8'));
|
|
60
|
+
for (const t of data.templates) templates.push({ ...t, kind: 'motion', category: data.category.id, categoryTitle: data.category.title });
|
|
61
|
+
}
|
|
62
|
+
const hfDir = path.join(dir, 'hyperframes');
|
|
63
|
+
if (fs.existsSync(hfDir)) for (const file of (await fsp.readdir(hfDir)).filter((f) => /^index.*\.json$/.test(f)).sort())
|
|
64
|
+
for (const t of JSON.parse(await fsp.readFile(path.join(hfDir, file), 'utf8'))) if (!templates.some((x) => x.id === t.id)) templates.push({ ...t, kind: 'hyperframes' });
|
|
65
|
+
return templates;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function render(project, out, onProgress = () => {}, signal) {
|
|
69
|
+
const chromePath = findChrome();
|
|
70
|
+
if (!chromePath) throw new Error('לא נמצא Google Chrome / Microsoft Edge. התקינו אחד מהם, או הגדירו MOTIONDESK_CHROME_PATH.');
|
|
71
|
+
const { renderVercelProject } = await import(path.join(root, 'lib', 'vercel-render.mjs'));
|
|
72
|
+
const temp = await fsp.mkdtemp(path.join(os.tmpdir(), 'motiondesk-studio-'));
|
|
73
|
+
try {
|
|
74
|
+
const result = await renderVercelProject(project, { temp, origin: `http://127.0.0.1:${server?.address()?.port ?? 0}`, local: true, chromePath, signal, onProgress });
|
|
75
|
+
const write = fs.createWriteStream(out);
|
|
76
|
+
for await (const chunk of result.stream || fs.createReadStream(result.path)) if (!write.write(chunk)) await once(write, 'drain');
|
|
77
|
+
write.end(); await once(write, 'finish');
|
|
78
|
+
if (result.finished) await result.finished;
|
|
79
|
+
return result.duration;
|
|
80
|
+
} finally { await fsp.rm(temp, { recursive: true, force: true }); }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* ------------------------------------------------------------------ server */
|
|
84
|
+
const TYPES = { '.html': 'text/html; charset=utf-8', '.js': 'text/javascript; charset=utf-8', '.mjs': 'text/javascript; charset=utf-8', '.css': 'text/css; charset=utf-8', '.json': 'application/json; charset=utf-8', '.svg': 'image/svg+xml', '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.webp': 'image/webp', '.woff2': 'font/woff2', '.ttf': 'font/ttf', '.m4a': 'audio/mp4', '.mp3': 'audio/mpeg', '.wav': 'audio/wav', '.mp4': 'video/mp4', '.ico': 'image/x-icon', '.txt': 'text/plain; charset=utf-8' };
|
|
85
|
+
let server;
|
|
86
|
+
let renderBusy = false;
|
|
87
|
+
const securityHeaders = { 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'Referrer-Policy': 'no-referrer' };
|
|
88
|
+
async function readBody(req, limit, ms) {
|
|
89
|
+
const chunks = []; let size = 0;
|
|
90
|
+
const timer = setTimeout(() => req.destroy(new Error('timeout')), ms);
|
|
91
|
+
try { for await (const c of req) { size += c.length; if (size > limit) throw new Error('הפרויקט גדול מדי'); chunks.push(c); } }
|
|
92
|
+
finally { clearTimeout(timer); }
|
|
93
|
+
return Buffer.concat(chunks).toString();
|
|
94
|
+
}
|
|
95
|
+
async function handle(req, res) {
|
|
96
|
+
const url = new URL(req.url, 'http://127.0.0.1');
|
|
97
|
+
const port = server.address().port;
|
|
98
|
+
// Loopback only; reject DNS-rebinding style hosts.
|
|
99
|
+
if (req.headers.host !== `127.0.0.1:${port}` && req.headers.host !== `localhost:${port}`) { res.writeHead(403).end(); return; }
|
|
100
|
+
if (url.pathname === '/api/render' && req.method === 'POST') {
|
|
101
|
+
const origin = req.headers.origin;
|
|
102
|
+
// Only this studio page may start renders (browsers always send Origin on POST).
|
|
103
|
+
if (origin && origin !== `http://127.0.0.1:${port}` && origin !== `http://localhost:${port}`) { res.writeHead(403).end(); return; }
|
|
104
|
+
if (!/^application\/json\b/.test(req.headers['content-type'] || '')) { res.writeHead(415).end(); return; }
|
|
105
|
+
if (renderBusy) { res.writeHead(429, { 'Content-Type': 'application/x-ndjson' }).end(JSON.stringify({ type: 'error', error: 'רינדור אחר כבר רץ. נסו שוב בעוד רגע.' }) + '\n'); return; }
|
|
106
|
+
renderBusy = true;
|
|
107
|
+
const abort = new AbortController();
|
|
108
|
+
res.on('close', () => { if (!res.writableEnded) abort.abort(); });
|
|
109
|
+
const send = (v) => !res.destroyed && res.write(JSON.stringify(v) + '\n');
|
|
110
|
+
// Wait for the socket to drain, or give up when the tab closes.
|
|
111
|
+
const drained = () => new Promise((ok) => { const done = () => { res.off('drain', done); res.off('close', done); ok(); }; res.on('drain', done); res.on('close', done); });
|
|
112
|
+
let temp;
|
|
113
|
+
try {
|
|
114
|
+
const project = JSON.parse(await readBody(req, 32 * 1024 * 1024, 30000));
|
|
115
|
+
temp = await fsp.mkdtemp(path.join(os.tmpdir(), 'motiondesk-render-'));
|
|
116
|
+
res.writeHead(200, { 'Content-Type': 'application/x-ndjson; charset=utf-8', 'Cache-Control': 'no-store', ...securityHeaders });
|
|
117
|
+
send({ type: 'progress', phase: 'video', percent: 0 });
|
|
118
|
+
const out = path.join(temp, 'video.mp4');
|
|
119
|
+
const duration = await render(project, out, (p) => send({ type: 'progress', ...p }), abort.signal);
|
|
120
|
+
const stream = fs.createReadStream(out, { highWaterMark: 96 * 1024 });
|
|
121
|
+
try {
|
|
122
|
+
for await (const chunk of stream) {
|
|
123
|
+
if (res.destroyed || abort.signal.aborted) break;
|
|
124
|
+
if (!send({ type: 'chunk', data: chunk.toString('base64') })) await drained();
|
|
125
|
+
}
|
|
126
|
+
} finally { stream.destroy(); }
|
|
127
|
+
if (!res.destroyed) { send({ type: 'done', duration, filename: `${String(project.title || 'motiondesk').replace(/[\\/:*?"<>|\r\n]/g, '_')}.mp4` }); res.end(); }
|
|
128
|
+
} catch (error) {
|
|
129
|
+
if (!res.headersSent) res.writeHead(400, { 'Content-Type': 'application/x-ndjson; charset=utf-8' });
|
|
130
|
+
if (!res.destroyed) { send({ type: 'error', error: String(error.message || error) }); res.end(); }
|
|
131
|
+
} finally { renderBusy = false; if (temp) await fsp.rm(temp, { recursive: true, force: true }).catch(() => {}); }
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (req.method !== 'GET' && req.method !== 'HEAD') { res.writeHead(405).end(); return; }
|
|
135
|
+
let rel;
|
|
136
|
+
try { rel = decodeURIComponent(url.pathname); } catch { res.writeHead(400).end(); return; }
|
|
137
|
+
if (rel.endsWith('/')) rel += 'index.html';
|
|
138
|
+
const file = path.resolve(appRoot, '.' + path.posix.normalize(rel));
|
|
139
|
+
const inside = path.relative(appRoot, file);
|
|
140
|
+
if (!inside || inside.startsWith('..') || path.isAbsolute(inside)) { res.writeHead(403).end(); return; }
|
|
141
|
+
let target = file;
|
|
142
|
+
try { if (!(await fsp.stat(target)).isFile()) throw new Error(); } catch { target = path.join(appRoot, 'index.html'); if (path.extname(rel)) { res.writeHead(404).end('not found'); return; } }
|
|
143
|
+
const stat = await fsp.stat(target);
|
|
144
|
+
const headers = { 'Content-Type': TYPES[path.extname(target).toLowerCase()] || 'application/octet-stream', 'Content-Length': stat.size, 'Cache-Control': target.endsWith('index.html') ? 'no-cache' : 'max-age=3600', ...securityHeaders };
|
|
145
|
+
// The HyperFrames preview host runs only inside the studio page, sandboxed, with no network.
|
|
146
|
+
if (rel === '/studio-hf/frame.html') headers['Content-Security-Policy'] = "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; font-src data:; img-src data: blob:; media-src data: blob:; frame-ancestors 'self'";
|
|
147
|
+
res.writeHead(200, headers);
|
|
148
|
+
if (req.method === 'HEAD') { res.end(); return; }
|
|
149
|
+
const stream = fs.createReadStream(target);
|
|
150
|
+
stream.on('error', () => res.destroy());
|
|
151
|
+
stream.pipe(res);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async function start({ quiet = false } = {}) {
|
|
155
|
+
const wanted = Number(flag('port', process.env.PORT || 5199));
|
|
156
|
+
server = http.createServer((req, res) => handle(req, res).catch((e) => { if (!res.headersSent) res.writeHead(500); res.end(String(e)); }));
|
|
157
|
+
for (let port = wanted; port < wanted + 20; port++) {
|
|
158
|
+
try { await new Promise((ok, fail) => { const onError = (e) => { server.off('listening', onListen); fail(e); }; const onListen = () => { server.off('error', onError); ok(); }; server.once('error', onError); server.once('listening', onListen); server.listen(port, '127.0.0.1'); }); break; }
|
|
159
|
+
catch (e) { if (e.code !== 'EADDRINUSE' || port === wanted + 19) throw e; }
|
|
160
|
+
}
|
|
161
|
+
const url = `http://127.0.0.1:${server.address().port}/`;
|
|
162
|
+
if (quiet) return;
|
|
163
|
+
console.log(`\n MotionDesk Studio ${pkg.version}\n ➜ ${url}\n`);
|
|
164
|
+
console.log(findChrome() ? ' ✓ MP4 export uses your installed browser' : ' ! MP4 export needs Google Chrome or Microsoft Edge installed');
|
|
165
|
+
console.log(' Ctrl+C to stop\n');
|
|
166
|
+
if (!has('no-open')) {
|
|
167
|
+
const opener = process.platform === 'darwin' ? ['open', [url]] : process.platform === 'win32' ? ['cmd', ['/c', 'start', '', url]] : ['xdg-open', [url]];
|
|
168
|
+
try { spawn(opener[0], opener[1], { stdio: 'ignore', detached: true }).unref(); } catch { /* print only */ }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ------------------------------------------------------------------ commands */
|
|
173
|
+
const commands = {
|
|
174
|
+
start: () => start(),
|
|
175
|
+
async prompt() {
|
|
176
|
+
const level = flag('level', 'advanced');
|
|
177
|
+
if (!['base', 'advanced', 'category', 'hyperframes'].includes(level)) die('--level base|advanced|category|hyperframes');
|
|
178
|
+
if (level === 'hyperframes') { console.log(studio.buildHyperframesPrompt({ brief: flag('brief', ''), ratio: flag('ratio', '16:9'), seconds: Number(flag('seconds', 20)), tone: flag('tone', 'אנרגטי ומודרני'), mustHave: flag('must', '') })); return; }
|
|
179
|
+
let example;
|
|
180
|
+
let categoryTitle = '';
|
|
181
|
+
if (level === 'category') { const t = (await loadCatalog()).find((x) => x.kind === 'motion' && x.category === flag('category', 'launch')); if (!t) die('unknown --category (see: motiondesk-studio templates)'); example = t.config; categoryTitle = t.categoryTitle; }
|
|
182
|
+
console.log(studio.buildPrompt(level, { brief: flag('brief', ''), ratio: flag('ratio', '16:9'), seconds: Number(flag('seconds', 45)), tone: flag('tone', 'אנרגטי ומודרני'), mustHave: flag('must', ''), categoryTitle, example }));
|
|
183
|
+
},
|
|
184
|
+
async text() {
|
|
185
|
+
const file = positional[1] || die('usage: motiondesk-studio text <script.txt> [--ratio 16:9|9:16|1:1] [--palette id] [--out video.json] [--mp4 video.mp4]');
|
|
186
|
+
const text = fs.readFileSync(file, 'utf8');
|
|
187
|
+
const ratio = flag('ratio', '16:9'); if (!['16:9', '9:16', '1:1'].includes(ratio)) die('--ratio 16:9|9:16|1:1');
|
|
188
|
+
const wanted = flag('palette'); const palette = studio.PALETTES.find((p) => p.id === wanted) || (wanted ? die(`unknown --palette (${studio.PALETTES.map((p) => p.id).join(', ')})`) : studio.PALETTES[0]);
|
|
189
|
+
const { config, plan } = studio.textToVideo(text, { ratio, palette, title: flag('title') });
|
|
190
|
+
const out = path.resolve(flag('out', path.basename(file).replace(/\.[^.]+$/, '') + '.motiondesk-config.json'));
|
|
191
|
+
await fsp.writeFile(out, JSON.stringify(config, null, 2) + '\n');
|
|
192
|
+
console.log(`✓ ${out}: ${config.scenes.length} scenes · ${studio.configDuration(config).toFixed(1)}s · ${ratio}`);
|
|
193
|
+
plan.forEach((p, i) => console.log(` ${String(i + 1).padStart(2)}. ${p.type.padEnd(18)} ${p.from}`));
|
|
194
|
+
const mp4 = flag('mp4');
|
|
195
|
+
if (mp4) { await start({ quiet: true }); try { const target = path.resolve(mp4); let last = -1; await render(studio.configV4ToProject(config).project, target, (p) => { const pct = Math.floor(p.percent ?? 0); if (pct !== last && pct % 5 === 0) { last = pct; process.stdout.write(`\r rendering ${pct}% `); } }); console.log(`\n✓ ${target}`); } finally { server?.close(); } }
|
|
196
|
+
},
|
|
197
|
+
async check() {
|
|
198
|
+
const file = positional[1] || die('usage: motiondesk-studio check <config.json>');
|
|
199
|
+
const input = readJson(file);
|
|
200
|
+
if (input.project) { studio.assertProject(input.project); console.log('✓ project OK'); return; }
|
|
201
|
+
const project = toProject(input);
|
|
202
|
+
const lint = studio.lintConfig(input.config);
|
|
203
|
+
console.log(`✓ ${file}: ${input.config.scenes.length} scenes · ${studio.configDuration(input.config).toFixed(1)}s · ${input.config.aspectRatio ?? '16:9'} · ${project.scenes.reduce((n, s) => n + s.layers.length, 0)} layers`);
|
|
204
|
+
for (const f of input.fixes) console.log(` fixed: ${f}`);
|
|
205
|
+
for (const w of [...lint.errors, ...lint.warnings]) console.log(` note: ${w}`);
|
|
206
|
+
if (has('write') && input.fixes.length) { fs.writeFileSync(file, JSON.stringify(input.config, null, 2) + '\n'); console.log(' repaired config written'); }
|
|
207
|
+
},
|
|
208
|
+
async build() {
|
|
209
|
+
const file = positional[1] || die('usage: motiondesk-studio build <config.json> --out <folder>');
|
|
210
|
+
const out = path.resolve(flag('out', path.basename(file).replace(/\.json$/i, '') + '-build'));
|
|
211
|
+
const input = readJson(file); const project = toProject(input);
|
|
212
|
+
await fsp.mkdir(out, { recursive: true });
|
|
213
|
+
await fsp.writeFile(path.join(out, 'project.motiondesk.json'), JSON.stringify(project));
|
|
214
|
+
await fsp.writeFile(path.join(out, 'player.html'), studio.compileProjectHtml(project));
|
|
215
|
+
if (input.config) await fsp.writeFile(path.join(out, 'config.motiondesk-config.json'), JSON.stringify(input.config, null, 2));
|
|
216
|
+
console.log(`✓ ${out}\n project.motiondesk.json (import in the studio) · player.html (open in a browser)`);
|
|
217
|
+
},
|
|
218
|
+
async render() {
|
|
219
|
+
const file = positional[1] || die('usage: motiondesk-studio render <config.json|project.json> --out video.mp4');
|
|
220
|
+
const out = path.resolve(flag('out', path.basename(file).replace(/\.json$/i, '') + '.mp4'));
|
|
221
|
+
const project = toProject(readJson(file));
|
|
222
|
+
let last = -1;
|
|
223
|
+
const duration = await render(project, out, (p) => { const pct = Math.floor(p.percent ?? 0); if (pct !== last && pct % 5 === 0) { last = pct; process.stdout.write(`\r rendering ${pct}% `); } });
|
|
224
|
+
console.log(`\n✓ ${out} (${duration?.toFixed?.(1) ?? '?'}s)`);
|
|
225
|
+
},
|
|
226
|
+
async templates() {
|
|
227
|
+
const cat = flag('category');
|
|
228
|
+
for (const t of (await loadCatalog()).filter((x) => !cat || x.category === cat)) console.log(`${t.id.padEnd(34)} ${t.kind === 'motion' ? 'motion ' : 'hyperframes'} ${t.category.padEnd(11)} ${t.title}`);
|
|
229
|
+
},
|
|
230
|
+
async template() {
|
|
231
|
+
const id = positional[1] || die('usage: motiondesk-studio template <id> [--out file]');
|
|
232
|
+
const t = (await loadCatalog()).find((x) => x.id === id) || die(`no template "${id}"`);
|
|
233
|
+
const content = t.kind === 'motion' ? JSON.stringify(t.config, null, 2) : await fsp.readFile(path.join(root, 'lib', 'catalog', 'hyperframes', t.file), 'utf8');
|
|
234
|
+
const out = flag('out');
|
|
235
|
+
if (out) { await fsp.writeFile(out, content); console.log(`✓ ${out}`); } else console.log(content);
|
|
236
|
+
},
|
|
237
|
+
help() { const lines = fs.readFileSync(fileURLToPath(import.meta.url), 'utf8').split('\n'); console.log(lines.slice(1, lines.findIndex((l, i) => i > 0 && !l.startsWith('//'))).map((l) => l.replace(/^\/\/ ?/, '')).join('\n')); },
|
|
238
|
+
};
|
|
239
|
+
if (has('help') || command === 'help' || !commands[command]) commands.help();
|
|
240
|
+
else {
|
|
241
|
+
if (command === 'render') await start({ quiet: true }); // renderer fetches studio-hf assets from the local server
|
|
242
|
+
await commands[command]().catch((e) => die(e.message || String(e)));
|
|
243
|
+
if (command === 'render') server?.close();
|
|
244
|
+
}
|