diff --git a/CNAME b/CNAME index 52b697087..6455e6948 100644 --- a/CNAME +++ b/CNAME @@ -1 +1 @@ -new.simplex.chat \ No newline at end of file +new.simplex.chat diff --git a/blog/20201022-simplex-chat.html b/blog/20201022-simplex-chat.html index 992173806..8be5750ae 100644 --- a/blog/20201022-simplex-chat.html +++ b/blog/20201022-simplex-chat.html @@ -1,162 +1,215 @@ - - - - - Simplex Chat - - - - - - + + + + + SimpleX blog: Simplex Chat + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

Simplex chat

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

Simplex chat

Published: Oct 22, 2020

https://simplex.chat

I'd really appreciate your feedback, criticism and suggestions on the open-source idea I was slowly working on since early 2020. I recently made the demo server for the low-level message queue protocol ("simplex messaging protocol") and the website to try to explain the chat idea that would use this protocol.

@@ -166,29 +219,80 @@

Any criticism would be great - thank you in advance!

Originally published at https://www.reddit.com/r/haskell/comments/jg6uh4/simplex_chat/

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20210512-simplex-chat-terminal-ui.html b/blog/20210512-simplex-chat-terminal-ui.html index 771d1663a..496d4cf9f 100644 --- a/blog/20210512-simplex-chat-terminal-ui.html +++ b/blog/20210512-simplex-chat-terminal-ui.html @@ -1,162 +1,215 @@ - - - - - Announcing SimpleX Chat Prototype! - - - - - - + + + + + SimpleX blog: Announcing SimpleX Chat Prototype! + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

Announcing SimpleX Chat Prototype!

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

Announcing SimpleX Chat Prototype!

Published: May 12, 2021

For the last six months me and my son Efim have been working to bring you a working prototype of SimpleX Chat. We're excited to announce SimpleX Chat terminal client is now available here on Linux, Windows and Mac (you can either build from source or download the binary for Linux, Windows or Mac from the latest release).

We’ve been using the terminal client between us and a few other people for a couple of months now, eating our own “dog food”, and have developed up to version 0.3.1, with most of the messaging protocol features we originally planned

@@ -174,29 +227,80 @@

We're building a new kind of chat network - the only network that lets you control your chat. We'd really appreciate your feedback, criticism and support - a star on the github repo, signing up to the mailing list or any contribution to the project will help. There is so much more to do!

Originally published at https://www.reddit.com/r/haskell/comments/naw6lz/simplex_chat_prototype_terminal_ui_made_in_haskell/

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20210914-simplex-chat-v0.4-released.html b/blog/20210914-simplex-chat-v0.4-released.html index bc8787fcb..a4a3e2ab1 100644 --- a/blog/20210914-simplex-chat-v0.4-released.html +++ b/blog/20210914-simplex-chat-v0.4-released.html @@ -1,162 +1,215 @@ - - - - - SimpleX announces SimpleX Chat v0.4 - - - - - - + + + + + SimpleX blog: SimpleX announces SimpleX Chat v0.4 + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX announces SimpleX Chat v0.4

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX announces SimpleX Chat v0.4

Published: Sep 14, 2021

Open-source decentralized chat that uses privacy-preserving message routing protocol

We are building a new platform for distributed Internet applications where privacy of the messages and the network matter. SimpleX Chat is our first application, a chat application built on the SimpleX platform that serves as an example of the power of the platform and as a reference application.

@@ -178,29 +231,80 @@

Our goal is to create a new kind of chat platform that lets you control your chat!

Originally published at https://www.reddit.com/r/selfhosted/comments/poal79/simplex_chat_an_opensource_decentralized_chat/

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20211208-simplex-chat-v0.5-released.html b/blog/20211208-simplex-chat-v0.5-released.html index 557367fef..dde23fa0a 100644 --- a/blog/20211208-simplex-chat-v0.5-released.html +++ b/blog/20211208-simplex-chat-v0.5-released.html @@ -1,162 +1,215 @@ - - - - - SimpleX announces SimpleX Chat v0.5 - - - - - - + + + + + SimpleX blog: SimpleX announces SimpleX Chat v0.5 + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX announces SimpleX Chat v0.5

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX announces SimpleX Chat v0.5

Published: Dec 08, 2021

Simplex Chat is the first chat platform that is 100% private by design - SimpleX no access to your connections graph

We are building a new platform for distributed Internet applications where privacy of the messages and the network matter. SimpleX Chat is our first application, a chat application built on the SimpleX platform that serves as an example of the power of the platform and as a reference application.

@@ -173,29 +226,80 @@

Our goal is to create a new kind of chat platform that lets you control your chat!

Originally published at https://www.reddit.com/r/haskell/comments/rc0xkn/simplex_chat_the_first_chat_platform_that_is_100/

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220112-simplex-chat-v1-released.html b/blog/20220112-simplex-chat-v1-released.html index 4840560f4..e15eaa013 100644 --- a/blog/20220112-simplex-chat-v1-released.html +++ b/blog/20220112-simplex-chat-v1-released.html @@ -1,162 +1,215 @@ - - - - - SimpleX announces SimpleX Chat v1 - - - - - - + + + + + SimpleX blog: SimpleX announces SimpleX Chat v1 + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX announces SimpleX Chat v1

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX announces SimpleX Chat v1

Published: Jan 12, 2022

The most private and secure chat and application platform

We are building a new platform for distributed Internet applications where privacy of the messages and the network matter. SimpleX Chat is our first application, a messaging application built on the SimpleX platform.

@@ -187,29 +240,80 @@

We look forward to you using it!

We look forward to your feedback and suggestions - via GitHub issues or via SimpleX Chat - you can connect to the team with /simplex command once you run the chat.

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220214-simplex-chat-ios-public-beta.html b/blog/20220214-simplex-chat-ios-public-beta.html index f375f2ad4..a9e1ac2ab 100644 --- a/blog/20220214-simplex-chat-ios-public-beta.html +++ b/blog/20220214-simplex-chat-ios-public-beta.html @@ -1,162 +1,215 @@ - - - - - SimpleX announces SimpleX Chat public beta for iOS - - - - - - + + + + + SimpleX blog: SimpleX announces SimpleX Chat public beta for iOS + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX announces SimpleX Chat public beta for iOS

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX announces SimpleX Chat public beta for iOS

Published: Feb 14, 2022

Private and secure chat and application platform - public beta is now available for iPhones with iOS 15.

Our new iPhone app is very basic - right now it only supports text messages and emojis.

@@ -185,29 +238,80 @@

SimpleX also allows people to host their own servers to have control of their chat data. SimpleX servers are exceptionally lightweight and require a single process with the initial memory footprint of under 20 Mb, which grows as the server adds in-memory queues (even with 10,000 queues it uses less than 50Mb, not accounting for messages). It should be considered though that while self-hosting the servers provides more control, it may reduce meta-data privacy, as it is easier to correlate the traffic of servers with small number of messages coming through.

Further details on platform objectives and technical design are available in SimpleX platform overview.

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220308-simplex-chat-mobile-apps.html b/blog/20220308-simplex-chat-mobile-apps.html index e7ec06035..6787bc8a1 100644 --- a/blog/20220308-simplex-chat-mobile-apps.html +++ b/blog/20220308-simplex-chat-mobile-apps.html @@ -1,162 +1,215 @@ - - - - - SimpleX announces SimpleX Chat mobile apps for iOS and Android - - - - - - + + + + + SimpleX blog: SimpleX announces SimpleX Chat mobile apps for iOS and Android + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX announces SimpleX Chat mobile apps for iOS and Android

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX announces SimpleX Chat mobile apps for iOS and Android

Published: March 8, 2022

SimpleX Chat is the first chat platform that is 100% private by design - it has no access to your connections graph

We have now released iPhone and Android apps to Apple AppStore and Google Play Store, APK for Android is also available for direct download.

@@ -203,29 +256,80 @@

Please let us know what else you think is important and if you find any bugs.

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220404-simplex-chat-instant-notifications.html b/blog/20220404-simplex-chat-instant-notifications.html index 58140880a..0a03bff8e 100644 --- a/blog/20220404-simplex-chat-instant-notifications.html +++ b/blog/20220404-simplex-chat-instant-notifications.html @@ -1,162 +1,215 @@ - - - - - Instant notifications for SimpleX Chat mobile apps - - - - - - + + + + + SimpleX blog: Instant notifications for SimpleX Chat mobile apps + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

Instant notifications for SimpleX Chat mobile apps

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

Instant notifications for SimpleX Chat mobile apps

Published: April 04, 2022

SimpleX Chat is the first chat platform that is 100% private by design - it has no access to your connections

Since we released SimpleX Chat mobile apps couple of weeks ago we've had a lot of excitement from our users - nearly 2000 people downloaded the app after the announcement!

@@ -244,29 +297,80 @@

Thank you!

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220511-simplex-chat-v2-images-files.html b/blog/20220511-simplex-chat-v2-images-files.html index 38d5f7213..10b8e8702 100644 --- a/blog/20220511-simplex-chat-v2-images-files.html +++ b/blog/20220511-simplex-chat-v2-images-files.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v2.0 - sending images and files in mobile apps - - - - - - + + + + + SimpleX blog: SimpleX Chat v2.0 - sending images and files in mobile apps + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v2.0 - sending images and files in mobile apps

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v2.0 - sending images and files in mobile apps

Published: May 11, 2022

New in version 2.0 - sending images and files privately

To send image and files SimpleX Chat uses privacy-preserving system components, both in iOS and Android apps. We do not ask for permission to access multiple or selected files, as, for example, Signal and Telegram do - it compromises either privacy or convenience.

@@ -179,29 +232,80 @@ Make a private connection
-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220524-simplex-chat-better-privacy.html b/blog/20220524-simplex-chat-better-privacy.html index fd4df16ac..56246e631 100644 --- a/blog/20220524-simplex-chat-better-privacy.html +++ b/blog/20220524-simplex-chat-better-privacy.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v2.1 - better conversation privacy - - - - - - + + + + + SimpleX blog: SimpleX Chat v2.1 - better conversation privacy + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v2.1 - better conversation privacy

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v2.1 - better conversation privacy

Published: May 24, 2022

New in version 2.1 - clearing conversations without deleting contacts

In this version you can irreversibly delete individual messages after they were deleted by a sender, and also completely clear the conversation.

@@ -166,29 +219,80 @@

See v2 announcement for more information about SimpleX platform and how it works.

Read about SimpleX design in whitepaper.

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220604-simplex-chat-new-privacy-security-settings.html b/blog/20220604-simplex-chat-new-privacy-security-settings.html index b618ffaeb..7a9d2631a 100644 --- a/blog/20220604-simplex-chat-new-privacy-security-settings.html +++ b/blog/20220604-simplex-chat-new-privacy-security-settings.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v2.2 - the first messaging platform without user identities - 100% private by design! - - - - - - + + + + + SimpleX blog: SimpleX Chat v2.2 - the new privacy and security features + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v2.2 - the first messaging platform without user identities - 100% private by design!

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v2.2 - the new privacy and security features

Published: June 4, 2022

See v2 announcement for more information about SimpleX platform and how it protects your privacy by avoiding user identities of any kind in its design - SimpleX, unlike any other messaging platform, has no identity keys or any numbers that identify its users.

New Privacy and Security settings in version 2.2

@@ -184,29 +237,80 @@

See v1 announcement for information on how SimpleX protects the security of the messages.

Read about SimpleX design in whitepaper.

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.html b/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.html index f467999a5..92dd2abbf 100644 --- a/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.html +++ b/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements.html @@ -1,162 +1,215 @@ - - - - - SimpleX announces SimpleX Chat v3 - - - - - - + + + + + SimpleX blog: SimpleX announces SimpleX Chat v3 — with encrypted calls and iOS push notifications + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX announces SimpleX Chat v3

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX announces SimpleX Chat v3 - with encrypted calls and iOS push notifications

Published: Jul 11, 2022

New in version 3

    @@ -218,29 +271,80 @@

    Evgeny

    SimpleX Chat founder

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220723-simplex-chat-v3.1-tor-groups-efficiency.html b/blog/20220723-simplex-chat-v3.1-tor-groups-efficiency.html index 8f1075325..807e71f90 100644 --- a/blog/20220723-simplex-chat-v3.1-tor-groups-efficiency.html +++ b/blog/20220723-simplex-chat-v3.1-tor-groups-efficiency.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v3.1-beta is released - - - - - - + + + + + SimpleX blog: SimpleX Chat v3.1-beta is released — improved battery/traffic usage + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v3.1-beta is released

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v3.1-beta is released - improved battery/traffic usage

Published: Jul 23, 2022

What's new

    @@ -176,7 +229,7 @@

    Mobile apps: join and leave chat groups

    Groups have been supported by SimpleX Chat core for a very long time, but there was no user interface in the mobile apps to use them - users had to use chat console to create groups, add members, and accept invitations.

    -

    This release allows accepting the invitations to join groups via mobile apps UI, making it much easier to create groups - only one user (a group owner) needs to use chat console, while all other groups members just need to tap a button in the UI to join or leave the group. Full group UI is coming in v3.1 in 1-2 weeks, but you can already start using groups today by installing beta-versions of mobile apps via TestFlight, Google PlayStore Beta and APK download.

    +

    This release allows accepting the invitations to join groups via mobile apps UI, making it much easier to create groups - only one user (a group owner) needs to use chat console, while all other groups members just need to tap a button in the UI to join or leave the group. Full group UI is coming in v3.1 in 1-2 weeks, but you can already start using groups today by installing beta-versions of mobile apps via TestFlight, Google PlayStore Beta and APK download.

    To manage groups via terminal app or via chat console in the mobile apps you have to use these commands:

    • to create group: /g <group_name> [<description>]
    • @@ -234,29 +287,80 @@

      Evgeny

      SimpleX Chat founder

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220808-simplex-chat-v3.1-chat-groups.html b/blog/20220808-simplex-chat-v3.1-chat-groups.html index 90883cb83..86598ea2c 100644 --- a/blog/20220808-simplex-chat-v3.1-chat-groups.html +++ b/blog/20220808-simplex-chat-v3.1-chat-groups.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v3.1 is released - - - - - - + + + + + SimpleX blog: SimpleX Chat v3.1 is released &mdash; with secret groups and server access via Tor + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v3.1 is released

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v3.1 is released - with secret groups and server access via Tor

Published: Aug 8, 2022

What's new

    @@ -233,29 +286,80 @@

    Evgeny

    SimpleX Chat founder

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220901-simplex-chat-v3.2-incognito-mode.html b/blog/20220901-simplex-chat-v3.2-incognito-mode.html index 4dafaa38d..dccf9dc99 100644 --- a/blog/20220901-simplex-chat-v3.2-incognito-mode.html +++ b/blog/20220901-simplex-chat-v3.2-incognito-mode.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v3.2 is released - - - - - - + + + + + SimpleX blog: SimpleX Chat v3.2 is released &mdash; meet Incognito mode, unique to Simplex Chat + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v3.2 is released

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v3.2 is released - meet Incognito mode, unique to Simplex Chat

Published: Sep 1, 2022

What's new

    @@ -224,29 +277,80 @@

    Evgeny

    SimpleX Chat founder

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20220928-simplex-chat-v4-encrypted-database.html b/blog/20220928-simplex-chat-v4-encrypted-database.html index 7d87083b6..319b3529c 100644 --- a/blog/20220928-simplex-chat-v4-encrypted-database.html +++ b/blog/20220928-simplex-chat-v4-encrypted-database.html @@ -1,162 +1,215 @@ - - - - - SimpleX Chat v4.0 with encrypted database is released - - - - - - + + + + + SimpleX blog: SimpleX Chat v4.0 with encrypted database is released + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

SimpleX Chat v4 with encrypted local database is released

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

SimpleX Chat v4 with encrypted local database is released

Published: Sep 28, 2022

What's new in v4

    @@ -247,29 +300,80 @@

    Evgeny

    SimpleX Chat founder

-
- +
- +
+
+ + © 2020-2022 SimpleX | Open-Source Project +
+
+ + diff --git a/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html b/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html index c07e116a3..be7047401 100644 --- a/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html +++ b/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html @@ -1,162 +1,215 @@ - - - - - Security audit by Trail of Bits, the new website and v4.2 released - - - - - - + + + + + SimpleX blog: Security audit by Trail of Bits, the new website and v4.2 released + + + + + + + + + + + + + - -
- -
- - -
- -
-
- - -
- Whitepaper - Comparison - Blog +
- - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) -
-

Security audit by Trail of Bits, the new website and v4.2 released

+themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + + + +
+

Security audit by Trail of Bits, the new website and v4.2 released

Published: Nov 8, 2022

Please note: This is work in progress to reserve permalink, to be published on November 8

Security audit by Trail of Bits

@@ -176,29 +229,80 @@
  • receive files faster (enable it in Privacy & Security settings)
  • -
    - +
    - +
    +
    + + © 2020-2022 SimpleX | Open-Source Project +
    +
    + + diff --git a/blog/images/20220511-images-files.png b/blog/images/20220511-images-files.png new file mode 100644 index 000000000..1fdecbc28 Binary files /dev/null and b/blog/images/20220511-images-files.png differ diff --git a/blog/images/20220711-call.png b/blog/images/20220711-call.png new file mode 100644 index 000000000..35cd201b0 Binary files /dev/null and b/blog/images/20220711-call.png differ diff --git a/blog/index.html b/blog/index.html index c6a9bf41d..4ff12a3a5 100644 --- a/blog/index.html +++ b/blog/index.html @@ -1,300 +1,811 @@ - - - - - - - - Blogs - - - - -
    - -
    - - -
    - -
    -
    - - -
    - Whitepaper - Comparison - Blog +
    - - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) + +themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + + - -
    -
    -

    Security audit by Trail of Bits, the new website and v4.2 released

    -

    Wed, 28 Sep 2022

    - Read More -
    -
    + + + +
    +
    +

    Latest news

    + -
    -

    SimpleX Chat v4.0 with encrypted database is released

    -

    Wed, 28 Sep 2022

    - Read More -
    -
    + -
    -

    SimpleX Chat v3.2 is released

    -

    Thu, 01 Sep 2022

    - Read More -
    -
    +
    +
    +
    + + + + + +
    +
    +
    +
    +

    + SimpleX Chat v4.0 with encrypted database is released +

    +

    + Wed, 28 Sep 2022 +

    + +
    +

    Added:

    +
      +
    • encrypted local chat database — if you already use the app, you can encrypt the database in the app settings
    • +
    • support for self-hosted WebRTC ICE servers
    • +
    • improved stability of creating new connections: more reliable groups, files and contacts
    • +
    • deleting files and media — for security and to save storage
    • +
    • For developers — TypeScript SDK for integrating with SimpleX Chat
    • +
    • support animated images in Android app
    • +
    • German language in mobile apps UI
    • +
    + +
    + +
    + Read More +
    +
    -
    -

    SimpleX Chat v3.1 is released

    -

    Mon, 08 Aug 2022

    - Read More -
    -
    + -
    -

    SimpleX Chat v3.1-beta is released

    -

    Sat, 23 Jul 2022

    - Read More -
    -
    + -
    -

    SimpleX announces SimpleX Chat v3

    -

    Mon, 11 Jul 2022

    - Read More -
    -
    +
    +
    +
    + + + + + +
    +
    +
    +
    +

    + SimpleX Chat v3.1-beta is released — improved battery/traffic usage +

    +

    + Sat, 23 Jul 2022 +

    + +
    +

    Added:

    +
      +
    • terminal app: access to messaging servers via SOCKS5 proxy (e.g., Tor).
    • +
    • mobile apps: join and leave chat groups.
    • +
    • optimized battery and traffic usage — up to 90x reduction!
    • +
    • two docker configurations for self-hosted SMP servers.
    • +
    + +
    + +
    + Read More +
    +
    -
    -

    SimpleX Chat v2.2 - the first messaging platform without user identities - 100% private by design!

    -

    Sat, 04 Jun 2022

    - Read More -
    -
    + -
    -

    SimpleX Chat v2.1 - better conversation privacy

    -

    Tue, 24 May 2022

    - Read More -
    -
    +
    +
    +
    + + + + + +
    +
    +
    +
    +

    + SimpleX Chat v2.2 - the new privacy and security features +

    +

    + Sat, 04 Jun 2022 +

    + +
    +

    Added:

    +
      +
    • protect your chats with SimpleX Lock
    • +
    • save data and avoid sharing you are online — manually accepting images
    • +
    • avoid visiting websites of the links you send — disable link previews
    • +
    • identify any lost messages in the chat
    • +
    + +
    + +
    + Read More +
    +
    -
    -

    SimpleX Chat v2.0 - sending images and files in mobile apps

    -

    Wed, 11 May 2022

    - Read More -
    -
    + -
    -

    Instant notifications for SimpleX Chat mobile apps

    -

    Mon, 04 Apr 2022

    - Read More -
    -
    + -
    -

    SimpleX announces SimpleX Chat mobile apps for iOS and Android

    -

    Tue, 08 Mar 2022

    - Read More -
    -
    + -
    -

    SimpleX announces SimpleX Chat public beta for iOS

    -

    Mon, 14 Feb 2022

    - Read More -
    -
    + -
    -

    SimpleX announces SimpleX Chat v1

    -

    Wed, 12 Jan 2022

    - Read More -
    -
    + -
    -

    SimpleX announces SimpleX Chat v0.5

    -

    Wed, 08 Dec 2021

    - Read More -
    -
    +
    +
    +
    + + + + +
    +
    +
    +
    +

    + SimpleX announces SimpleX Chat v1 +

    +

    + Wed, 12 Jan 2022 +

    + +

    Major protocol changes address all design mistakes identified during concept review by an independent expert.

    + +
    + Read More +
    +
    -
    -

    SimpleX announces SimpleX Chat v0.4

    -

    Tue, 14 Sep 2021

    - Read More -
    -
    + -
    -

    Announcing SimpleX Chat Prototype!

    -

    Wed, 12 May 2021

    - Read More -
    -
    + -
    -

    Simplex Chat

    -

    Thu, 22 Oct 2020

    - Read More -
    -
    + -
    -
    + +
    +
    + - - + © 2020-2022 SimpleX | Open-Source Project +
    +
    + + + + + + diff --git a/contact/index.html b/contact/index.html index 5bd3c075b..e927415b2 100644 --- a/contact/index.html +++ b/contact/index.html @@ -1,327 +1,492 @@ - + + + + + + SimpleX Chat - Contact + + + + + + + + + + + + + - - - - - SimpleX chat: private, secure, no global identities - - - - - - - - - - - + + + +
    +
    + + -
    - - -
    - -
    -
    - - -
    - Whitepaper - Comparison - Blog +
    - - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) + +themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + +
    + + + + + -
    -
    -

    This link is the invitation from a SimpleX Chat user

    - -
    -
    -

    If you already installed SimpleX Chat for the - terminal v1.0.0+, copy the command below and use it in the chat: -

    - -

    - - - Copy to clipboard - - -

    -
    - -
    - -
    -

    Scan QR code from mobile app

    -

    - To make a connection: +

    -
    -
    -
    -

    To install SimpleX Chat for the terminal

    -
    -

    - use this command: -

    -
    -

    curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/master/install.sh - | - bash - - Copy to clipboard - - -

    +
    +
    +
    + +
    + +
    +

    Scan QR code from mobile app

    + +
    +
    -
    - -
    -

    - See SimpleX Chat - GitHub repository - - for the instructions how to download or compile it from the source code. -

    -
    -
    -
    + -
    -
    -
    -

    Use SimpleX

    -

    - SimpleX chat terminal client - v2.0.0 is - released!
    - – groups and files
    - – two-layer E2E encryption, with double-ratchet algorithm
    - – protocol is compatible with mobile apps
    -

    -

    - You can use our servers or deploy your own, e.g. using - - StackScript on Linode. -

    -

    - Sign up to be updated about the new releases. -

    -
    -
    -
    + - - +
    +
    + logo + + +
    + +
    + +
    +
    + © 2020-2022 SimpleX | Open-Source Project + + + + + + + + diff --git a/contact/index.js b/contact/index.js deleted file mode 100644 index 0ee91f21d..000000000 --- a/contact/index.js +++ /dev/null @@ -1,67 +0,0 @@ -(function () { - -let complete = false -run() -window.onload = run - -async function run() { - const connURIel = document.getElementById("conn_req_uri_text"); - const mobileConnURIanchor = document.getElementById("mobile_conn_req_uri"); - const connQRCode = document.getElementById("conn_req_uri_qrcode"); - if (complete || !connURIel || !mobileConnURIanchor || !connQRCode) return - complete = true - const connURI = document.location.toString().replace(/\/(contact|invitation)\//, "/$1"); - connURIel.innerText = "/c " + connURI; - mobileConnURIanchor.href = connURI.replace("https://simplex.chat", "simplex:"); - if (document.location.pathname.indexOf("/contact") >= 0) { - let connModeEl = document.querySelector("#conn_req .conn_mode") - if (connModeEl) connModeEl.innerText = "address of"; - } - const els = document.querySelectorAll(".content_copy_with_tooltip"); - if (navigator.clipboard) { - els.forEach(contentCopyWithTooltip) - } else { - const tooltips = document.querySelectorAll(".content_copy_with_tooltip .tooltip"); - tooltips.forEach(el => el.style.visibility = "hidden") - } - - try { - await QRCode.toCanvas(connQRCode, connURI, { - errorCorrectionLevel: "M", - color: {dark: "#062D56"} - }); - connQRCode.style.width = "360px"; - connQRCode.style.height = "360px"; - } catch (err) { - console.error(err); - } - - function contentCopyWithTooltip(parent) { - const content = parent.querySelector(".content"); - const tooltip = parent.querySelector(".tooltiptext"); - console.log(parent.querySelector(".content_copy") ,111) - console.log(parent) - const copyButton = parent.querySelector(".content_copy"); - copyButton.addEventListener("click", copyAddress) - copyButton.addEventListener("mouseout", resetTooltip) - - function copyAddress() { - navigator.clipboard.writeText(content.innerText || content.value); - tooltip.innerHTML = "Copied!"; - } - - function resetTooltip() { - tooltip.innerHTML = "Copy to clipboard"; - } - } - - function copyAddress() { - navigator.clipboard.writeText(connURI); - tooltipEl.innerHTML = "Copied!"; - } - - function resetTooltip() { - tooltipEl.innerHTML = "Copy to clipboard"; - } -} -})(); diff --git a/css/blog.css b/css/blog.css index 3cceb226f..d2153e336 100644 --- a/css/blog.css +++ b/css/blog.css @@ -1,71 +1,164 @@ -h1 { - font-size: 1.8rem; - font-weight: 600; - letter-spacing: 0.6px; +#article h1 { + font-size: 38px; + font-weight: 700; + letter-spacing: 0.02em; + background: -webkit-linear-gradient(to bottom, #53C1FF -50%, #0053D0 160%); + background: linear-gradient(to bottom, #53C1FF -50%, #0053D0 160%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-fill-color: transparent; + + margin-bottom: 32px; } -section.container > div > p:nth-child(2) { +@media (min-width:768px) { + #article h1 { + font-size: 45px; + margin-bottom: 50px; + } +} + +.dark #article h1 { + background: -webkit-linear-gradient(to bottom, #70F0F9 100%, #70F0F9 100%); + background: linear-gradient(to bottom, #70F0F9 100%, #70F0F9 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-fill-color: transparent; +} + +section.container>div>p:nth-child(2) { margin: 0; - margin-bottom: 2rem; - margin-top: 4px; - font-size: 1rem; + font-size: 12px; + font-weight: 400; + letter-spacing: 0.03em; + color: + #3F484B; } -h2 { - font-size: 1.6rem; - font-weight: 600; - letter-spacing: 0.6px; - margin-bottom: 1rem; - margin-top: 2.2rem; +.dark section.container>div>p:nth-child(2) { + color: #A8B0B4; } -h3 { - font-size: 1.2rem; - font-weight: 600; - letter-spacing: 0.6px; - margin-bottom: 1rem; - margin-top: 1.8rem; +#article h2 { + font-size: 28px; + font-weight: 700; + color: #3F484B; } -ul li, -ol li { - text-decoration: none; - /* list-style: none; */ - font-size: 1.1rem; - line-height: 30px; - letter-spacing: 0.6px; - margin: 0.5rem 0; - -webkit-margin-start: 1rem; +@media (min-width:768px) { + #article h2 { + font-size: 38px; + } } -ul, -ol { + +.dark #article h2 { + color: white; +} + +#article h3 { + font-size: 20px; + font-weight: 700; + letter-spacing: 0.02em; + color: #606C71; + + margin: 50px 0 25px 0; +} + +@media (min-width:768px) { + #article h3 { + font-size: 28px; + } +} + +.dark #article h3 { + color: white; +} + +#article p { + font-weight: 400; + font-size: 16px; + line-height: 24px; + color: black; + margin: 1.2rem 0; +} + +.dark #article p { + color: white; +} + +#article ul, +#article ol { list-style-position: inside; - /* list-style-type: decimal; */ overflow: auto; + margin: 1rem 0; } -ul li::marker, -ol li::marker { - /* content: "-> "; */ - font-weight: 600; - /* color: #fbd561; */ + +#article ul li, +#article ol li { + -webkit-margin-start: 1rem; + color: #000; } + +.dark #article ul li, +.dark #article ol li { + color: #fff; +} + +#article ul li::marker, +#article ol li::marker { + color: black; +} + +.dark #article ul li::marker, +.dark #article ol li::marker { + color: white; +} + +#article ul li a, +#article ol li a { + line-height: 30px; +} + +#article ul li { + list-style: disc; +} + +#article ol li { + list-style: decimal; +} + +#article a { + color: #0053D0; + text-decoration: underline; + text-underline-offset: 4px; +} + +.dark #article a { + color: #70F0F9; +} + pre { overflow: auto; } + +.dark pre { + color: white; +} + /* code{ width: 100%; height: auto; } */ -p { - margin: 1rem 0; -} + html { scroll-behavior: smooth; } -h1::before, +/* h1::before, h2::before, h3::before { display: block; @@ -74,8 +167,35 @@ h3::before { height: 80px; visibility: hidden; pointer-events: none; -} +} */ :focus { outline: none; } + +p, +a, +h1, +h2, +h3, +h4, +h5, +h6, +li, +ul, +ol, +span, +div, +blockquote, +pre, +code { + clear: both; +} + +#article p img { + float: left; +} + +#article img { + margin-bottom: 1.5rem; +} \ No newline at end of file diff --git a/css/style.css b/css/style.css index 209fb3514..69c53a815 100644 --- a/css/style.css +++ b/css/style.css @@ -1,17 +1,654 @@ -html { - scroll-behavior: smooth; +@font-face { + font-family: Gilroy; + src: url("/fonts/GilroyRegular/font.woff2") format("woff2"), url("webFonts/GilroyRegular/font.woff") format("woff"); + font-weight: 400; + font-style: normal; } -#comparison::before { +@font-face { + font-family: Gilroy; + src: url("/fonts/GilroyLight/font.woff2") format("woff2"), url("webFonts/GilroyLight/font.woff") format("woff"); + font-weight: 300; + font-style: normal; +} + +@font-face { + font-family: Gilroy; + src: url("/fonts/GilroyMedium/font.woff2") format("woff2"), url("webFonts/GilroyMedium/font.woff") format("woff"); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: Gilroy; + src: url("/fonts/GilroyBold/font.woff2") format("woff2"), url("webFonts/GilroyBold/font.woff") format("woff"); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: Gilroy; + src: url("/fonts/GilroyRegularItalic/font.woff2") format("woff2"), url("webFonts/GilroyRegularItalic/font.woff") format("woff"); + font-weight: 400; + font-style: italic; +} + +html { + scroll-behavior: smooth; + font-family: Gilroy, Helvetica, sans-serif;; + letter-spacing: 0.003em; +} + +/* #comparison::before { display: block; content: " "; margin-top: -80px; height: 120px; visibility: hidden; pointer-events: none; -} +} */ /* .nav-button-active{ background-color: #00C8FB; color: #fff; } */ + +/* NEW SITE */ +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width: 100%; + /* padding: 0 20px; */ + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + + .container-sm, + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + + .container-md, + .container-sm, + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + + .container-xl, + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 1140px; + } +} + +@media (min-width: 1400px) { + + .container-xxl, + .container-xl, + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 1320px; + } +} + +.gradient-text { + background: -webkit-linear-gradient(to bottom, #53C1FF -50%, #0053D0 160%); + background: linear-gradient(to bottom, #53C1FF -50%, #0053D0 160%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-fill-color: transparent; +} + +.dark .border-gradient { + background: + linear-gradient(#11182F, #11182F) padding-box, + linear-gradient(to bottom, transparent, #01F1FF 58%) border-box; + border: 1px solid transparent; +} + +.dark .only-light { + display: none; +} + +.only-dark { + display: none; +} + +.dark .only-dark { + display: inherit; +} + +.dark .unique-swiper .border-gradient{ + background: + linear-gradient(#0C0B13, #0C0B13) padding-box, + linear-gradient(to bottom, transparent, #01F1FF 58%) border-box; + border: 1px solid transparent; +} + +/* Nav and Menu */ +#why-simplex::before, +#features::before, +#simplex-privacy::before, +#simplex-network::before { + display: block; + content: " "; + margin-top: -26px; + height: 66px; + visibility: hidden; + pointer-events: none; +} + +.menu-link{ + font-size: 16px; + line-height: 33.42px; + color: #0D0E12; +} +.dark .menu-link{ + color: #fff; +} + +@media (min-width:1024px) { + .nav-link-text, + .menu-link { + display: inline-block; + position: relative; + color: #0D0E12; + } + + .nav-link-text::before, + .active .nav-link-text::before, + .menu-link::before { + content: ""; + position: absolute; + width: 0; + height: 1px; + bottom: 0; + right: 0; + /* background-color: initial; */ + transition: width 0.25s ease-out; + } + + .menu-link::before { + background-color: #0D0E12; + } + .dark .menu-link::before { + background-color: #fff; + } + + .active .nav-link-text::before { + width: 100%; + } + + .nav-link:hover .nav-link-text::before, + .menu-link:hover::before { + width: 100%; + left: 0; + right: auto; + } +} + + +.sub-menu { + visibility: hidden; + opacity: 0; + color: #505158; +} + +.dark .sub-menu { + color: #fff; +} + +.dark .sub-menu li:hover { + color: #66D9E2; +} + +.sub-menu li:hover { + color: #0053D0; +} + +.sub-menu { + transition: all .3s ease !important; +} + +.nav-link span svg, +header nav { + transition: all 0.5s ease; +} + +.nav-link:hover span svg { + transform: rotate(180deg); +} + +/* @media (max-width: 1400px) { + .landing-page-header-article-paragraph { + width: 21rem; + } + + .socials { + flex-wrap: nowrap; + } +} */ + +@media (min-width:1024px) { + + .nav-link:hover .sub-menu, + .nav-link:focus-within .sub-menu { + visibility: visible; + opacity: 1; + margin-top: 0; + } +} + +@media (max-width: 1024px) { + .sub-menu { + max-height: 0; + transform: translateY(-10px); + transition: all .7s ease !important; + } + + .active .sub-menu { + max-height: 200px; + transform: translateY(0px); + opacity: 1; + visibility: visible; + margin-top: 0; + } + + header nav { + visibility: hidden; + opacity: 0; + transform: translateX(100%); + } + + header nav.open { + visibility: visible; + opacity: 1; + transform: translateX(0); + } +} + +.lock-scroll { + overflow: hidden; +} + +/* Swipe Sections */ +.hash-number { + background: linear-gradient(251.16deg, #53C1FF 1.1%, #0053D0 100.82%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.swiper-button-disabled{ + opacity: 0; + pointer-events: none; + display: none !important; +} + +.swiper-pagination-bullet { + height: 14.31px; + width: 14.31px; + margin: 0 5px !important; +} +.dark .swiper-pagination-bullet{ + background: #D4D4D433; + opacity: .8; +} + +.swiper-pagination-bullet-active{ + opacity: 1 !important; +} +.swiper-pagination-bullet-active { + background-color: #0197FF !important; +} +.dark .swiper-pagination-bullet-active{ + background-color: #70F0F9 !important; +} + +.swiper-button-next, +.swiper-button-prev { + height: 40px; + width: 40px; +} + +.swiper-button-disabled { + display: none; +} + +.unique-swiper .swiper-slide, +.unique-swiper .swiper-wrapper{ + height: inherit; +} + +.swiper-scrollbar-horizontal { + margin-top: 40px !important; + width: 302.06px !important; + height: 7.73px !important; + left: 50% !important; + transform: translateX(-50%) !important; + transform: translateX(-50%) !important; +} + +.swiper-scrollbar-drag { + width: 112px !important; + height: 8px !important; + background-color: #0197FF; +} +.dark .swiper-scrollbar-drag{ + background-color: #70F0F9; +} + +/* What makes simplex private */ +.card{ + cursor: pointer; +} + +.card, +.card > div:nth-child(2), +.card > div:nth-child(1) { + transition: all .5s ease; +} + +.card > div:nth-child(2) > *:nth-child(2), +.card > div:nth-child(2) > *:nth-child(3) { + opacity: 0; + max-height: 0; + transform: translateY(20px); + transition: all .5s ease-out; +} +.card > div:nth-child(2) > *:nth-child(3) { + transform: translateY(40px); +} + +.card:hover > div:nth-child(1) { + height: 200px; + padding: 12px 10px; +} +.card:hover > div:nth-child(2) { + height: 270px; + padding: 8px 24px; +} +.card.card-active > div:nth-child(2) { + height: 470px; +} + +.card:hover > div:nth-child(2) > *:nth-child(2), +.card:hover > div:nth-child(2) > *:nth-child(3), +.card.card-active > div:nth-child(2) > *:nth-child(2), +.card.card-active > div:nth-child(2) > *:nth-child(3) { + opacity: 1; + max-height: 470px; + transform: translateY(0px); +} + +.card:not(.no-hover):hover > div:nth-child(2) > *:nth-child(3){ + opacity: 0; +} + + +/* SimpleX Unique */ +.simplex-unique-card .card-content{ + transition: all .5s ease-out; +} +@media (max-width: 768px) { + .simplex-unique-card .card-content .content-body{ + height: 0; + opacity: 0; + visibility: hidden; + transform: translateY(80px); + transition: all .7s ease; + } + .simplex-unique-card.active-card .card-content .content-body{ + max-height: 540px; + opacity: 1; + visibility: visible; + transform: translateY(0px); + } + .simplex-unique-card.active-card .card-content{ + height: 540px; + } + .open-card-btn svg, + .close-card-btn svg{ + transition: all .5s ease; + } + .open-card-btn:hover svg, + .close-card-btn:hover svg{ + transform: rotate(180deg); + } +} + + +/* comparison */ +#comparison table td, +#comparison table th { + font-size: 15px; + font-weight: normal; + font-stretch: normal; + font-style: normal; + line-height: 1.4; + letter-spacing: 0.47px; +} + + +/* hero */ +header{ + transition: all .7s ease; +} +.primary-header { + background: linear-gradient(270deg, #0053D0 35.85%, #0197FF 94.78%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-shadow: 0px 4px 74px #e9e7e2; +} +.dark .primary-header{ + background: linear-gradient(270deg,#70F0F9 100%, #70F0F9 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-shadow: none; +} +.secondary-header { + color: #606c71; + text-shadow: 0px 4px 74px #e9e7e2; +} +.dark .secondary-header{ + color: #fff; + text-shadow: none; +} +.hero-phone-background { + background-image: url("/img/new/bg_gfx.png"); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + /* width: 644px; + height: 644px; + margin-bottom: 5rem; */ + + + /* position: fixed; */ + + /* justify-content: center; + align-items: center; + align-content: center; + justify-items: center; + */ +} +#hero-phone-light, #hero-phone-dark { + position: relative; + animation-name: none; + animation-duration: 2s; + animation-fill-mode: forwards; +} + +#hero-phone-video { + /* position: absolute; + border-radius: 10px; + background-color: black; + animation-name: none; */ + /* border-top-right-radius: 25px; */ + /* border-top-left-radius: 32px; */ + animation-duration: 2s; + animation-fill-mode: forwards; + /* height: 580px; + width: 256px; */ + /* margin-left: 0.3rem; + margin-bottom: 0.1rem; */ +} + +.description { + width: 31rem; +} + +@media (max-width: 1400px) { + /* #hero-phone-video { + border-radius: 15px; + height: 500px; + width: 227px; + margin-bottom: 4.7rem; + } */ +} + +@keyframes small { + 0% { + transform: scale(1); + } + + 100% { + transform: scale(0.66); + } +} +@keyframes big { + 0% { + transform: scale(0.66); + } + + 100% { + transform: scale(1); + } +} +@keyframes bigvideo { + 0% { + transform: scale(0.66); + opacity: 0; + } + + 100% { + transform: scale(1); + opacity: 1; + } +} + +.tablet-hero-phone-background { + background-image: url("../Images/bg_gfx.png"); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + position: absolute; + width: 40%; + top: 5%; + left: 30%; +} +.tablet-hero-phone { + transform: skewY(25deg); +} + +/* Overlays */ +.overlay a, +p a{ + color: #0053D0; + text-decoration: underline; + text-underline-offset: 2px; +} +.dark .overlay a, +.dark p a{ + color: #70F0F9; +} + +/* For Contact & Invitation Page */ +.primary-header-contact { + background: linear-gradient(251.16deg, #53c1ff 1.1%, #0053d0 100.82%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-shadow: 0px 4px 74px #e9e7e2; +} +.dark .primary-header-contact{ + background: linear-gradient(270deg,#70F0F9 100%, #70F0F9 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + text-shadow: none; +} +.secondary-header-contact { + text-shadow: 0px 4px 74px #e9e7e2; +} +.dark .secondary-header-contact { + text-shadow: none; +} +.content_copy_with_tooltip { + background-color: #f8f8f6; + border-radius: 50px; + padding-bottom: 4px; + padding-top: 8px; + margin-top: 16px; + margin-bottom: 16px; +} +.content_copy_with_tooltip .tooltip { + vertical-align: -6px; +} +.content_copy_with_tooltip .content { + font-size: 15px; +} +.contact-tab > .contact-tab-content{ + opacity: 0; + max-height: 0; + transition: all 0.5s ease; + visibility: hidden; + transform: translateY(10px); + overflow: hidden; +} +.contact-tab svg{ + transform: rotate(-180deg); + transition: all .5s ease; +} +.contact-tab.active > .contact-tab-content{ + opacity: 1; + max-height: 300px; + visibility: visible; + transform: translateY(0px); +} +.for-tablet .contact-tab.active > .contact-tab-content{ + min-height: 450px; +} +.contact-tab.active svg, +.contact-tab:hover svg{ + transform: rotate(0deg); +} \ No newline at end of file diff --git a/css/swiper-bundle.min.css b/css/swiper-bundle.min.css new file mode 100644 index 000000000..916173ac0 --- /dev/null +++ b/css/swiper-bundle.min.css @@ -0,0 +1,13 @@ +/** + * Swiper 8.4.3 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2022 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: October 6, 2022 + */ + +@font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:50%;background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader,.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-next+.swiper-slide,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-creative .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden} \ No newline at end of file diff --git a/css/tailwind.css b/css/tailwind.css index 2b0b0a028..c879f1fdf 100644 --- a/css/tailwind.css +++ b/css/tailwind.css @@ -1,240 +1,1922 @@ -/* @tailwind base; */ +/* +! tailwindcss v3.2.2 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} .container { - width: 100% + width: 100%; } @media (min-width: 640px) { .container { - max-width: 640px + max-width: 640px; } } @media (min-width: 768px) { .container { - max-width: 768px + max-width: 768px; } } @media (min-width: 1024px) { .container { - max-width: 1024px + max-width: 1024px; } } @media (min-width: 1280px) { .container { - max-width: 1280px + max-width: 1280px; } } @media (min-width: 1536px) { .container { - max-width: 1536px + max-width: 1536px; } } .visible { - visibility: visible + visibility: visible; +} + +.static { + position: static; } .fixed { - position: fixed + position: fixed; } .absolute { - position: absolute + position: absolute; } .relative { - position: relative + position: relative; } -.top-\[60px\] { - top: 60px +.sticky { + position: sticky; +} + +.bottom-0 { + bottom: 0px; +} + +.left-\[-3px\] { + left: -3px; +} + +.top-\[55\%\] { + top: 55%; +} + +.right-\[-6px\] { + right: -6px; +} + +.top-0 { + top: 0px; +} + +.left-0 { + left: 0px; +} + +.top-10 { + top: 2.5rem; +} + +.top-\[66px\] { + top: 66px; +} + +.right-0 { + right: 0px; +} + +.top-full { + top: 100%; +} + +.right-5 { + right: 1.25rem; +} + +.top-5 { + top: 1.25rem; +} + +.bottom-\[80px\] { + bottom: 80px; +} + +.right-1 { + right: 0.25rem; +} + +.left-1 { + left: 0.25rem; +} + +.top-\[52\%\] { + top: 52%; } .z-10 { - z-index: 10 + z-index: 10; } -.z-\[99\] { - z-index: 99 +.z-\[10000\] { + z-index: 10000; } -.my-3 { - margin-top: 0.75rem; - margin-bottom: 0.75rem +.z-\[10001\] { + z-index: 10001; } -.mt-5 { - margin-top: 1.25rem +.z-50 { + z-index: 50; +} + +.m-auto { + margin: auto; +} + +.my-4 { + margin-top: 1rem; + margin-bottom: 1rem; +} + +.my-12 { + margin-top: 3rem; + margin-bottom: 3rem; +} + +.mx-5 { + margin-left: 1.25rem; + margin-right: 1.25rem; +} + +.my-\[40px\] { + margin-top: 40px; + margin-bottom: 40px; +} + +.my-10 { + margin-top: 2.5rem; + margin-bottom: 2.5rem; +} + +.my-16 { + margin-top: 4rem; + margin-bottom: 4rem; +} + +.my-5 { + margin-top: 1.25rem; + margin-bottom: 1.25rem; +} + +.mt-\[66px\] { + margin-top: 66px; +} + +.mb-9 { + margin-bottom: 2.25rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mt-2 { + margin-top: 0.5rem; +} + +.mt-auto { + margin-top: auto; +} + +.mb-\[32px\] { + margin-bottom: 32px; +} + +.mb-\[86px\] { + margin-bottom: 86px; +} + +.mb-\[90px\] { + margin-bottom: 90px; +} + +.mb-\[53px\] { + margin-bottom: 53px; +} + +.mb-\[50px\] { + margin-bottom: 50px; +} + +.mb-\[20px\] { + margin-bottom: 20px; +} + +.mb-\[60px\] { + margin-bottom: 60px; +} + +.mb-14 { + margin-bottom: 3.5rem; +} + +.mb-\[21px\] { + margin-bottom: 21px; +} + +.mb-\[95px\] { + margin-bottom: 95px; +} + +.mb-\[30px\] { + margin-bottom: 30px; +} + +.mb-10 { + margin-bottom: 2.5rem; +} + +.mb-\[80px\] { + margin-bottom: 80px; +} + +.mb-\[16px\] { + margin-bottom: 16px; +} + +.mb-\[24px\] { + margin-bottom: 24px; +} + +.mt-\[-100px\] { + margin-top: -100px; +} + +.ml-\[-15px\] { + margin-left: -15px; +} + +.mb-\[40px\] { + margin-bottom: 40px; +} + +.mb-6 { + margin-bottom: 1.5rem; +} + +.mb-5 { + margin-bottom: 1.25rem; +} + +.mb-\[76px\] { + margin-bottom: 76px; +} + +.mb-7 { + margin-bottom: 1.75rem; +} + +.mb-\[46px\] { + margin-bottom: 46px; +} + +.mb-\[36px\] { + margin-bottom: 36px; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.mt-10 { + margin-top: 2.5rem; +} + +.mt-\[60px\] { + margin-top: 60px; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-\[11px\] { + margin-bottom: 11px; +} + +.mt-\[30px\] { + margin-top: 30px; +} + +.ml-\[-6px\] { + margin-left: -6px; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mb-\[28px\] { + margin-bottom: 28px; +} + +.mr-\[-4px\] { + margin-right: -4px; +} + +.mt-\[14px\] { + margin-top: 14px; +} + +.mr-auto { + margin-right: auto; +} + +.mb-16 { + margin-bottom: 4rem; +} + +.ml-10 { + margin-left: 2.5rem; +} + +.mb-20 { + margin-bottom: 5rem; +} + +.mb-\[75px\] { + margin-bottom: 75px; +} + +.mb-\[44px\] { + margin-bottom: 44px; } .block { - display: block + display: block; } .inline-block { - display: inline-block + display: inline-block; } .flex { - display: flex + display: flex; } .table { - display: table + display: table; +} + +.grid { + display: grid; } .hidden { - display: none + display: none; +} + +.h-\[inherit\] { + height: inherit; } .h-full { - height: 100% + height: 100%; +} + +.h-auto { + height: auto; +} + +.h-\[44px\] { + height: 44px; +} + +.h-\[215px\] { + height: 215px; +} + +.h-\[152px\] { + height: 152px; +} + +.h-\[110px\] { + height: 110px; +} + +.h-\[470px\] { + height: 470px; +} + +.h-\[322px\] { + height: 322px; +} + +.h-\[138px\] { + height: 138px; +} + +.h-6 { + height: 1.5rem; +} + +.h-\[40px\] { + height: 40px; +} + +.h-screen { + height: 100vh; +} + +.h-\[131px\] { + height: 131px; +} + +.h-\[32px\] { + height: 32px; +} + +.h-\[calc\(100\%-81\.42px\)\] { + height: calc(100% - 81.42px); +} + +.h-fit { + height: -moz-fit-content; + height: fit-content; +} + +.h-\[66px\] { + height: 66px; +} + +.h-\[50px\] { + height: 50px; +} + +.h-\[36px\] { + height: 36px; +} + +.h-\[340px\] { + height: 340px; +} + +.h-11 { + height: 2.75rem; +} + +.h-\[55\%\] { + height: 55%; +} + +.h-\[180px\] { + height: 180px; +} + +.h-\[80px\] { + height: 80px; +} + +.max-h-\[226px\] { + max-height: 226px; +} + +.min-h-\[200px\] { + min-height: 200px; +} + +.min-h-\[inherit\] { + min-height: inherit; +} + +.min-h-\[131px\] { + min-height: 131px; +} + +.min-h-\[620px\] { + min-height: 620px; } .w-full { - width: 100% + width: 100%; +} + +.w-\[175px\] { + width: 175px; +} + +.w-auto { + width: auto; +} + +.w-\[630px\] { + width: 630px; +} + +.w-\[inherit\] { + width: inherit; +} + +.w-\[44px\] { + width: 44px; +} + +.w-\[235px\] { + width: 235px; +} + +.w-\[238px\] { + width: 238px; +} + +.w-\[36px\] { + width: 36px; +} + +.min-w-\[210px\] { + min-width: 210px; +} + +.min-w-\[152px\] { + min-width: 152px; +} + +.min-w-\[180px\] { + min-width: 180px; +} + +.min-w-\[300px\] { + min-width: 300px; +} + +.max-w-\[240px\] { + max-width: 240px; +} + +.max-w-\[900px\] { + max-width: 900px; +} + +.max-w-\[265px\] { + max-width: 265px; +} + +.max-w-\[223px\] { + max-width: 223px; +} + +.max-w-\[500px\] { + max-width: 500px; +} + +.max-w-\[475px\] { + max-width: 475px; +} + +.max-w-\[602px\] { + max-width: 602px; +} + +.max-w-\[468px\] { + max-width: 468px; +} + +.max-w-\[230px\] { + max-width: 230px; +} + +.max-w-\[448px\] { + max-width: 448px; +} + +.max-w-\[294px\] { + max-width: 294px; +} + +.max-w-\[540px\] { + max-width: 540px; +} + +.max-w-\[400px\] { + max-width: 400px; +} + +.max-w-\[617px\] { + max-width: 617px; +} + +.max-w-\[541px\] { + max-width: 541px; +} + +.flex-\[1\] { + flex: 1; +} + +.flex-\[2\.5\] { + flex: 2.5; } .flex-1 { - flex: 1 1 0% + flex: 1 1 0%; +} + +.border-separate { + border-collapse: separate; +} + +.border-spacing-x-5 { + --tw-border-spacing-x: 1.25rem; + border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y); +} + +.border-spacing-y-2 { + --tw-border-spacing-y: 0.5rem; + border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y); +} + +.translate-x-\[-30\%\] { + --tw-translate-x: -30%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.translate-y-\[-30\%\] { + --tw-translate-y: -30%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.scale-100 { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } .transform { - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.cursor-pointer { + cursor: pointer; +} + +.resize { + resize: both; +} + +.list-inside { + list-style-position: inside; +} + +.list-decimal { + list-style-type: decimal; +} + +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); } .flex-col { - flex-direction: column + flex-direction: column; +} + +.flex-col-reverse { + flex-direction: column-reverse; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-start { + align-items: flex-start; +} + +.items-end { + align-items: flex-end; } .items-center { - align-items: center + align-items: center; +} + +.justify-end { + justify-content: flex-end; } .justify-center { - justify-content: center + justify-content: center; } -.gap-\[16px\] { - gap: 16px +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +.gap-\[20px\] { + gap: 20px; +} + +.gap-\[50px\] { + gap: 50px; +} + +.gap-3 { + gap: 0.75rem; +} + +.gap-16 { + gap: 4rem; } .gap-4 { - gap: 1rem + gap: 1rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-10 { + gap: 2.5rem; +} + +.gap-1 { + gap: 0.25rem; +} + +.gap-\[150px\] { + gap: 150px; +} + +.gap-6 { + gap: 1.5rem; +} + +.gap-5 { + gap: 1.25rem; +} + +.gap-x-10 { + -moz-column-gap: 2.5rem; + column-gap: 2.5rem; +} + +.gap-y-20 { + row-gap: 5rem; +} + +.self-center { + align-self: center; } .self-stretch { - align-self: stretch + align-self: stretch; } -.rounded-lg { - border-radius: 0.5rem +.overflow-auto { + overflow: auto; +} + +.overflow-hidden { + overflow: hidden; +} + +.rounded-\[4px\] { + border-radius: 4px; +} + +.rounded-\[12px\] { + border-radius: 12px; +} + +.rounded-\[20px\] { + border-radius: 20px; +} + +.rounded-\[30px\] { + border-radius: 30px; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded-\[34px\] { + border-radius: 34px; } .rounded { - border-radius: 0.25rem + border-radius: 0.25rem; } -.border-x-0 { - border-left-width: 0px; - border-right-width: 0px +.rounded-lg { + border-radius: 0.5rem; } -.border-y-0 { - border-top-width: 0px; - border-bottom-width: 0px +.rounded-md { + border-radius: 0.375rem; } -.border-t-\[1px\] { - border-top-width: 1px +.rounded-b-\[20px\] { + border-bottom-right-radius: 20px; + border-bottom-left-radius: 20px; +} + +.rounded-l-\[34px\] { + border-top-left-radius: 34px; + border-bottom-left-radius: 34px; +} + +.rounded-r-\[34px\] { + border-top-right-radius: 34px; + border-bottom-right-radius: 34px; +} + +.border-\[1px\] { + border-width: 1px; +} + +.border { + border-width: 1px; } .border-solid { - border-style: solid + border-style: solid; } -.border-yellow-200 { +.border-\[\#859096\] { --tw-border-opacity: 1; - border-color: rgb(254 240 138 / var(--tw-border-opacity)) + border-color: rgb(133 144 150 / var(--tw-border-opacity)); } -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)) +.border-\[\#A8B0B4\] { + --tw-border-opacity: 1; + border-color: rgb(168 176 180 / var(--tw-border-opacity)); +} + +.border-\[\#0053D0\] { + --tw-border-opacity: 1; + border-color: rgb(0 83 208 / var(--tw-border-opacity)); +} + +.border-primary-light { + --tw-border-opacity: 1; + border-color: rgb(0 83 208 / var(--tw-border-opacity)); +} + +.border-opacity-60 { + --tw-border-opacity: 0.6; } .bg-white { --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)) + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } -.bg-\[\#fbd561\] { +.bg-\[\#D9E7ED\] { --tw-bg-opacity: 1; - background-color: rgb(251 213 97 / var(--tw-bg-opacity)) + background-color: rgb(217 231 237 / var(--tw-bg-opacity)); } -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem +.bg-secondary-bg-light { + --tw-bg-opacity: 1; + background-color: rgb(243 246 247 / var(--tw-bg-opacity)); +} + +.bg-primary-bg-light { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-card-bg-light { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-card-desc-bg-light { + --tw-bg-opacity: 1; + background-color: rgb(217 231 237 / var(--tw-bg-opacity)); +} + +.bg-\[\#48F6C2\] { + --tw-bg-opacity: 1; + background-color: rgb(72 246 194 / var(--tw-bg-opacity)); +} + +.bg-\[\#fff\] { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.bg-\[\#0197FF\] { + --tw-bg-opacity: 1; + background-color: rgb(1 151 255 / var(--tw-bg-opacity)); +} + +.bg-\[\#0053D0\] { + --tw-bg-opacity: 1; + background-color: rgb(0 83 208 / var(--tw-bg-opacity)); +} + +.bg-\[\#17203D\] { + --tw-bg-opacity: 1; + background-color: rgb(23 32 61 / var(--tw-bg-opacity)); +} + +.bg-black { + --tw-bg-opacity: 1; + background-color: rgb(13 14 18 / var(--tw-bg-opacity)); +} + +.bg-\[\#F0F1F2\] { + --tw-bg-opacity: 1; + background-color: rgb(240 241 242 / var(--tw-bg-opacity)); +} + +.bg-primary-light { + --tw-bg-opacity: 1; + background-color: rgb(0 83 208 / var(--tw-bg-opacity)); +} + +.bg-transparent { + background-color: transparent; +} + +.bg-\[\#F3F6F7\] { + --tw-bg-opacity: 1; + background-color: rgb(243 246 247 / var(--tw-bg-opacity)); +} + +.bg-\[\#D9ECFF\] { + --tw-bg-opacity: 1; + background-color: rgb(217 236 255 / var(--tw-bg-opacity)); +} + +.fill-grey-black { + fill: #3F484B; +} + +.fill-primary-light { + fill: #0053D0; +} + +.fill-black { + fill: #0D0E12; +} + +.p-6 { + padding: 1.5rem; +} + +.p-4 { + padding: 1rem; +} + +.p-3 { + padding: 0.75rem; +} + +.p-2 { + padding: 0.5rem; +} + +.p-1 { + padding: 0.25rem; +} + +.py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; +} + +.px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-\[85px\] { + padding-top: 85px; + padding-bottom: 85px; +} + +.px-\[34px\] { + padding-left: 34px; + padding-right: 34px; +} + +.py-\[60px\] { + padding-top: 60px; + padding-bottom: 60px; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-12 { + padding-top: 3rem; + padding-bottom: 3rem; } .px-6 { padding-left: 1.5rem; - padding-right: 1.5rem -} - -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem -} - -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem + padding-right: 1.5rem; } .py-6 { padding-top: 1.5rem; - padding-bottom: 1.5rem + padding-bottom: 1.5rem; } -.text-xl { - font-size: 1.25rem; - line-height: 1.75rem +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.px-8 { + padding-left: 2rem; + padding-right: 2rem; +} + +.py-\[20px\] { + padding-top: 20px; + padding-bottom: 20px; +} + +.py-\[50px\] { + padding-top: 50px; + padding-bottom: 50px; +} + +.py-\[24px\] { + padding-top: 24px; + padding-bottom: 24px; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.py-\[10px\] { + padding-top: 10px; + padding-bottom: 10px; +} + +.px-20 { + padding-left: 5rem; + padding-right: 5rem; +} + +.py-\[80px\] { + padding-top: 80px; + padding-bottom: 80px; +} + +.py-\[90px\] { + padding-top: 90px; + padding-bottom: 90px; +} + +.px-0 { + padding-left: 0px; + padding-right: 0px; +} + +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} + +.py-5 { + padding-top: 1.25rem; + padding-bottom: 1.25rem; +} + +.pt-4 { + padding-top: 1rem; +} + +.pt-\[66px\] { + padding-top: 66px; +} + +.pt-\[30px\] { + padding-top: 30px; +} + +.pt-\[40px\] { + padding-top: 40px; +} + +.pt-\[106px\] { + padding-top: 106px; +} + +.pb-\[90px\] { + padding-bottom: 90px; +} + +.pt-5 { + padding-top: 1.25rem; +} + +.pb-8 { + padding-bottom: 2rem; +} + +.pt-2 { + padding-top: 0.5rem; +} + +.text-center { + text-align: center; +} + +.text-\[38px\] { + font-size: 38px; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; } .text-sm { font-size: 0.875rem; - line-height: 1.25rem -} - -.text-\[1\.4rem\] { - font-size: 1.4rem -} - -.text-\[1\.2rem\] { - font-size: 1.2rem + line-height: 1.25rem; } .text-base { font-size: 1rem; - line-height: 1.5rem + line-height: 1.5rem; +} + +.text-\[45px\] { + font-size: 45px; +} + +.text-\[20px\] { + font-size: 20px; +} + +.text-\[16px\] { + font-size: 16px; +} + +.text-\[18px\] { + font-size: 18px; +} + +.text-\[14px\] { + font-size: 14px; +} + +.text-\[12px\] { + font-size: 12px; +} + +.text-\[35px\] { + font-size: 35px; +} + +.text-\[28px\] { + font-size: 28px; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.text-\[25px\] { + font-size: 25px; +} + +.font-bold { + font-weight: 700; } .font-medium { - font-weight: 500 + font-weight: 500; } -.tracking-\[1px\] { - letter-spacing: 1px +.font-normal { + font-weight: 400; +} + +.font-light { + font-weight: 300; +} + +.leading-\[28px\] { + line-height: 28px; +} + +.leading-\[26px\] { + line-height: 26px; +} + +.leading-6 { + line-height: 1.5rem; +} + +.leading-\[43px\] { + line-height: 43px; +} + +.leading-\[36px\] { + line-height: 36px; +} + +.leading-\[19px\] { + line-height: 19px; +} + +.leading-\[46px\] { + line-height: 46px; +} + +.leading-\[24px\] { + line-height: 24px; +} + +.leading-\[34px\] { + line-height: 34px; +} + +.leading-\[33px\] { + line-height: 33px; +} + +.tracking-\[0\.03em\] { + letter-spacing: 0.03em; +} + +.tracking-\[0\.01em\] { + letter-spacing: 0.01em; +} + +.tracking-\[0\.02em\] { + letter-spacing: 0.02em; +} + +.tracking-\[0\.04em\] { + letter-spacing: 0.04em; +} + +.tracking-\[0\.06em\] { + letter-spacing: 0.06em; +} + +.text-active-blue { + --tw-text-opacity: 1; + color: rgb(1 151 255 / var(--tw-text-opacity)); +} + +.text-grey-black { + --tw-text-opacity: 1; + color: rgb(63 72 75 / var(--tw-text-opacity)); +} + +.text-\[\#A8B0B4\] { + --tw-text-opacity: 1; + color: rgb(168 176 180 / var(--tw-text-opacity)); +} + +.text-primary-light { + --tw-text-opacity: 1; + color: rgb(0 83 208 / var(--tw-text-opacity)); +} + +.text-black { + --tw-text-opacity: 1; + color: rgb(13 14 18 / var(--tw-text-opacity)); +} + +.text-\[\#DD0000\] { + --tw-text-opacity: 1; + color: rgb(221 0 0 / var(--tw-text-opacity)); +} + +.text-\[\#606C71\] { + --tw-text-opacity: 1; + color: rgb(96 108 113 / var(--tw-text-opacity)); +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.underline { + text-decoration-line: underline; +} + +.no-underline { + text-decoration-line: none; +} + +.underline-offset-2 { + text-underline-offset: 2px; +} + +.underline-offset-4 { + text-underline-offset: 4px; +} + +.opacity-100 { + opacity: 1; +} + +.shadow-\[0px_20px_30px_rgba\(0\2c 0\2c 0\2c 0\.12\)\] { + --tw-shadow: 0px 20px 30px rgba(0,0,0,0.12); + --tw-shadow-colored: 0px 20px 30px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_50px_61px_rgba\(0\2c 0\2c 0\2c 0\.12\)\] { + --tw-shadow: 0px 50px 61px rgba(0,0,0,0.12); + --tw-shadow-colored: 0px 50px 61px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[2px_2px_0px_\#859096\] { + --tw-shadow: 2px 2px 0px #859096; + --tw-shadow-colored: 2px 2px 0px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[inset_0px_2px_2px_rgba\(0\2c 0\2c 0\2c 0\.15\)\] { + --tw-shadow: inset 0px 2px 2px rgba(0,0,0,0.15); + --tw-shadow-colored: inset 0px 2px 2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0px_3px_12px_rgba\(0\2c 0\2c 0\2c 0\.2\)\] { + --tw-shadow: 0px 3px 12px rgba(0,0,0,0.2); + --tw-shadow-colored: 0px 3px 12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.blur { + --tw-blur: blur(8px); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.invert { + --tw-invert: invert(100%); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .filter { - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .transition { @@ -242,60 +1924,661 @@ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms + transition-duration: 150ms; } -.hover\:underline:hover { - text-decoration-line: underline +.before\:absolute::before { + content: var(--tw-content); + position: absolute; } -.hover\:shadow-md:hover { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) +.before\:h-full::before { + content: var(--tw-content); + height: 100%; +} + +.before\:w-full::before { + content: var(--tw-content); + width: 100%; +} + +.before\:bg-black::before { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(13 14 18 / var(--tw-bg-opacity)); +} + +.before\:bg-secondary-bg-light::before { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(243 246 247 / var(--tw-bg-opacity)); +} + +.before\:opacity-90::before { + content: var(--tw-content); + opacity: 0.9; +} + +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.dark .dark\:block { + display: block; +} + +.dark .dark\:inline-block { + display: inline-block; +} + +.dark .dark\:hidden { + display: none; +} + +.dark .dark\:rounded-\[6px\] { + border-radius: 6px; +} + +.dark .dark\:border { + border-width: 1px; +} + +.dark .dark\:border-none { + border-style: none; +} + +.dark .dark\:border-white { + --tw-border-opacity: 1; + border-color: rgb(255 255 255 / var(--tw-border-opacity)); +} + +.dark .dark\:border-primary-dark { + --tw-border-opacity: 1; + border-color: rgb(112 240 249 / var(--tw-border-opacity)); +} + +.dark .dark\:bg-\[\#11182F\] { + --tw-bg-opacity: 1; + background-color: rgb(17 24 47 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-\[\#17203D\] { + --tw-bg-opacity: 1; + background-color: rgb(23 32 61 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-secondary-bg-dark { + --tw-bg-opacity: 1; + background-color: rgb(17 24 47 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-transparent { + background-color: transparent; +} + +.dark .dark\:bg-primary-bg-dark { + --tw-bg-opacity: 1; + background-color: rgb(12 11 19 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-card-bg-dark { + --tw-bg-opacity: 1; + background-color: rgb(23 32 61 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-card-desc-bg-dark { + --tw-bg-opacity: 1; + background-color: rgb(27 50 92 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-grey-black { + --tw-bg-opacity: 1; + background-color: rgb(63 72 75 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-\[\#171F3A\] { + --tw-bg-opacity: 1; + background-color: rgb(23 31 58 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-\[\#0E2B57\] { + --tw-bg-opacity: 1; + background-color: rgb(14 43 87 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-primary-dark { + --tw-bg-opacity: 1; + background-color: rgb(112 240 249 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-\[\#0C0B13\] { + --tw-bg-opacity: 1; + background-color: rgb(12 11 19 / var(--tw-bg-opacity)); +} + +.dark .dark\:bg-\[rgba\(112\2c 240\2c 249\2c 0\.2\)\] { + background-color: rgba(112,240,249,0.2); +} + +.dark .dark\:bg-opacity-\[0\.2\] { + --tw-bg-opacity: 0.2; +} + +.dark .dark\:bg-gradient-radial-mobile { + background-image: radial-gradient(77.4% 73.09% at -3.68% 100%, #17203D 0%, #0C0B13 100%); +} + +.dark .dark\:fill-white { + fill: #fff; +} + +.dark .dark\:fill-primary-dark { + fill: #70F0F9; +} + +.dark .dark\:text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.dark .dark\:text-\[\#70F0F9\] { + --tw-text-opacity: 1; + color: rgb(112 240 249 / var(--tw-text-opacity)); +} + +.dark .dark\:text-primary-dark { + --tw-text-opacity: 1; + color: rgb(112 240 249 / var(--tw-text-opacity)); +} + +.dark .dark\:text-black { + --tw-text-opacity: 1; + color: rgb(13 14 18 / var(--tw-text-opacity)); +} + +.dark .dark\:opacity-\[0\.2\] { + opacity: 0.2; +} + +.dark .dark\:opacity-\[0\.1\] { + opacity: 0.1; +} + +.dark .dark\:shadow-none { + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.dark .dark\:before\:bg-white::before { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.dark .dark\:before\:bg-primary-bg-dark::before { + content: var(--tw-content); + --tw-bg-opacity: 1; + background-color: rgb(12 11 19 / var(--tw-bg-opacity)); } @media (min-width: 640px) { - .sm\:bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)) + .sm\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); } - .sm\:px-8 { - padding-left: 2rem; - padding-right: 2rem + .sm\:p-14 { + padding: 3.5rem; } - .sm\:py-12 { - padding-top: 3rem; - padding-bottom: 3rem + .sm\:px-1 { + padding-left: 0.25rem; + padding-right: 0.25rem; + } + + .sm\:px-4 { + padding-left: 1rem; + padding-right: 1rem; } } @media (min-width: 768px) { - .md\:px-12 { - padding-left: 3rem; - padding-right: 3rem + .md\:static { + position: static; } - .md\:px-16 { - padding-left: 4rem; - padding-right: 4rem + .md\:mt-6 { + margin-top: 1.5rem; + } + + .md\:mb-6 { + margin-bottom: 1.5rem; + } + + .md\:mb-0 { + margin-bottom: 0px; + } + + .md\:block { + display: block; + } + + .md\:inline-block { + display: inline-block; + } + + .md\:flex { + display: flex; + } + + .md\:hidden { + display: none; + } + + .md\:h-fit { + height: -moz-fit-content; + height: fit-content; + } + + .md\:max-h-\[660px\] { + max-height: 660px; + } + + .md\:min-h-fit { + min-height: -moz-fit-content; + min-height: fit-content; + } + + .md\:w-\[168px\] { + width: 168px; + } + + .md\:w-fit { + width: -moz-fit-content; + width: fit-content; + } + + .md\:max-w-\[490px\] { + max-width: 490px; + } + + .md\:max-w-\[1276px\] { + max-width: 1276px; + } + + .md\:flex-1 { + flex: 1 1 0%; + } + + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .md\:flex-row { + flex-direction: row; + } + + .md\:flex-col-reverse { + flex-direction: column-reverse; + } + + .md\:items-start { + align-items: flex-start; + } + + .md\:items-center { + align-items: center; + } + + .md\:p-10 { + padding: 2.5rem; + } + + .md\:p-\[60px\] { + padding: 60px; + } + + .md\:py-8 { + padding-top: 2rem; + padding-bottom: 2rem; + } + + .md\:px-10 { + padding-left: 2.5rem; + padding-right: 2.5rem; + } + + .md\:px-0 { + padding-left: 0px; + padding-right: 0px; + } + + .md\:py-7 { + padding-top: 1.75rem; + padding-bottom: 1.75rem; + } + + .md\:text-left { + text-align: left; + } + + .md\:text-xl { + font-size: 1.25rem; + line-height: 1.75rem; + } + + .md\:text-\[55px\] { + font-size: 55px; + } + + .md\:text-\[38px\] { + font-size: 38px; + } + + .md\:text-\[35px\] { + font-size: 35px; + } + + .md\:leading-\[63px\] { + line-height: 63px; + } + + .md\:leading-\[43px\] { + line-height: 43px; + } + + .dark .dark\:md\:inline-block { + display: inline-block; } } @media (min-width: 1024px) { + .lg\:absolute { + position: absolute; + } + + .lg\:relative { + position: relative; + } + + .lg\:top-0 { + top: 0px; + } + + .lg\:mb-20 { + margin-bottom: 5rem; + } + + .lg\:mt-0 { + margin-top: 0px; + } + + .lg\:mt-\[10px\] { + margin-top: 10px; + } + + .lg\:mb-0 { + margin-bottom: 0px; + } + .lg\:flex { - display: flex + display: flex; } - .lg\:px-16 { - padding-left: 4rem; - padding-right: 4rem + .lg\:hidden { + display: none; } - .lg\:px-20 { - padding-left: 5rem; - padding-right: 5rem + .lg\:h-auto { + height: auto; + } + + .lg\:h-fit { + height: -moz-fit-content; + height: fit-content; + } + + .lg\:w-auto { + width: auto; + } + + .lg\:max-w-\[448px\] { + max-width: 448px; + } + + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .lg\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .lg\:flex-row { + flex-direction: row; + } + + .lg\:items-start { + align-items: flex-start; + } + + .lg\:items-center { + align-items: center; + } + + .lg\:gap-\[350px\] { + gap: 350px; + } + + .lg\:gap-10 { + gap: 2.5rem; + } + + .lg\:bg-transparent { + background-color: transparent; + } + + .lg\:bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); + } + + .lg\:px-7 { + padding-left: 1.75rem; + padding-right: 1.75rem; + } + + .lg\:py-0 { + padding-top: 0px; + padding-bottom: 0px; + } + + .lg\:py-5 { + padding-top: 1.25rem; + padding-bottom: 1.25rem; + } + + .lg\:py-4 { + padding-top: 1rem; + padding-bottom: 1rem; + } + + .lg\:px-\[20px\] { + padding-left: 20px; + padding-right: 20px; + } + + .lg\:py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + } + + .lg\:px-5 { + padding-left: 1.25rem; + padding-right: 1.25rem; + } + + .lg\:px-\[50px\] { + padding-left: 50px; + padding-right: 50px; + } + + .lg\:py-\[50px\] { + padding-top: 50px; + padding-bottom: 50px; + } + + .lg\:pt-0 { + padding-top: 0px; + } + + .lg\:text-left { + text-align: left; + } + + .lg\:text-\[45px\] { + font-size: 45px; + } + + .lg\:text-\[65px\] { + font-size: 65px; + } + + .lg\:text-\[35px\] { + font-size: 35px; + } + + .lg\:leading-\[45px\] { + line-height: 45px; + } + + .lg\:shadow-\[0_0_3px_rgb\(60_72_88_\/_15\%\)\] { + --tw-shadow: 0 0 3px rgb(60 72 88 / 15%); + --tw-shadow-colored: 0 0 3px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + } + + .dark .dark\:lg\:flex { + display: flex; + } + + .dark .dark\:lg\:hidden { + display: none; + } + + .dark .dark\:lg\:bg-black { + --tw-bg-opacity: 1; + background-color: rgb(13 14 18 / var(--tw-bg-opacity)); + } + + .dark .dark\:lg\:bg-gradient-radial { + background-image: radial-gradient(88.77% 102.03% at 92.64% -13.22%, #17203D 0%, #0C0B13 100%); + } + + .dark .dark\:lg\:bg-none { + background-image: none; + } +} + +@media (min-width: 1280px) { + .xl\:absolute { + position: absolute; + } + + .xl\:sticky { + position: sticky; + } + + .xl\:mb-8 { + margin-bottom: 2rem; + } + + .xl\:mb-\[25px\] { + margin-bottom: 25px; + } + + .xl\:mb-0 { + margin-bottom: 0px; + } + + .xl\:block { + display: block; + } + + .xl\:flex { + display: flex; + } + + .xl\:hidden { + display: none; + } + + .xl\:h-\[calc\(100vh-66px\)\] { + height: calc(100vh - 66px); + } + + .xl\:h-full { + height: 100%; + } + + .xl\:max-h-\[888px\] { + max-height: 888px; + } + + .xl\:min-w-\[600px\] { + min-width: 600px; + } + + .xl\:max-w-\[600px\] { + max-width: 600px; + } + + .xl\:flex-row { + flex-direction: row; + } + + .xl\:flex-row-reverse { + flex-direction: row-reverse; + } + + .xl\:items-start { + align-items: flex-start; + } + + .xl\:items-center { + align-items: center; + } + + .xl\:justify-start { + justify-content: flex-start; + } + + .xl\:justify-between { + justify-content: space-between; + } + + .xl\:justify-around { + justify-content: space-around; + } + + .xl\:gap-10 { + gap: 2.5rem; + } + + .xl\:text-left { + text-align: left; + } + + .xl\:text-justify { + text-align: justify; + } + + .xl\:text-\[16px\] { + font-size: 16px; } } diff --git a/fonts/GilroyBold/font.woff b/fonts/GilroyBold/font.woff new file mode 100644 index 000000000..1f252b0ba Binary files /dev/null and b/fonts/GilroyBold/font.woff differ diff --git a/fonts/GilroyBold/font.woff2 b/fonts/GilroyBold/font.woff2 new file mode 100644 index 000000000..687474f86 Binary files /dev/null and b/fonts/GilroyBold/font.woff2 differ diff --git a/fonts/GilroyLight/font.woff b/fonts/GilroyLight/font.woff new file mode 100644 index 000000000..903d99d45 Binary files /dev/null and b/fonts/GilroyLight/font.woff differ diff --git a/fonts/GilroyLight/font.woff2 b/fonts/GilroyLight/font.woff2 new file mode 100644 index 000000000..f4d4fc3e0 Binary files /dev/null and b/fonts/GilroyLight/font.woff2 differ diff --git a/fonts/GilroyMedium/font.woff b/fonts/GilroyMedium/font.woff new file mode 100644 index 000000000..3dd51a978 Binary files /dev/null and b/fonts/GilroyMedium/font.woff differ diff --git a/fonts/GilroyMedium/font.woff2 b/fonts/GilroyMedium/font.woff2 new file mode 100644 index 000000000..895b6d4f1 Binary files /dev/null and b/fonts/GilroyMedium/font.woff2 differ diff --git a/fonts/GilroyRegular/font.woff b/fonts/GilroyRegular/font.woff new file mode 100644 index 000000000..115ae73df Binary files /dev/null and b/fonts/GilroyRegular/font.woff differ diff --git a/fonts/GilroyRegular/font.woff2 b/fonts/GilroyRegular/font.woff2 new file mode 100644 index 000000000..24465fb7d Binary files /dev/null and b/fonts/GilroyRegular/font.woff2 differ diff --git a/fonts/GilroyRegularItalic/font.woff b/fonts/GilroyRegularItalic/font.woff new file mode 100644 index 000000000..1f69fc1e6 Binary files /dev/null and b/fonts/GilroyRegularItalic/font.woff differ diff --git a/fonts/GilroyRegularItalic/font.woff2 b/fonts/GilroyRegularItalic/font.woff2 new file mode 100644 index 000000000..ef01c8d5d Binary files /dev/null and b/fonts/GilroyRegularItalic/font.woff2 differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0000.png b/hero-phone-dark/fastImages/Darkphone1_0000.png deleted file mode 100755 index 34bb016b2..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0000.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0001.png b/hero-phone-dark/fastImages/Darkphone1_0001.png deleted file mode 100755 index efb34f377..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0001.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0002.png b/hero-phone-dark/fastImages/Darkphone1_0002.png deleted file mode 100755 index 156e11e35..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0002.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0003.png b/hero-phone-dark/fastImages/Darkphone1_0003.png deleted file mode 100755 index cda4b4eb7..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0003.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0004.png b/hero-phone-dark/fastImages/Darkphone1_0004.png deleted file mode 100755 index ce551e6ae..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0004.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0005.png b/hero-phone-dark/fastImages/Darkphone1_0005.png deleted file mode 100755 index b6ee335ed..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0005.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0006.png b/hero-phone-dark/fastImages/Darkphone1_0006.png deleted file mode 100755 index 9dd6ade3f..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0006.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0007.png b/hero-phone-dark/fastImages/Darkphone1_0007.png deleted file mode 100755 index dcf6742bf..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0007.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0008.png b/hero-phone-dark/fastImages/Darkphone1_0008.png deleted file mode 100755 index c64579f94..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0008.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0009.png b/hero-phone-dark/fastImages/Darkphone1_0009.png deleted file mode 100755 index 3ad736a7b..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0009.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0010.png b/hero-phone-dark/fastImages/Darkphone1_0010.png deleted file mode 100755 index 9d7e62ada..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0010.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0011.png b/hero-phone-dark/fastImages/Darkphone1_0011.png deleted file mode 100755 index eba6d7467..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0011.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0012.png b/hero-phone-dark/fastImages/Darkphone1_0012.png deleted file mode 100755 index 2bd96c63c..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0012.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0013.png b/hero-phone-dark/fastImages/Darkphone1_0013.png deleted file mode 100755 index 375acf74a..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0013.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0014.png b/hero-phone-dark/fastImages/Darkphone1_0014.png deleted file mode 100755 index 98e9f8d2d..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0014.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0015.png b/hero-phone-dark/fastImages/Darkphone1_0015.png deleted file mode 100755 index 1eefe5791..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0015.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0016.png b/hero-phone-dark/fastImages/Darkphone1_0016.png deleted file mode 100755 index 7287785f7..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0016.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0017.png b/hero-phone-dark/fastImages/Darkphone1_0017.png deleted file mode 100755 index 9654acdb3..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0017.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0018.png b/hero-phone-dark/fastImages/Darkphone1_0018.png deleted file mode 100755 index 51085c2b2..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0018.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0019.png b/hero-phone-dark/fastImages/Darkphone1_0019.png deleted file mode 100755 index a6297a678..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0019.png and /dev/null differ diff --git a/hero-phone-dark/fastImages/Darkphone1_0020.png b/hero-phone-dark/fastImages/Darkphone1_0020.png deleted file mode 100755 index d23dbb2b1..000000000 Binary files a/hero-phone-dark/fastImages/Darkphone1_0020.png and /dev/null differ diff --git a/hero-phone-dark/index.html b/hero-phone-dark/index.html deleted file mode 100644 index a79b4d53c..000000000 --- a/hero-phone-dark/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - Page Title - - - - - - - - - \ No newline at end of file diff --git a/hero-phone-dark/index.js b/hero-phone-dark/index.js deleted file mode 100644 index 0e47feb88..000000000 --- a/hero-phone-dark/index.js +++ /dev/null @@ -1,69 +0,0 @@ -(function () { - -const fastImages = mkSequence("./fastImages/Darkphone1_", 0, 20, ".png") -const slowImages = mkSequence("./slowImages/Darkphone1_", 8, 38, ".png") - - -let complete = false -run() -window.onload = run - -function mkSequence(prefix, from, to, ext) { - const seq = [] - for (let n = from; n <= to; n++) { - let suffix = '' + n - suffix = '0'.repeat(4 - suffix.length) + suffix - seq.push(prefix + suffix + ext) - } - return seq -} - -async function run() { - const imageEl = document.getElementById("hero-phone"); - const preloadEl = document.getElementById("hero-phone-preload"); - if (complete || !imageEl || !preloadEl) return - complete = true - await preload(fastImages.concat(slowImages)) - await animate(fastImages, 100) - await animate(slowImages, 500) - - async function preload(images) { - let imgEls = [] - let resolved = false - return new Promise((resolve) => { - setTimeout(() => { - if (!resolved) { - resolved = true - resolve() - } - }, 2000) - for (const img of images) { - const el = document.createElement("img"); - el.src = img - imgEls.push(el) - preloadEl.appendChild(el) - const loaded = () => { - imgEls = imgEls.filter((e) => e !== el) - if (imgEls.length === 0 && !resolved) { - resolved = true - resolve() - } - } - el.addEventListener('load', loaded) - el.addEventListener('error', loaded) - } - }) - } - - async function animate(images, ms) { - for (const img of images) { - imageEl.src = img - await delay(ms) - } - } - - async function delay(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)) - } -} -})(); diff --git a/hero-phone-dark/slowImages/Darkphone1_0008.png b/hero-phone-dark/slowImages/Darkphone1_0008.png deleted file mode 100755 index 1a382a482..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0008.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0009.png b/hero-phone-dark/slowImages/Darkphone1_0009.png deleted file mode 100755 index 19098b123..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0009.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0010.png b/hero-phone-dark/slowImages/Darkphone1_0010.png deleted file mode 100755 index 4eab6ca91..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0010.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0011.png b/hero-phone-dark/slowImages/Darkphone1_0011.png deleted file mode 100755 index fc58aa26d..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0011.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0012.png b/hero-phone-dark/slowImages/Darkphone1_0012.png deleted file mode 100755 index 3e3afa88a..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0012.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0013.png b/hero-phone-dark/slowImages/Darkphone1_0013.png deleted file mode 100755 index 677af0444..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0013.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0014.png b/hero-phone-dark/slowImages/Darkphone1_0014.png deleted file mode 100755 index 22aeb98b4..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0014.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0015.png b/hero-phone-dark/slowImages/Darkphone1_0015.png deleted file mode 100755 index 15a2673fa..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0015.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0016.png b/hero-phone-dark/slowImages/Darkphone1_0016.png deleted file mode 100755 index 370925f1a..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0016.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0017.png b/hero-phone-dark/slowImages/Darkphone1_0017.png deleted file mode 100755 index ce60f54c9..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0017.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0018.png b/hero-phone-dark/slowImages/Darkphone1_0018.png deleted file mode 100755 index be0d44199..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0018.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0019.png b/hero-phone-dark/slowImages/Darkphone1_0019.png deleted file mode 100755 index f53ff45d8..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0019.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0020.png b/hero-phone-dark/slowImages/Darkphone1_0020.png deleted file mode 100755 index c8c18d0fc..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0020.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0021.png b/hero-phone-dark/slowImages/Darkphone1_0021.png deleted file mode 100755 index 9a6c92ef8..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0021.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0022.png b/hero-phone-dark/slowImages/Darkphone1_0022.png deleted file mode 100755 index be4885390..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0022.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0023.png b/hero-phone-dark/slowImages/Darkphone1_0023.png deleted file mode 100755 index fcf1bb6ac..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0023.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0024.png b/hero-phone-dark/slowImages/Darkphone1_0024.png deleted file mode 100755 index 45630e9c6..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0024.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0025.png b/hero-phone-dark/slowImages/Darkphone1_0025.png deleted file mode 100755 index db8571560..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0025.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0026.png b/hero-phone-dark/slowImages/Darkphone1_0026.png deleted file mode 100755 index b40bcfe8b..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0026.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0027.png b/hero-phone-dark/slowImages/Darkphone1_0027.png deleted file mode 100755 index 4c7324855..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0027.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0028.png b/hero-phone-dark/slowImages/Darkphone1_0028.png deleted file mode 100755 index 5c11f4a1f..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0028.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0029.png b/hero-phone-dark/slowImages/Darkphone1_0029.png deleted file mode 100755 index b6b135e24..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0029.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0030.png b/hero-phone-dark/slowImages/Darkphone1_0030.png deleted file mode 100755 index 1439dbadc..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0030.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0031.png b/hero-phone-dark/slowImages/Darkphone1_0031.png deleted file mode 100755 index c72504f3e..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0031.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0032.png b/hero-phone-dark/slowImages/Darkphone1_0032.png deleted file mode 100755 index a861ca601..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0032.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0033.png b/hero-phone-dark/slowImages/Darkphone1_0033.png deleted file mode 100755 index f71b0d393..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0033.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0034.png b/hero-phone-dark/slowImages/Darkphone1_0034.png deleted file mode 100755 index 2db2227f1..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0034.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0035.png b/hero-phone-dark/slowImages/Darkphone1_0035.png deleted file mode 100755 index a155d7360..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0035.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0036.png b/hero-phone-dark/slowImages/Darkphone1_0036.png deleted file mode 100755 index b257823ea..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0036.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0037.png b/hero-phone-dark/slowImages/Darkphone1_0037.png deleted file mode 100755 index ac18b5f86..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0037.png and /dev/null differ diff --git a/hero-phone-dark/slowImages/Darkphone1_0038.png b/hero-phone-dark/slowImages/Darkphone1_0038.png deleted file mode 100755 index ce2402fca..000000000 Binary files a/hero-phone-dark/slowImages/Darkphone1_0038.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0000.png b/hero-phone/fastImages/Lightphone1_0000.png deleted file mode 100755 index 35d9868e8..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0000.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0001.png b/hero-phone/fastImages/Lightphone1_0001.png deleted file mode 100755 index 198ea1b67..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0001.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0002.png b/hero-phone/fastImages/Lightphone1_0002.png deleted file mode 100755 index a959d98b8..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0002.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0003.png b/hero-phone/fastImages/Lightphone1_0003.png deleted file mode 100755 index 33e36b7bc..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0003.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0004.png b/hero-phone/fastImages/Lightphone1_0004.png deleted file mode 100755 index e24fff123..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0004.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0005.png b/hero-phone/fastImages/Lightphone1_0005.png deleted file mode 100755 index 4cff81ac5..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0005.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0006.png b/hero-phone/fastImages/Lightphone1_0006.png deleted file mode 100755 index 155f63b6d..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0006.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0007.png b/hero-phone/fastImages/Lightphone1_0007.png deleted file mode 100755 index de32cccb0..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0007.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0008.png b/hero-phone/fastImages/Lightphone1_0008.png deleted file mode 100755 index 5d5c60cec..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0008.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0009.png b/hero-phone/fastImages/Lightphone1_0009.png deleted file mode 100755 index 3cf80f764..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0009.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0010.png b/hero-phone/fastImages/Lightphone1_0010.png deleted file mode 100755 index e32802235..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0010.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0011.png b/hero-phone/fastImages/Lightphone1_0011.png deleted file mode 100755 index 5573cb959..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0011.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0012.png b/hero-phone/fastImages/Lightphone1_0012.png deleted file mode 100755 index e15705b88..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0012.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0013.png b/hero-phone/fastImages/Lightphone1_0013.png deleted file mode 100755 index ed0bffdd0..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0013.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0014.png b/hero-phone/fastImages/Lightphone1_0014.png deleted file mode 100755 index 76ee83a03..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0014.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0015.png b/hero-phone/fastImages/Lightphone1_0015.png deleted file mode 100755 index a1ce1e6d9..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0015.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0016.png b/hero-phone/fastImages/Lightphone1_0016.png deleted file mode 100755 index c6c093568..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0016.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0017.png b/hero-phone/fastImages/Lightphone1_0017.png deleted file mode 100755 index 1df940929..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0017.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0018.png b/hero-phone/fastImages/Lightphone1_0018.png deleted file mode 100755 index d0a757bcc..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0018.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0019.png b/hero-phone/fastImages/Lightphone1_0019.png deleted file mode 100755 index 47d341737..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0019.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0020.png b/hero-phone/fastImages/Lightphone1_0020.png deleted file mode 100755 index 99265663d..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0020.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0021.png b/hero-phone/fastImages/Lightphone1_0021.png deleted file mode 100755 index 72c4888a2..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0021.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0022.png b/hero-phone/fastImages/Lightphone1_0022.png deleted file mode 100755 index 3ee1d8079..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0022.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0023.png b/hero-phone/fastImages/Lightphone1_0023.png deleted file mode 100755 index f7174ec1b..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0023.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0024.png b/hero-phone/fastImages/Lightphone1_0024.png deleted file mode 100755 index c4cf27806..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0024.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0025.png b/hero-phone/fastImages/Lightphone1_0025.png deleted file mode 100755 index 4b2ce3d8b..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0025.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0026.png b/hero-phone/fastImages/Lightphone1_0026.png deleted file mode 100755 index f6a04a849..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0026.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0027.png b/hero-phone/fastImages/Lightphone1_0027.png deleted file mode 100755 index ceae3841b..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0027.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0028.png b/hero-phone/fastImages/Lightphone1_0028.png deleted file mode 100755 index 4eb47eda2..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0028.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0029.png b/hero-phone/fastImages/Lightphone1_0029.png deleted file mode 100755 index abbdbd43d..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0029.png and /dev/null differ diff --git a/hero-phone/fastImages/Lightphone1_0030.png b/hero-phone/fastImages/Lightphone1_0030.png deleted file mode 100755 index 651fe8408..000000000 Binary files a/hero-phone/fastImages/Lightphone1_0030.png and /dev/null differ diff --git a/hero-phone/index.html b/hero-phone/index.html deleted file mode 100644 index a79b4d53c..000000000 --- a/hero-phone/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - Page Title - - - - - - - - - \ No newline at end of file diff --git a/hero-phone/index.js b/hero-phone/index.js deleted file mode 100644 index 7987410bd..000000000 --- a/hero-phone/index.js +++ /dev/null @@ -1,70 +0,0 @@ -(function () { - -const fastImages = mkSequence("./fastImages/Lightphone1_", 0, 30, ".png") -const slowImages = mkSequence("./slowImages1/Lightphone1_", 8, 39, ".png") -// const slowImages = mkSequence("./slowImages2/Lightphone1_", 8, 39, ".png") - - -let complete = false -run() -window.onload = run - -function mkSequence(prefix, from, to, ext) { - const seq = [] - for (let n = from; n <= to; n++) { - let suffix = '' + n - suffix = '0'.repeat(4 - suffix.length) + suffix - seq.push(prefix + suffix + ext) - } - return seq -} - -async function run() { - const imageEl = document.getElementById("hero-phone"); - const preloadEl = document.getElementById("hero-phone-preload"); - if (complete || !imageEl || !preloadEl) return - complete = true - await preload(fastImages.concat(slowImages)) - await animate(fastImages, 100) - await animate(slowImages, 500) - - async function preload(images) { - let imgEls = [] - let resolved = false - return new Promise((resolve) => { - setTimeout(() => { - if (!resolved) { - resolved = true - resolve() - } - }, 2000) - for (const img of images) { - const el = document.createElement("img"); - el.src = img - imgEls.push(el) - preloadEl.appendChild(el) - const loaded = () => { - imgEls = imgEls.filter((e) => e !== el) - if (imgEls.length === 0 && !resolved) { - resolved = true - resolve() - } - } - el.addEventListener('load', loaded) - el.addEventListener('error', loaded) - } - }) - } - - async function animate(images, ms) { - for (const img of images) { - imageEl.src = img - await delay(ms) - } - } - - async function delay(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)) - } -} -})(); diff --git a/hero-phone/slowImages1/Lightphone1_0008.jpg b/hero-phone/slowImages1/Lightphone1_0008.jpg deleted file mode 100644 index 9ba906297..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0008.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0008.png b/hero-phone/slowImages1/Lightphone1_0008.png deleted file mode 100755 index 942a9534a..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0008.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0009.jpg b/hero-phone/slowImages1/Lightphone1_0009.jpg deleted file mode 100644 index 5a70b7f14..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0009.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0009.png b/hero-phone/slowImages1/Lightphone1_0009.png deleted file mode 100755 index 0c60c44e5..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0009.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0010.jpg b/hero-phone/slowImages1/Lightphone1_0010.jpg deleted file mode 100644 index c016b0c6d..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0010.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0010.png b/hero-phone/slowImages1/Lightphone1_0010.png deleted file mode 100755 index 04807c807..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0010.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0011.jpg b/hero-phone/slowImages1/Lightphone1_0011.jpg deleted file mode 100644 index 86ceb304c..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0011.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0011.png b/hero-phone/slowImages1/Lightphone1_0011.png deleted file mode 100755 index fc9447ae2..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0011.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0012.jpg b/hero-phone/slowImages1/Lightphone1_0012.jpg deleted file mode 100644 index faacaae8c..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0012.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0012.png b/hero-phone/slowImages1/Lightphone1_0012.png deleted file mode 100755 index bfc802de2..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0012.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0013.jpg b/hero-phone/slowImages1/Lightphone1_0013.jpg deleted file mode 100644 index e1f11b872..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0013.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0013.png b/hero-phone/slowImages1/Lightphone1_0013.png deleted file mode 100755 index 59437bbaa..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0013.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0014.jpg b/hero-phone/slowImages1/Lightphone1_0014.jpg deleted file mode 100644 index 53e669c30..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0014.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0014.png b/hero-phone/slowImages1/Lightphone1_0014.png deleted file mode 100755 index 6f9e376af..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0014.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0015.jpg b/hero-phone/slowImages1/Lightphone1_0015.jpg deleted file mode 100644 index 22c0425d1..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0015.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0015.png b/hero-phone/slowImages1/Lightphone1_0015.png deleted file mode 100755 index c37618d74..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0015.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0016.jpg b/hero-phone/slowImages1/Lightphone1_0016.jpg deleted file mode 100644 index 91293b007..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0016.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0016.png b/hero-phone/slowImages1/Lightphone1_0016.png deleted file mode 100755 index ad4ab4c58..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0016.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0017.jpg b/hero-phone/slowImages1/Lightphone1_0017.jpg deleted file mode 100644 index b512c5bc5..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0017.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0017.png b/hero-phone/slowImages1/Lightphone1_0017.png deleted file mode 100755 index 24c6d3782..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0017.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0018.jpg b/hero-phone/slowImages1/Lightphone1_0018.jpg deleted file mode 100644 index c8dcca111..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0018.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0018.png b/hero-phone/slowImages1/Lightphone1_0018.png deleted file mode 100755 index 0d0a3dc8a..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0018.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0019.jpg b/hero-phone/slowImages1/Lightphone1_0019.jpg deleted file mode 100644 index 2de4f7c70..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0019.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0019.png b/hero-phone/slowImages1/Lightphone1_0019.png deleted file mode 100755 index fbfda5d7c..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0019.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0020.jpg b/hero-phone/slowImages1/Lightphone1_0020.jpg deleted file mode 100644 index 80a31632f..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0020.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0020.png b/hero-phone/slowImages1/Lightphone1_0020.png deleted file mode 100755 index 06073bf61..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0020.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0021.jpg b/hero-phone/slowImages1/Lightphone1_0021.jpg deleted file mode 100644 index 1f2ec13f1..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0021.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0021.png b/hero-phone/slowImages1/Lightphone1_0021.png deleted file mode 100755 index 7744e79f5..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0021.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0022.jpg b/hero-phone/slowImages1/Lightphone1_0022.jpg deleted file mode 100644 index 792975190..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0022.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0022.png b/hero-phone/slowImages1/Lightphone1_0022.png deleted file mode 100755 index 35e57fda5..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0022.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0023.jpg b/hero-phone/slowImages1/Lightphone1_0023.jpg deleted file mode 100644 index 0183d7490..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0023.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0023.png b/hero-phone/slowImages1/Lightphone1_0023.png deleted file mode 100755 index d284081a3..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0023.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0024.jpg b/hero-phone/slowImages1/Lightphone1_0024.jpg deleted file mode 100644 index f48db12b3..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0024.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0024.png b/hero-phone/slowImages1/Lightphone1_0024.png deleted file mode 100755 index f237a5928..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0024.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0025.jpg b/hero-phone/slowImages1/Lightphone1_0025.jpg deleted file mode 100644 index 17a153f45..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0025.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0025.png b/hero-phone/slowImages1/Lightphone1_0025.png deleted file mode 100755 index 5ce321883..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0025.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0026.jpg b/hero-phone/slowImages1/Lightphone1_0026.jpg deleted file mode 100644 index bc0bb21c2..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0026.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0026.png b/hero-phone/slowImages1/Lightphone1_0026.png deleted file mode 100755 index 68b899e07..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0026.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0027.jpg b/hero-phone/slowImages1/Lightphone1_0027.jpg deleted file mode 100644 index 8030e5ca6..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0027.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0027.png b/hero-phone/slowImages1/Lightphone1_0027.png deleted file mode 100755 index db3b76e6e..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0027.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0028.jpg b/hero-phone/slowImages1/Lightphone1_0028.jpg deleted file mode 100644 index 5d364653d..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0028.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0028.png b/hero-phone/slowImages1/Lightphone1_0028.png deleted file mode 100755 index 2ee03fefd..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0028.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0029.jpg b/hero-phone/slowImages1/Lightphone1_0029.jpg deleted file mode 100644 index 37c68d8be..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0029.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0029.png b/hero-phone/slowImages1/Lightphone1_0029.png deleted file mode 100755 index 32eb4b149..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0029.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0030.jpg b/hero-phone/slowImages1/Lightphone1_0030.jpg deleted file mode 100644 index 194799a55..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0030.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0030.png b/hero-phone/slowImages1/Lightphone1_0030.png deleted file mode 100755 index a1c3011a3..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0030.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0031.jpg b/hero-phone/slowImages1/Lightphone1_0031.jpg deleted file mode 100644 index ffa034cdd..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0031.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0031.png b/hero-phone/slowImages1/Lightphone1_0031.png deleted file mode 100755 index 6eea83932..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0031.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0032.jpg b/hero-phone/slowImages1/Lightphone1_0032.jpg deleted file mode 100644 index 466966305..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0032.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0032.png b/hero-phone/slowImages1/Lightphone1_0032.png deleted file mode 100755 index 1f137efdb..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0032.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0033.jpg b/hero-phone/slowImages1/Lightphone1_0033.jpg deleted file mode 100644 index dd2caa70b..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0033.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0033.png b/hero-phone/slowImages1/Lightphone1_0033.png deleted file mode 100755 index 925a6439c..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0033.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0034.jpg b/hero-phone/slowImages1/Lightphone1_0034.jpg deleted file mode 100644 index 765487bc9..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0034.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0034.png b/hero-phone/slowImages1/Lightphone1_0034.png deleted file mode 100755 index d4d558f36..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0034.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0035.jpg b/hero-phone/slowImages1/Lightphone1_0035.jpg deleted file mode 100644 index 2bf4657aa..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0035.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0035.png b/hero-phone/slowImages1/Lightphone1_0035.png deleted file mode 100755 index 728109cec..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0035.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0036.jpg b/hero-phone/slowImages1/Lightphone1_0036.jpg deleted file mode 100644 index 8a4aa523e..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0036.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0036.png b/hero-phone/slowImages1/Lightphone1_0036.png deleted file mode 100755 index 4b56311b6..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0036.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0037.jpg b/hero-phone/slowImages1/Lightphone1_0037.jpg deleted file mode 100644 index 7295fb42a..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0037.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0037.png b/hero-phone/slowImages1/Lightphone1_0037.png deleted file mode 100755 index 7302e01a9..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0037.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0038.jpg b/hero-phone/slowImages1/Lightphone1_0038.jpg deleted file mode 100644 index f03326f04..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0038.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0038.png b/hero-phone/slowImages1/Lightphone1_0038.png deleted file mode 100755 index a62ccac0d..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0038.png and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0039.jpg b/hero-phone/slowImages1/Lightphone1_0039.jpg deleted file mode 100644 index b7e82a4c0..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0039.jpg and /dev/null differ diff --git a/hero-phone/slowImages1/Lightphone1_0039.png b/hero-phone/slowImages1/Lightphone1_0039.png deleted file mode 100644 index 569ef3d9c..000000000 Binary files a/hero-phone/slowImages1/Lightphone1_0039.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0008.jpg b/hero-phone/slowImages2/Lightphone1_0008.jpg deleted file mode 100644 index 9ba906297..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0008.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0008.png b/hero-phone/slowImages2/Lightphone1_0008.png deleted file mode 100755 index 942a9534a..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0008.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0009.jpg b/hero-phone/slowImages2/Lightphone1_0009.jpg deleted file mode 100644 index 5a70b7f14..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0009.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0009.png b/hero-phone/slowImages2/Lightphone1_0009.png deleted file mode 100755 index 0c60c44e5..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0009.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0010.jpg b/hero-phone/slowImages2/Lightphone1_0010.jpg deleted file mode 100644 index c016b0c6d..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0010.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0010.png b/hero-phone/slowImages2/Lightphone1_0010.png deleted file mode 100755 index 04807c807..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0010.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0011.jpg b/hero-phone/slowImages2/Lightphone1_0011.jpg deleted file mode 100644 index 86ceb304c..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0011.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0011.png b/hero-phone/slowImages2/Lightphone1_0011.png deleted file mode 100755 index fc9447ae2..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0011.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0012.jpg b/hero-phone/slowImages2/Lightphone1_0012.jpg deleted file mode 100644 index faacaae8c..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0012.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0012.png b/hero-phone/slowImages2/Lightphone1_0012.png deleted file mode 100755 index bfc802de2..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0012.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0013.jpg b/hero-phone/slowImages2/Lightphone1_0013.jpg deleted file mode 100644 index e1f11b872..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0013.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0013.png b/hero-phone/slowImages2/Lightphone1_0013.png deleted file mode 100755 index 59437bbaa..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0013.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0014.jpg b/hero-phone/slowImages2/Lightphone1_0014.jpg deleted file mode 100644 index 53e669c30..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0014.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0014.png b/hero-phone/slowImages2/Lightphone1_0014.png deleted file mode 100755 index 6f9e376af..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0014.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0015.jpg b/hero-phone/slowImages2/Lightphone1_0015.jpg deleted file mode 100644 index 22c0425d1..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0015.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0015.png b/hero-phone/slowImages2/Lightphone1_0015.png deleted file mode 100755 index c37618d74..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0015.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0016.jpg b/hero-phone/slowImages2/Lightphone1_0016.jpg deleted file mode 100644 index 91293b007..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0016.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0016.png b/hero-phone/slowImages2/Lightphone1_0016.png deleted file mode 100755 index ad4ab4c58..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0016.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0017.jpg b/hero-phone/slowImages2/Lightphone1_0017.jpg deleted file mode 100644 index b512c5bc5..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0017.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0017.png b/hero-phone/slowImages2/Lightphone1_0017.png deleted file mode 100755 index 24c6d3782..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0017.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0018.jpg b/hero-phone/slowImages2/Lightphone1_0018.jpg deleted file mode 100644 index c8dcca111..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0018.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0018.png b/hero-phone/slowImages2/Lightphone1_0018.png deleted file mode 100755 index 0d0a3dc8a..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0018.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0019.jpg b/hero-phone/slowImages2/Lightphone1_0019.jpg deleted file mode 100644 index 2de4f7c70..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0019.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0019.png b/hero-phone/slowImages2/Lightphone1_0019.png deleted file mode 100755 index fbfda5d7c..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0019.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0020.jpg b/hero-phone/slowImages2/Lightphone1_0020.jpg deleted file mode 100644 index 80a31632f..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0020.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0020.png b/hero-phone/slowImages2/Lightphone1_0020.png deleted file mode 100755 index 06073bf61..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0020.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0021.jpg b/hero-phone/slowImages2/Lightphone1_0021.jpg deleted file mode 100644 index 1f2ec13f1..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0021.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0021.png b/hero-phone/slowImages2/Lightphone1_0021.png deleted file mode 100755 index 7744e79f5..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0021.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0022.jpg b/hero-phone/slowImages2/Lightphone1_0022.jpg deleted file mode 100644 index 792975190..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0022.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0022.png b/hero-phone/slowImages2/Lightphone1_0022.png deleted file mode 100755 index 35e57fda5..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0022.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0023.jpg b/hero-phone/slowImages2/Lightphone1_0023.jpg deleted file mode 100644 index 0183d7490..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0023.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0023.png b/hero-phone/slowImages2/Lightphone1_0023.png deleted file mode 100755 index d284081a3..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0023.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0024.jpg b/hero-phone/slowImages2/Lightphone1_0024.jpg deleted file mode 100644 index f48db12b3..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0024.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0024.png b/hero-phone/slowImages2/Lightphone1_0024.png deleted file mode 100755 index f237a5928..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0024.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0025.jpg b/hero-phone/slowImages2/Lightphone1_0025.jpg deleted file mode 100644 index 17a153f45..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0025.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0025.png b/hero-phone/slowImages2/Lightphone1_0025.png deleted file mode 100755 index 5ce321883..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0025.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0026.jpg b/hero-phone/slowImages2/Lightphone1_0026.jpg deleted file mode 100644 index bc0bb21c2..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0026.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0026.png b/hero-phone/slowImages2/Lightphone1_0026.png deleted file mode 100755 index 68b899e07..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0026.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0027.jpg b/hero-phone/slowImages2/Lightphone1_0027.jpg deleted file mode 100644 index 8030e5ca6..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0027.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0027.png b/hero-phone/slowImages2/Lightphone1_0027.png deleted file mode 100755 index db3b76e6e..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0027.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0028.jpg b/hero-phone/slowImages2/Lightphone1_0028.jpg deleted file mode 100644 index 5d364653d..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0028.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0028.png b/hero-phone/slowImages2/Lightphone1_0028.png deleted file mode 100755 index 2ee03fefd..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0028.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0029.jpg b/hero-phone/slowImages2/Lightphone1_0029.jpg deleted file mode 100644 index 37c68d8be..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0029.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0029.png b/hero-phone/slowImages2/Lightphone1_0029.png deleted file mode 100755 index 32eb4b149..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0029.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0030.jpg b/hero-phone/slowImages2/Lightphone1_0030.jpg deleted file mode 100644 index 194799a55..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0030.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0030.png b/hero-phone/slowImages2/Lightphone1_0030.png deleted file mode 100755 index a1c3011a3..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0030.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0031.jpg b/hero-phone/slowImages2/Lightphone1_0031.jpg deleted file mode 100644 index ffa034cdd..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0031.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0031.png b/hero-phone/slowImages2/Lightphone1_0031.png deleted file mode 100755 index 6eea83932..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0031.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0032.jpg b/hero-phone/slowImages2/Lightphone1_0032.jpg deleted file mode 100644 index 466966305..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0032.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0032.png b/hero-phone/slowImages2/Lightphone1_0032.png deleted file mode 100755 index 1f137efdb..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0032.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0033.jpg b/hero-phone/slowImages2/Lightphone1_0033.jpg deleted file mode 100644 index dd2caa70b..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0033.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0033.png b/hero-phone/slowImages2/Lightphone1_0033.png deleted file mode 100755 index 925a6439c..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0033.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0034.jpg b/hero-phone/slowImages2/Lightphone1_0034.jpg deleted file mode 100644 index 765487bc9..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0034.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0034.png b/hero-phone/slowImages2/Lightphone1_0034.png deleted file mode 100755 index d4d558f36..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0034.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0035.jpg b/hero-phone/slowImages2/Lightphone1_0035.jpg deleted file mode 100644 index 2bf4657aa..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0035.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0035.png b/hero-phone/slowImages2/Lightphone1_0035.png deleted file mode 100755 index 728109cec..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0035.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0036.jpg b/hero-phone/slowImages2/Lightphone1_0036.jpg deleted file mode 100644 index 8a4aa523e..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0036.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0036.png b/hero-phone/slowImages2/Lightphone1_0036.png deleted file mode 100755 index 4b56311b6..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0036.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0037.jpg b/hero-phone/slowImages2/Lightphone1_0037.jpg deleted file mode 100644 index 7295fb42a..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0037.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0037.png b/hero-phone/slowImages2/Lightphone1_0037.png deleted file mode 100755 index 7302e01a9..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0037.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0038.jpg b/hero-phone/slowImages2/Lightphone1_0038.jpg deleted file mode 100644 index f03326f04..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0038.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0038.png b/hero-phone/slowImages2/Lightphone1_0038.png deleted file mode 100755 index a62ccac0d..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0038.png and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0039.jpg b/hero-phone/slowImages2/Lightphone1_0039.jpg deleted file mode 100644 index b7e82a4c0..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0039.jpg and /dev/null differ diff --git a/hero-phone/slowImages2/Lightphone1_0039.png b/hero-phone/slowImages2/Lightphone1_0039.png deleted file mode 100644 index 569ef3d9c..000000000 Binary files a/hero-phone/slowImages2/Lightphone1_0039.png and /dev/null differ diff --git a/img/hero/dark/10fps/0000.webp b/img/hero/dark/10fps/0000.webp new file mode 100755 index 000000000..40992dd5e Binary files /dev/null and b/img/hero/dark/10fps/0000.webp differ diff --git a/img/hero/dark/10fps/0001.webp b/img/hero/dark/10fps/0001.webp new file mode 100755 index 000000000..18e7325ae Binary files /dev/null and b/img/hero/dark/10fps/0001.webp differ diff --git a/img/hero/dark/10fps/0002.webp b/img/hero/dark/10fps/0002.webp new file mode 100755 index 000000000..151772507 Binary files /dev/null and b/img/hero/dark/10fps/0002.webp differ diff --git a/img/hero/dark/10fps/0003.webp b/img/hero/dark/10fps/0003.webp new file mode 100755 index 000000000..04be85fb1 Binary files /dev/null and b/img/hero/dark/10fps/0003.webp differ diff --git a/img/hero/dark/10fps/0004.webp b/img/hero/dark/10fps/0004.webp new file mode 100755 index 000000000..de6ec47b3 Binary files /dev/null and b/img/hero/dark/10fps/0004.webp differ diff --git a/img/hero/dark/10fps/0005.webp b/img/hero/dark/10fps/0005.webp new file mode 100755 index 000000000..46c9e7010 Binary files /dev/null and b/img/hero/dark/10fps/0005.webp differ diff --git a/img/hero/dark/10fps/0006.webp b/img/hero/dark/10fps/0006.webp new file mode 100755 index 000000000..37046f285 Binary files /dev/null and b/img/hero/dark/10fps/0006.webp differ diff --git a/img/hero/dark/10fps/0007.webp b/img/hero/dark/10fps/0007.webp new file mode 100755 index 000000000..a0bd76a51 Binary files /dev/null and b/img/hero/dark/10fps/0007.webp differ diff --git a/img/hero/dark/10fps/0008.webp b/img/hero/dark/10fps/0008.webp new file mode 100755 index 000000000..a69dfa0dc Binary files /dev/null and b/img/hero/dark/10fps/0008.webp differ diff --git a/img/hero/dark/10fps/0009.webp b/img/hero/dark/10fps/0009.webp new file mode 100755 index 000000000..84fead34f Binary files /dev/null and b/img/hero/dark/10fps/0009.webp differ diff --git a/img/hero/dark/10fps/0010.webp b/img/hero/dark/10fps/0010.webp new file mode 100755 index 000000000..87a6d352f Binary files /dev/null and b/img/hero/dark/10fps/0010.webp differ diff --git a/img/hero/dark/10fps/0011.webp b/img/hero/dark/10fps/0011.webp new file mode 100755 index 000000000..a917901e4 Binary files /dev/null and b/img/hero/dark/10fps/0011.webp differ diff --git a/img/hero/dark/10fps/0012.webp b/img/hero/dark/10fps/0012.webp new file mode 100755 index 000000000..c23497b73 Binary files /dev/null and b/img/hero/dark/10fps/0012.webp differ diff --git a/img/hero/dark/10fps/0013.webp b/img/hero/dark/10fps/0013.webp new file mode 100755 index 000000000..796b9eb0a Binary files /dev/null and b/img/hero/dark/10fps/0013.webp differ diff --git a/img/hero/dark/10fps/0014.webp b/img/hero/dark/10fps/0014.webp new file mode 100755 index 000000000..ed7a6c6bb Binary files /dev/null and b/img/hero/dark/10fps/0014.webp differ diff --git a/img/hero/dark/10fps/0015.webp b/img/hero/dark/10fps/0015.webp new file mode 100755 index 000000000..c141bd53d Binary files /dev/null and b/img/hero/dark/10fps/0015.webp differ diff --git a/img/hero/dark/10fps/0016.webp b/img/hero/dark/10fps/0016.webp new file mode 100755 index 000000000..2ea1e36e4 Binary files /dev/null and b/img/hero/dark/10fps/0016.webp differ diff --git a/img/hero/dark/10fps/0017.webp b/img/hero/dark/10fps/0017.webp new file mode 100755 index 000000000..b629b1776 Binary files /dev/null and b/img/hero/dark/10fps/0017.webp differ diff --git a/img/hero/dark/10fps/0018.webp b/img/hero/dark/10fps/0018.webp new file mode 100755 index 000000000..843af2d15 Binary files /dev/null and b/img/hero/dark/10fps/0018.webp differ diff --git a/img/hero/dark/10fps/0019.webp b/img/hero/dark/10fps/0019.webp new file mode 100755 index 000000000..20de13279 Binary files /dev/null and b/img/hero/dark/10fps/0019.webp differ diff --git a/img/hero/dark/10fps/0020.webp b/img/hero/dark/10fps/0020.webp new file mode 100755 index 000000000..a548cd61b Binary files /dev/null and b/img/hero/dark/10fps/0020.webp differ diff --git a/img/hero/dark/2fps/0005.webp b/img/hero/dark/2fps/0005.webp new file mode 100644 index 000000000..0729d7141 Binary files /dev/null and b/img/hero/dark/2fps/0005.webp differ diff --git a/img/hero/dark/2fps/0008.webp b/img/hero/dark/2fps/0008.webp new file mode 100644 index 000000000..57e6928d0 Binary files /dev/null and b/img/hero/dark/2fps/0008.webp differ diff --git a/img/hero/dark/2fps/0009.webp b/img/hero/dark/2fps/0009.webp new file mode 100644 index 000000000..ac5cd4b2c Binary files /dev/null and b/img/hero/dark/2fps/0009.webp differ diff --git a/img/hero/dark/2fps/0011.webp b/img/hero/dark/2fps/0011.webp new file mode 100644 index 000000000..feb1ba6d5 Binary files /dev/null and b/img/hero/dark/2fps/0011.webp differ diff --git a/img/hero/dark/2fps/0014.webp b/img/hero/dark/2fps/0014.webp new file mode 100644 index 000000000..1d0349a0e Binary files /dev/null and b/img/hero/dark/2fps/0014.webp differ diff --git a/img/hero/dark/2fps/0017.webp b/img/hero/dark/2fps/0017.webp new file mode 100644 index 000000000..db955954b Binary files /dev/null and b/img/hero/dark/2fps/0017.webp differ diff --git a/img/hero/dark/2fps/0018.webp b/img/hero/dark/2fps/0018.webp new file mode 100644 index 000000000..1b5966613 Binary files /dev/null and b/img/hero/dark/2fps/0018.webp differ diff --git a/img/hero/dark/2fps/0020.webp b/img/hero/dark/2fps/0020.webp new file mode 100644 index 000000000..2d160c9a1 Binary files /dev/null and b/img/hero/dark/2fps/0020.webp differ diff --git a/img/hero/dark/2fps/0022.webp b/img/hero/dark/2fps/0022.webp new file mode 100644 index 000000000..cf560734e Binary files /dev/null and b/img/hero/dark/2fps/0022.webp differ diff --git a/img/hero/dark/2fps/0024.webp b/img/hero/dark/2fps/0024.webp new file mode 100644 index 000000000..200234df6 Binary files /dev/null and b/img/hero/dark/2fps/0024.webp differ diff --git a/img/hero/dark/2fps/0027.webp b/img/hero/dark/2fps/0027.webp new file mode 100644 index 000000000..ac2843de8 Binary files /dev/null and b/img/hero/dark/2fps/0027.webp differ diff --git a/img/hero/dark/2fps/0028.webp b/img/hero/dark/2fps/0028.webp new file mode 100644 index 000000000..5ac019f59 Binary files /dev/null and b/img/hero/dark/2fps/0028.webp differ diff --git a/img/hero/dark/2fps/0030.webp b/img/hero/dark/2fps/0030.webp new file mode 100644 index 000000000..ff53bd609 Binary files /dev/null and b/img/hero/dark/2fps/0030.webp differ diff --git a/img/hero/dark/2fps/0032.webp b/img/hero/dark/2fps/0032.webp new file mode 100644 index 000000000..0f6f60c02 Binary files /dev/null and b/img/hero/dark/2fps/0032.webp differ diff --git a/img/hero/dark/2fps/0035.webp b/img/hero/dark/2fps/0035.webp new file mode 100644 index 000000000..83180145b Binary files /dev/null and b/img/hero/dark/2fps/0035.webp differ diff --git a/img/hero/dark/2fps/0036.webp b/img/hero/dark/2fps/0036.webp new file mode 100644 index 000000000..6b69a897c Binary files /dev/null and b/img/hero/dark/2fps/0036.webp differ diff --git a/img/hero/dark/2fps/0038.webp b/img/hero/dark/2fps/0038.webp new file mode 100644 index 000000000..e5fd692d9 Binary files /dev/null and b/img/hero/dark/2fps/0038.webp differ diff --git a/img/hero/dark/2fps/0039.webp b/img/hero/dark/2fps/0039.webp new file mode 100644 index 000000000..7e31e0580 Binary files /dev/null and b/img/hero/dark/2fps/0039.webp differ diff --git a/img/hero/light/10fps/0000.webp b/img/hero/light/10fps/0000.webp new file mode 100644 index 000000000..e564a152a Binary files /dev/null and b/img/hero/light/10fps/0000.webp differ diff --git a/img/hero/light/10fps/0001.webp b/img/hero/light/10fps/0001.webp new file mode 100644 index 000000000..109684a09 Binary files /dev/null and b/img/hero/light/10fps/0001.webp differ diff --git a/img/hero/light/10fps/0002.webp b/img/hero/light/10fps/0002.webp new file mode 100644 index 000000000..2df7f5a18 Binary files /dev/null and b/img/hero/light/10fps/0002.webp differ diff --git a/img/hero/light/10fps/0003.webp b/img/hero/light/10fps/0003.webp new file mode 100644 index 000000000..5011bd583 Binary files /dev/null and b/img/hero/light/10fps/0003.webp differ diff --git a/img/hero/light/10fps/0004.webp b/img/hero/light/10fps/0004.webp new file mode 100644 index 000000000..4379da6ea Binary files /dev/null and b/img/hero/light/10fps/0004.webp differ diff --git a/img/hero/light/10fps/0005.webp b/img/hero/light/10fps/0005.webp new file mode 100644 index 000000000..9e3effb2e Binary files /dev/null and b/img/hero/light/10fps/0005.webp differ diff --git a/img/hero/light/10fps/0006.webp b/img/hero/light/10fps/0006.webp new file mode 100644 index 000000000..bcc9eaf0d Binary files /dev/null and b/img/hero/light/10fps/0006.webp differ diff --git a/img/hero/light/10fps/0007.webp b/img/hero/light/10fps/0007.webp new file mode 100644 index 000000000..26ae9b977 Binary files /dev/null and b/img/hero/light/10fps/0007.webp differ diff --git a/img/hero/light/10fps/0008.webp b/img/hero/light/10fps/0008.webp new file mode 100644 index 000000000..f0a1c389d Binary files /dev/null and b/img/hero/light/10fps/0008.webp differ diff --git a/img/hero/light/10fps/0009.webp b/img/hero/light/10fps/0009.webp new file mode 100644 index 000000000..b32d9a317 Binary files /dev/null and b/img/hero/light/10fps/0009.webp differ diff --git a/img/hero/light/10fps/0010.webp b/img/hero/light/10fps/0010.webp new file mode 100644 index 000000000..189ad37c6 Binary files /dev/null and b/img/hero/light/10fps/0010.webp differ diff --git a/img/hero/light/10fps/0011.webp b/img/hero/light/10fps/0011.webp new file mode 100644 index 000000000..ebddee21c Binary files /dev/null and b/img/hero/light/10fps/0011.webp differ diff --git a/img/hero/light/10fps/0012.webp b/img/hero/light/10fps/0012.webp new file mode 100644 index 000000000..f78a5d838 Binary files /dev/null and b/img/hero/light/10fps/0012.webp differ diff --git a/img/hero/light/10fps/0013.webp b/img/hero/light/10fps/0013.webp new file mode 100644 index 000000000..81da2995b Binary files /dev/null and b/img/hero/light/10fps/0013.webp differ diff --git a/img/hero/light/10fps/0014.webp b/img/hero/light/10fps/0014.webp new file mode 100644 index 000000000..313eae981 Binary files /dev/null and b/img/hero/light/10fps/0014.webp differ diff --git a/img/hero/light/10fps/0015.webp b/img/hero/light/10fps/0015.webp new file mode 100644 index 000000000..cbcdf6e69 Binary files /dev/null and b/img/hero/light/10fps/0015.webp differ diff --git a/img/hero/light/10fps/0016.webp b/img/hero/light/10fps/0016.webp new file mode 100644 index 000000000..2f4179b87 Binary files /dev/null and b/img/hero/light/10fps/0016.webp differ diff --git a/img/hero/light/10fps/0017.webp b/img/hero/light/10fps/0017.webp new file mode 100644 index 000000000..df354550d Binary files /dev/null and b/img/hero/light/10fps/0017.webp differ diff --git a/img/hero/light/10fps/0018.webp b/img/hero/light/10fps/0018.webp new file mode 100644 index 000000000..cad608d6d Binary files /dev/null and b/img/hero/light/10fps/0018.webp differ diff --git a/img/hero/light/10fps/0019.webp b/img/hero/light/10fps/0019.webp new file mode 100644 index 000000000..fcaf8b94a Binary files /dev/null and b/img/hero/light/10fps/0019.webp differ diff --git a/img/hero/light/10fps/0020.webp b/img/hero/light/10fps/0020.webp new file mode 100644 index 000000000..6bfd74692 Binary files /dev/null and b/img/hero/light/10fps/0020.webp differ diff --git a/img/hero/light/2fps/0005.webp b/img/hero/light/2fps/0005.webp new file mode 100644 index 000000000..16dad0432 Binary files /dev/null and b/img/hero/light/2fps/0005.webp differ diff --git a/img/hero/light/2fps/0008.webp b/img/hero/light/2fps/0008.webp new file mode 100644 index 000000000..a17929f32 Binary files /dev/null and b/img/hero/light/2fps/0008.webp differ diff --git a/img/hero/light/2fps/0009.webp b/img/hero/light/2fps/0009.webp new file mode 100644 index 000000000..39e075534 Binary files /dev/null and b/img/hero/light/2fps/0009.webp differ diff --git a/img/hero/light/2fps/0011.webp b/img/hero/light/2fps/0011.webp new file mode 100644 index 000000000..827c7524a Binary files /dev/null and b/img/hero/light/2fps/0011.webp differ diff --git a/img/hero/light/2fps/0014.webp b/img/hero/light/2fps/0014.webp new file mode 100644 index 000000000..726ca2044 Binary files /dev/null and b/img/hero/light/2fps/0014.webp differ diff --git a/img/hero/light/2fps/0017.webp b/img/hero/light/2fps/0017.webp new file mode 100644 index 000000000..dc730cbc3 Binary files /dev/null and b/img/hero/light/2fps/0017.webp differ diff --git a/img/hero/light/2fps/0018.webp b/img/hero/light/2fps/0018.webp new file mode 100644 index 000000000..11ac9af7e Binary files /dev/null and b/img/hero/light/2fps/0018.webp differ diff --git a/img/hero/light/2fps/0020.webp b/img/hero/light/2fps/0020.webp new file mode 100644 index 000000000..47b81edc7 Binary files /dev/null and b/img/hero/light/2fps/0020.webp differ diff --git a/img/hero/light/2fps/0022.webp b/img/hero/light/2fps/0022.webp new file mode 100644 index 000000000..1d400eae8 Binary files /dev/null and b/img/hero/light/2fps/0022.webp differ diff --git a/img/hero/light/2fps/0024.webp b/img/hero/light/2fps/0024.webp new file mode 100644 index 000000000..e3d3312a9 Binary files /dev/null and b/img/hero/light/2fps/0024.webp differ diff --git a/img/hero/light/2fps/0027.webp b/img/hero/light/2fps/0027.webp new file mode 100644 index 000000000..cf4ac08f1 Binary files /dev/null and b/img/hero/light/2fps/0027.webp differ diff --git a/img/hero/light/2fps/0028.webp b/img/hero/light/2fps/0028.webp new file mode 100644 index 000000000..251286f6c Binary files /dev/null and b/img/hero/light/2fps/0028.webp differ diff --git a/img/hero/light/2fps/0030.webp b/img/hero/light/2fps/0030.webp new file mode 100644 index 000000000..c2bc4cbfe Binary files /dev/null and b/img/hero/light/2fps/0030.webp differ diff --git a/img/hero/light/2fps/0032.webp b/img/hero/light/2fps/0032.webp new file mode 100644 index 000000000..c434cd608 Binary files /dev/null and b/img/hero/light/2fps/0032.webp differ diff --git a/img/hero/light/2fps/0035.webp b/img/hero/light/2fps/0035.webp new file mode 100644 index 000000000..42acb6ed0 Binary files /dev/null and b/img/hero/light/2fps/0035.webp differ diff --git a/img/hero/light/2fps/0036.webp b/img/hero/light/2fps/0036.webp new file mode 100644 index 000000000..aee8e7d2a Binary files /dev/null and b/img/hero/light/2fps/0036.webp differ diff --git a/img/hero/light/2fps/0038.webp b/img/hero/light/2fps/0038.webp new file mode 100644 index 000000000..27fdec7a2 Binary files /dev/null and b/img/hero/light/2fps/0038.webp differ diff --git a/img/hero/light/2fps/0039.webp b/img/hero/light/2fps/0039.webp new file mode 100644 index 000000000..6f4216e00 Binary files /dev/null and b/img/hero/light/2fps/0039.webp differ diff --git a/img/new/QRcode-phone.png b/img/new/QRcode-phone.png new file mode 100644 index 000000000..da804cc9b Binary files /dev/null and b/img/new/QRcode-phone.png differ diff --git a/img/new/apk_icon.png b/img/new/apk_icon.png new file mode 100644 index 000000000..60ff342d3 Binary files /dev/null and b/img/new/apk_icon.png differ diff --git a/img/new/apple_store.svg b/img/new/apple_store.svg new file mode 100644 index 000000000..b977fa2cf --- /dev/null +++ b/img/new/apple_store.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/arrow-left-dark.svg b/img/new/arrow-left-dark.svg new file mode 100644 index 000000000..6300e60e1 --- /dev/null +++ b/img/new/arrow-left-dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/img/new/arrow-left.svg b/img/new/arrow-left.svg new file mode 100644 index 000000000..126b58ce2 --- /dev/null +++ b/img/new/arrow-left.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/img/new/arrow-right-dark.svg b/img/new/arrow-right-dark.svg new file mode 100644 index 000000000..303c86e7d --- /dev/null +++ b/img/new/arrow-right-dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/img/new/arrow-right.svg b/img/new/arrow-right.svg new file mode 100644 index 000000000..06545fde1 --- /dev/null +++ b/img/new/arrow-right.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/img/new/bg_gfx.png b/img/new/bg_gfx.png new file mode 100644 index 000000000..1f276b311 Binary files /dev/null and b/img/new/bg_gfx.png differ diff --git a/img/new/contact_page_mobile.png b/img/new/contact_page_mobile.png new file mode 100644 index 000000000..7d829965a Binary files /dev/null and b/img/new/contact_page_mobile.png differ diff --git a/img/new/content-copy.svg b/img/new/content-copy.svg new file mode 100644 index 000000000..3e7992e92 --- /dev/null +++ b/img/new/content-copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/img/new/cross.svg b/img/new/cross.svg new file mode 100644 index 000000000..b48978e1e --- /dev/null +++ b/img/new/cross.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/new/explained-1.svg b/img/new/explained-1.svg new file mode 100644 index 000000000..6b7e35209 --- /dev/null +++ b/img/new/explained-1.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/explained-2.svg b/img/new/explained-2.svg new file mode 100644 index 000000000..ac57f491e --- /dev/null +++ b/img/new/explained-2.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/explained-3.svg b/img/new/explained-3.svg new file mode 100644 index 000000000..745a97cd2 --- /dev/null +++ b/img/new/explained-3.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/f_droid.svg b/img/new/f_droid.svg new file mode 100644 index 000000000..2d6ec6871 --- /dev/null +++ b/img/new/f_droid.svg @@ -0,0 +1,372 @@ + + + + + + + + + + + + + GET IT ON + F-Droid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-1-dark.svg b/img/new/feature-1-dark.svg new file mode 100644 index 000000000..806f7b650 --- /dev/null +++ b/img/new/feature-1-dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-1.svg b/img/new/feature-1.svg new file mode 100644 index 000000000..893ab43e5 --- /dev/null +++ b/img/new/feature-1.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-2-dark.svg b/img/new/feature-2-dark.svg new file mode 100644 index 000000000..6cb3aea2d --- /dev/null +++ b/img/new/feature-2-dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-2.svg b/img/new/feature-2.svg new file mode 100644 index 000000000..955baba0c --- /dev/null +++ b/img/new/feature-2.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-3-dark.svg b/img/new/feature-3-dark.svg new file mode 100644 index 000000000..c01316adc --- /dev/null +++ b/img/new/feature-3-dark.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-3.svg b/img/new/feature-3.svg new file mode 100644 index 000000000..6763d8f97 --- /dev/null +++ b/img/new/feature-3.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-4-dark.svg b/img/new/feature-4-dark.svg new file mode 100644 index 000000000..f3b8408ff --- /dev/null +++ b/img/new/feature-4-dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-4.svg b/img/new/feature-4.svg new file mode 100644 index 000000000..bc9119a36 --- /dev/null +++ b/img/new/feature-4.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-5-dark.svg b/img/new/feature-5-dark.svg new file mode 100644 index 000000000..2d7ef7f18 --- /dev/null +++ b/img/new/feature-5-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/feature-5.svg b/img/new/feature-5.svg new file mode 100644 index 000000000..8d26f55d9 --- /dev/null +++ b/img/new/feature-5.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/feature-6-dark.svg b/img/new/feature-6-dark.svg new file mode 100644 index 000000000..f8d7f4239 --- /dev/null +++ b/img/new/feature-6-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/feature-6.svg b/img/new/feature-6.svg new file mode 100644 index 000000000..e8e40df1a --- /dev/null +++ b/img/new/feature-6.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/feature-7-dark.svg b/img/new/feature-7-dark.svg new file mode 100644 index 000000000..28e36b04f --- /dev/null +++ b/img/new/feature-7-dark.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-7.svg b/img/new/feature-7.svg new file mode 100644 index 000000000..a2b79fb9d --- /dev/null +++ b/img/new/feature-7.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/feature-8-dark.svg b/img/new/feature-8-dark.svg new file mode 100644 index 000000000..20b5a394a --- /dev/null +++ b/img/new/feature-8-dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/img/new/feature-8.svg b/img/new/feature-8.svg new file mode 100644 index 000000000..610b65529 --- /dev/null +++ b/img/new/feature-8.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/img/new/gitHub.svg b/img/new/gitHub.svg new file mode 100644 index 000000000..4fc6c3b5b --- /dev/null +++ b/img/new/gitHub.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/new/google_play.svg b/img/new/google_play.svg new file mode 100644 index 000000000..6cda5f6d3 --- /dev/null +++ b/img/new/google_play.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/hamburger.svg b/img/new/hamburger.svg new file mode 100644 index 000000000..3cd8fa89b --- /dev/null +++ b/img/new/hamburger.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/img/new/logo-dark.png b/img/new/logo-dark.png new file mode 100644 index 000000000..1886df819 Binary files /dev/null and b/img/new/logo-dark.png differ diff --git a/img/new/logo-light.png b/img/new/logo-light.png new file mode 100644 index 000000000..3da724650 Binary files /dev/null and b/img/new/logo-light.png differ diff --git a/img/new/logo-symbol-dark.svg b/img/new/logo-symbol-dark.svg new file mode 100644 index 000000000..fa598acf3 --- /dev/null +++ b/img/new/logo-symbol-dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/img/new/logo-symbol-light.svg b/img/new/logo-symbol-light.svg new file mode 100644 index 000000000..d8b5951a0 --- /dev/null +++ b/img/new/logo-symbol-light.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/mobile-hero.png b/img/new/mobile-hero.png new file mode 100644 index 000000000..21d853e33 Binary files /dev/null and b/img/new/mobile-hero.png differ diff --git a/img/new/mobile-video-placeholder.png b/img/new/mobile-video-placeholder.png new file mode 100644 index 000000000..ef22aed81 Binary files /dev/null and b/img/new/mobile-video-placeholder.png differ diff --git a/img/new/moon.svg b/img/new/moon.svg new file mode 100644 index 000000000..1054735b5 --- /dev/null +++ b/img/new/moon.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/new/network-1-dark.svg b/img/new/network-1-dark.svg new file mode 100644 index 000000000..d97de168c --- /dev/null +++ b/img/new/network-1-dark.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/img/new/network-1.svg b/img/new/network-1.svg new file mode 100644 index 000000000..b4f5c9ec7 --- /dev/null +++ b/img/new/network-1.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/network-2-dark.svg b/img/new/network-2-dark.svg new file mode 100644 index 000000000..5a576eb4b --- /dev/null +++ b/img/new/network-2-dark.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/network-2.svg b/img/new/network-2.svg new file mode 100644 index 000000000..500c0e9e7 --- /dev/null +++ b/img/new/network-2.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/network-3-dark.svg b/img/new/network-3-dark.svg new file mode 100644 index 000000000..41f319734 --- /dev/null +++ b/img/new/network-3-dark.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/network-3.svg b/img/new/network-3.svg new file mode 100644 index 000000000..ede81020c --- /dev/null +++ b/img/new/network-3.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/phone1_0036.png b/img/new/phone1_0036.png new file mode 100644 index 000000000..65e7d60bb Binary files /dev/null and b/img/new/phone1_0036.png differ diff --git a/img/new/phone1_0036mobile.png b/img/new/phone1_0036mobile.png new file mode 100644 index 000000000..8ca0135c1 Binary files /dev/null and b/img/new/phone1_0036mobile.png differ diff --git a/img/new/phone_pane.png b/img/new/phone_pane.png new file mode 100644 index 000000000..5d07df5a4 Binary files /dev/null and b/img/new/phone_pane.png differ diff --git a/img/new/play-btn.svg b/img/new/play-btn.svg new file mode 100644 index 000000000..d311a7941 --- /dev/null +++ b/img/new/play-btn.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/new/privacy-section-1.svg b/img/new/privacy-section-1.svg new file mode 100644 index 000000000..5a325b7e7 --- /dev/null +++ b/img/new/privacy-section-1.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/privacy-section-2.svg b/img/new/privacy-section-2.svg new file mode 100644 index 000000000..13f63beba --- /dev/null +++ b/img/new/privacy-section-2.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/privacy-section-3.svg b/img/new/privacy-section-3.svg new file mode 100644 index 000000000..a9c2465b6 --- /dev/null +++ b/img/new/privacy-section-3.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/img/new/private-1-dark.svg b/img/new/private-1-dark.svg new file mode 100644 index 000000000..a62abdeec --- /dev/null +++ b/img/new/private-1-dark.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-1.svg b/img/new/private-1.svg new file mode 100644 index 000000000..0e7d213e6 --- /dev/null +++ b/img/new/private-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-10-dark.svg b/img/new/private-10-dark.svg new file mode 100644 index 000000000..681f3adb0 --- /dev/null +++ b/img/new/private-10-dark.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-10.svg b/img/new/private-10.svg new file mode 100644 index 000000000..83e814a8a --- /dev/null +++ b/img/new/private-10.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-2-dark.svg b/img/new/private-2-dark.svg new file mode 100644 index 000000000..4b945f10f --- /dev/null +++ b/img/new/private-2-dark.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-2.svg b/img/new/private-2.svg new file mode 100644 index 000000000..3cf03114d --- /dev/null +++ b/img/new/private-2.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-3-dark.svg b/img/new/private-3-dark.svg new file mode 100644 index 000000000..8193a9f71 --- /dev/null +++ b/img/new/private-3-dark.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-3.svg b/img/new/private-3.svg new file mode 100644 index 000000000..77e0757b0 --- /dev/null +++ b/img/new/private-3.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-4-dark.svg b/img/new/private-4-dark.svg new file mode 100644 index 000000000..0ccb78f11 --- /dev/null +++ b/img/new/private-4-dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/img/new/private-4.svg b/img/new/private-4.svg new file mode 100644 index 000000000..cb76605a1 --- /dev/null +++ b/img/new/private-4.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/img/new/private-5-dark.svg b/img/new/private-5-dark.svg new file mode 100644 index 000000000..26131ec22 --- /dev/null +++ b/img/new/private-5-dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-5.svg b/img/new/private-5.svg new file mode 100644 index 000000000..8e05bb28c --- /dev/null +++ b/img/new/private-5.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-6-dark.svg b/img/new/private-6-dark.svg new file mode 100644 index 000000000..c33644173 --- /dev/null +++ b/img/new/private-6-dark.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-6.svg b/img/new/private-6.svg new file mode 100644 index 000000000..f44dd6cd3 --- /dev/null +++ b/img/new/private-6.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-7-dark.svg b/img/new/private-7-dark.svg new file mode 100644 index 000000000..fc6fdfaf4 --- /dev/null +++ b/img/new/private-7-dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/private-7.svg b/img/new/private-7.svg new file mode 100644 index 000000000..002c2a4f9 --- /dev/null +++ b/img/new/private-7.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-8-dark.svg b/img/new/private-8-dark.svg new file mode 100644 index 000000000..d78ce2e90 --- /dev/null +++ b/img/new/private-8-dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-8.svg b/img/new/private-8.svg new file mode 100644 index 000000000..bff6bbf89 --- /dev/null +++ b/img/new/private-8.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-9-dark.svg b/img/new/private-9-dark.svg new file mode 100644 index 000000000..6e31db4d5 --- /dev/null +++ b/img/new/private-9-dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/private-9.svg b/img/new/private-9.svg new file mode 100644 index 000000000..68b88fbd2 --- /dev/null +++ b/img/new/private-9.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/sun.svg b/img/new/sun.svg new file mode 100644 index 000000000..8407b98e5 --- /dev/null +++ b/img/new/sun.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/img/new/tab-hero.svg b/img/new/tab-hero.svg new file mode 100644 index 000000000..a4fdb24b8 --- /dev/null +++ b/img/new/tab-hero.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/new/tab-video.svg b/img/new/tab-video.svg new file mode 100644 index 000000000..55e8b2d36 --- /dev/null +++ b/img/new/tab-video.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/img/new/testflight.png b/img/new/testflight.png new file mode 100644 index 000000000..8111a69d5 Binary files /dev/null and b/img/new/testflight.png differ diff --git a/img/new/union.svg b/img/new/union.svg new file mode 100644 index 000000000..20688b1d4 --- /dev/null +++ b/img/new/union.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/new/unique-section-1-dark.png b/img/new/unique-section-1-dark.png new file mode 100644 index 000000000..2efee8b5e Binary files /dev/null and b/img/new/unique-section-1-dark.png differ diff --git a/img/new/unique-section-1.png b/img/new/unique-section-1.png new file mode 100644 index 000000000..1b66493df Binary files /dev/null and b/img/new/unique-section-1.png differ diff --git a/img/new/unique-section-2-dark.png b/img/new/unique-section-2-dark.png new file mode 100644 index 000000000..6449be202 Binary files /dev/null and b/img/new/unique-section-2-dark.png differ diff --git a/img/new/unique-section-2.png b/img/new/unique-section-2.png new file mode 100644 index 000000000..647455274 Binary files /dev/null and b/img/new/unique-section-2.png differ diff --git a/img/new/unique-section-3-dark.png b/img/new/unique-section-3-dark.png new file mode 100644 index 000000000..8eea04fe1 Binary files /dev/null and b/img/new/unique-section-3-dark.png differ diff --git a/img/new/unique-section-3.png b/img/new/unique-section-3.png new file mode 100644 index 000000000..9bd584c45 Binary files /dev/null and b/img/new/unique-section-3.png differ diff --git a/img/new/unique-section-4-dark.png b/img/new/unique-section-4-dark.png new file mode 100644 index 000000000..51dc83aa3 Binary files /dev/null and b/img/new/unique-section-4-dark.png differ diff --git a/img/new/unique-section-4.png b/img/new/unique-section-4.png new file mode 100644 index 000000000..e9c461951 Binary files /dev/null and b/img/new/unique-section-4.png differ diff --git a/index.html b/index.html index d6525957c..517b801fb 100644 --- a/index.html +++ b/index.html @@ -1,566 +1,1751 @@ - - - - - - SimpleX Chat: private, secure, no user identitifiers - - - - - - - - - - - - - - - + + + + + + SimpleX Chat: private and secure messenger without any user IDs (not even random) + + + + + + + + + + + + + - -
    - -
    - - -
    - -
    -
    - - -
    - Whitepaper - Comparison - Blog +
    - + + +
    +
    +
    +
    +
    + + + +
    +

    Privacy redefined

    +

    The first messenger
    without user IDs

    +

    + Other apps have user IDs: Signal, Matrix, Session, Briar, Jami, Cwtch, etc.
    + SimpleX does not, not even random numbers.
    + This radically improves your privacy. +

    + Why user IDs are bad for privacy? + + + + + How does SimpleX work? + + + + +
    +
    + +
    + + + + + +
    +
    +
    +
    + +
    +
    +
    + +
    + + + +
    + + +
    + +
    +

    + Make a private connection +

    +

    + The video shows how you connect to your friend via their 1-time QR-code, in person or via a video link. + You can also connect by sharing an invitation link. +

    +
    + + +
    +
    +
    + +
    +
    + + + +
    +
    +

    Why privacy matters

    +

    Preserving the privacy of your metadata — who you talk with — protects you from:

    +
    + + +
    +
    + +
    +
    +

    Advertising and price discrimination

    + + Privacy saves you money + + + + + +
    +
    + +
    +
    + +
    +
    +

    Manipulation of elections

    + + Privacy gives you power + + + + + +
    +
    + +
    +
    + +
    +
    +

    Prosecution due to innocent association

    + + Privacy protects your freedom + + + + + +
    +
    + + +
    +

    Make sure your messenger can't access your data!

    +
    +
    + + +
    +
    +

    Why SimpleX is unique

    + +
    +
    + + +
    + +
    + + +
    + +
    +
    +

    #1

    +

    You have complete privacy

    +
    + +
    + +
    +

    + SimpleX protects the privacy of your profile, contacts and metadata, + hiding it from SimpleX platform servers and any observers. +

    +

    + Unlike any other existing messaging platform, + SimpleX has no identifiers assigned to the users — + not even random numbers. +

    + +
    + + + Learn more + +
    +
    + + +
    + +
    + +
    + + +
    + +
    +
    +

    #2

    +

    You are protected
    from spam and abuse

    +
    + +
    + +
    +

    + Because you have no identifier or fixed address on the SimpleX platform, + nobody can contact you unless you share a one-time + or temporary user address, as a QR code or a link. +

    + +
    + + + Learn more + +
    +
    + + +
    + +
    + +
    + + +
    + +
    +
    +

    #3

    +

    You control your data

    +
    + +
    + +
    +

    + SimpleX stores all user data on client devices in a portable encrypted database format — + it can be transferred to another device. +

    +

    + The end-to-end encrypted messages are held temporarily on SimpleX relay servers until received, then they are permanently deleted. +

    + +
    + + + Learn more + +
    +
    + + +
    + +
    + +
    + + +
    + +
    +
    +

    #4

    +

    You own SimpleX network

    +
    + +
    + +
    +

    + The SimpleX network is fully decentralised and independent of any crypto-currency or any other platform, other than the Internet. +

    +

    + You can use SimpleX with your own servers + or with the servers provided by us — and still connect to any user. +

    + +
    + + + Learn more + +
    +
    + + +
    + + +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Features

    + +
    + +
    +
    + + +
    +

    E2E-encrypted messages with markdown and editing

    +
    + +
    +
    + + +
    +

    E2E-encrypted
    images and files

    +
    + +
    +
    + + +
    +

    Decentralized secret groups —
    only users know they exist

    +
    + +
    +
    + + +
    +

    E2E-encrypted voice messages (coming soon)

    +
    + +
    +
    + + +
    +

    Disappearing secret conversations (coming soon)

    +
    + +
    +
    + + +
    +

    E2E-encrypted
    audio and video calls

    +
    + +
    +
    + + +
    +

    Portable encrypted database — move your profile to another device

    +
    + +
    +
    + + +
    +

    Incognito mode —
    unique to SimpleX Chat

    +
    + +
    +
    +
    + + +
    +
    +

    What makes SimpleX private

    + +
    +
    + + +
    +
    + + +
    +
    +

    Temporary anonymous pairwise identifiers

    +
    + +

    SimpleX uses temporary anonymous pairwise addresses and credentials for each user contact or group member.

    + +

    It allows to deliver messages without user profile identifiers, providing better meta-data privacy than alternatives.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Out-of-band
    key exchange

    +
    + +

    Many communication platforms are vulnerable to MITM attacks by servers or network providers.

    + +

    To prevent it SimpleX apps pass one-time keys out-of-band, when you share an address as a link or a QR code.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    2-layers of
    end-to-end encryption

    +
    + +

    Double-ratchet protocol —
    OTR messaging with perfect forward secrecy and break-in recovery.

    + +

    NaCL cryptobox in each queue to prevent traffic correlation between message queues if TLS is compromised.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Message integrity
    verification

    +
    + +

    To guarantee integrity the messages are sequentially numbered and include the hash of the previous message.

    + +

    If any message is added, removed or changed the recipient will be alerted.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Additional layer of
    server encryption

    +
    + +

    Additional layer of server encryption for delivery to the recipient, to prevent the correlation between received and sent server traffic if TLS is compromised.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Message mixing
    to reduce correlation

    +
    + +

    SimpleX servers act as low latency mix nodes — the incoming and outgoing messages have different order.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Secure authenticated
    TLS transport

    +
    + +

    Only TLS 1.2/1.3 with strong algorithms is used for client-server connections.

    + +

    Server fingerprint and channel binding prevent MITM and replay attacks.

    + +

    Connection resumption is disabled to prevent session attacks.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Optional
    access via Tor

    +
    + +

    To protect your IP address you can access the servers via Tor or some other transport overlay network.

    + +

    To use SimpleX via Tor please install Orbot app and enable SOCKS5 proxy (or VPN on iOS).

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Unidirectional
    message queues

    +
    + +

    Each message queue passes messages in one direction, with the different send and receive addresses.

    + +

    It reduces the attack vectors, compared with traditional message brokers, and available meta-data.

    + +
    +

    Tap to close

    +
    +
    + +
    +
    + + +
    +
    +

    Multiple layers of
    content padding

    +
    + +

    SimpleX uses content padding for each encryption layer to frustrate message size attacks.

    + +

    It makes messages of different sizes look the same to the servers and network observers.

    + +
    +

    Tap to close

    +
    +
    + +
    + + + + + +
    +
    +
    +
    + + +
    +
    +

    SimpleX Network

    +

    Simplex Chat provides the best privacy by combining the advantages of P2P and federated networks.

    + +
    +
    +
    + + +
    +
    +

    Unlike P2P networks

    +

    + All messages are sent via the servers, both providing better + metadata privacy and reliable asynchronous message delivery, + while avoiding many problems of P2P networks. + + +

    + +

    +
    +
    + +
    +
    + + +
    +
    +

    Unlike federated networks

    +

    + SimpleX relay servers do NOT store user profiles, contacts and delivered messages, + do NOT connect to each other, and there is NO servers directory. +

    +
    +
    + +
    +
    + + +
    +
    +

    SimpleX network

    +

    + servers provide unidirectional queues + to connect the users, but the have no visibility of the network connection graph — only the users do. +

    +
    +
    + +
    +
    + +
    + + + +
    +
    +

    Simplex explained

    -
    -
    -

    SimpleX Chat

    -

    Private & encrypted - the only platform without user identifiers!

    - -

    You can download terminal chat app from GitHub or using this command:

    -

    - curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/master/install.sh | bash - - Copy to clipboard - - -

    -
    -
    -

    Alice

    -
    -
    -
    - -
    + + -
    -

    Bob

    -
    -
    -
    - -
    -
    -
    - -
    -
    -

    Tom

    -
    -
    -
    - -
    -
    - - - -
    -
    -
    -
    -
    -

    Privacy redefined

    -

    SimpleX advantage:

    -

    SimpleX ensures data and meta-data privacy

    -

    with a new protocol design – it delivers messages

    -

    without using senders' and recipients' identifiers,

    -

    unlike any other messaging platform.

    -
    -
    -
    -

    Security

    -

    Two-layer encryption and communication integrity

    -
    -
    -
    -

    Privacy

    -

    Your contacts and messages are stored on your device

    -
    -
    -
    -

    Convenience

    -

    Easy to add contacts and start talking

    -
    -
    -
    -
    + +
    +
    -
    -
    -

    Problem: chat security

    - -
    -

    End-to-end encryption?

    -

    Alice sends the key to Bob (e.g. via p2p network or via chat server)

    -
    -
    -
    Alice
    - Alice sends the key to Bob -
    Bob
    -
    +
    +
    1. What users experience
    +
    + +

    + You can create contacts and groups, and have two-way conversations, as in any other messenger. +

    +

    + How can it work with unidirectional queues and without user profile identifiers? +

    +
    +
    + +
    +
    2. How does it work
    +
    + +

    + For each connection you use two separate messaging queues to send and receive messages via different servers. +

    +

    + Servers only pass messages one way, without having the full picture of user's conversation or connections. +

    +
    +
    + +
    +
    3. What servers see
    +
    + +

    + The servers have separate anonymous credentials for each queue, and do not know which users they belong to. +

    +

    + Users can further improve metadata privacy by using Tor to access servers, preventing corellation by IP address. +

    +
    +
    + +
    +
    -

    Now Bob can send encrypted messages to Alice - he believes it is secure!

    -
    -
    -
    Alice
    - They believe it is secure -
    Bob
    -
    -
    -
    -
    -

    Man-in-the-middle attack!

    -

    But the key can be intercepted and substituted by Tom (the attacker)

    -
    -
    -
    Alice
    - key is intercepted -
    Bob
    -
    Tom
    -
    -
    -

    Now the attacker can read the messages without Alice or Bob knowing

    -
    -
    -
    Alice
    - attacker can read messages -
    Bob
    -
    Tom
    -
    -
    -
    - -
    -
    - -
    -
    -

    What is the solution?

    -

    - To create secure encrypted channel you need an existing secure channel -
    where you can pass the encryption key (or key fingerprint). -

    -

    Any alternative solution can be compromised.

    -
    -
    - -
    -
    -

    Make a private connection!

    -

    To add contact and to start chat

    -

    - Adding a contact in mobile app will require sharing your one-time QR code. -
    In the terminal UI you need to share an invitation with your contact. -

    -

    After creating your chat profile in the app:

    -
    -
    -

    1.
    Show QR code or share link

    -
    - mobile app: show QR code to add contact -
    -
    Alice
    -
    - -
    -

    2.
    Your contact scans QR code or opens link

    -
    - mobile app: scan QR code -
    -
    Bob
    -
    - -
    -

    3.
    A private connection is established

    -
    - mobile app: confirm contact -
    -
    Alice
    -
    - -
    -

    4.
    Now you can chat privately!

    -
    - mobile app: start chat -
    -
    Bob
    -
    -
    -
    -
    - -
    -
    -

    Comparison with other protocols

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    simplex logo SimpleX chatSignal, big platformsXMPP, MatrixP2P protocols
    Requires global identityNo - privateYes 1Yes 2Yes 3
    Possibility of MITMNo - secureYes 4YesYes
    Dependence on DNSNo - resilientYesYesNo
    Single or centralized networkNo - decentralizedYesNo - federated 5Yes 6
    Central component or other network-wide attackNo - resilientYesYes 2Yes 7
    -
    - -
    -
      -
    • Good
    • -
    • Bad
    • -
    - -
    -
      -
    1. Usually based on a phone number, in some cases on usernames
    2. -
    3. DNS-based addresses
    4. -
    5. Public key or some other globally unique ID
    6. -
    7. If operator’s servers are compromised
    8. -
    9. Does not protect users' metadata
    10. -
    11. - While P2P are distributed, they are not federated - they operate as a single network -
    12. -
    13. - P2P networks either have a central authority or the whole network can be compromised - - see - here -
    14. -
    -
    -
    -
    -
    - -
    -
    -
    -

    SimpleX messaging protocol

    -

    Unidirectional (simplex) queues

    -

    - Simplex messaging protocol - (SMP) for messaging via secure persistent queues will serve as the low level protocol for - SimpleX chat - see - demo server implementation.
    - It uses different encryption keys for each message queue - the key is passed via existing - secure channel - e.g. QR code or another simplex queue.
    -

    -
    - simplex messaging protocol
    -
    + -
    -
    -
    -

    Chat

    -

    Communication integrity

    -

    - Each chat uses two (or more) simplex queues for duplex communication. Each message contains the - hash of the previous message to detect if messages are lost or changed. -

    -
    - simplex chat: duplex conversation -
    -
    + + + + +
    +
    +

    Comparison with other protocols

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + simplex logo + + Signal, big platformsXMPP, MatrixP2P protocols
    Requires global identityNo - privateYes 1Yes 2Yes 3
    Possibility of MITMNo - secureYes 4YesYes
    Dependence on DNSNo - resilientYesYesNo
    Single or centralized networkNo - decentralizedYesNo - federated 5Yes 6
    Central component or other network-wide attackNo - resilientYesYes 2Yes 7
    +
    + +
    + +
    +
    +
      +
    1. Usually based on a phone number, in some cases on usernames
    2. +
    3. DNS-based addresses
    4. +
    5. Public key or some other globally unique ID
    6. +
    7. If operator’s servers are compromised
    8. +
    9. Does not protect users' metadata
    10. +
    11. While P2P are distributed, they are not federated - they operate as a single network
    12. +
    13. P2P networks either have a central authority or the whole network can be compromised - see here
    14. +
    +
    +
    +
    +
    + + + +
    +
    +

    Join SimpleX

    +

    We invite you to join the conversion

    + + + +

    Sign up to receive our updates

    + +
    -
    - -
    -
    - - - -
    -
    + + + - - + + +
    +
    + + © 2020-2022 SimpleX | Open-Source Project +
    +
    + + + + + + diff --git a/invitation/index.html b/invitation/index.html index d170f40a4..f567e12ae 100644 --- a/invitation/index.html +++ b/invitation/index.html @@ -1,327 +1,492 @@ - + + + + + + SimpleX Chat - Invitation + + + + + + + + + + + + + - - - - - SimpleX chat: private, secure, no global identities - - - - - - - - - - - + + + +
    +
    + + -
    - - -
    - -
    -
    - - -
    - Whitepaper - Comparison - Blog +
    - - - + else if(e.target.closest('.nav-toggle-btn')){ + document.body.classList.toggle('lock-scroll'); + if(nav.classList.contains('open')){ + nav.classList.remove('open'); + document.getElementById('hamburger').classList.remove('hidden'); + document.getElementById('cross').classList.add('hidden'); + } + else{ + nav.classList.add('open'); + document.getElementById('hamburger').classList.add('hidden'); + document.getElementById('cross').classList.remove('hidden'); + } + } + else if(e.target.closest('.theme-switch-btn')){ + themeSwitch(); + } +}) + +themeCheck(); + +const changeHeaderBg = ()=>{ + const header = document.querySelector('header') + const scrollValue = window.scrollY + if(scrollValue > 5){ + header.classList.add('bg-primary-bg-light'); + header.classList.add('dark:bg-primary-bg-dark'); + } + else{ + header.classList.remove('bg-primary-bg-light'); + header.classList.remove('dark:bg-primary-bg-dark'); + } +} + +window.addEventListener('scroll',changeHeaderBg); + +
    + + + + + -
    -
    -

    This link is the invitation from a SimpleX Chat user

    - -
    -
    -

    If you already installed SimpleX Chat for the - terminal v1.0.0+, copy the command below and use it in the chat: -

    - -

    - - - Copy to clipboard - - -

    -
    - -
    - -
    -

    Scan QR code from mobile app

    -

    - To make a connection: +

    -
    -
    -
    -

    To install SimpleX Chat for the terminal

    -
    -

    - use this command: -

    -
    -

    curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/master/install.sh - | - bash - - Copy to clipboard - - -

    +
    +
    +
    + +
    + +
    +

    Scan QR code from mobile app

    + +
    +
    -
    - -
    -

    - See SimpleX Chat - GitHub repository - - for the instructions how to download or compile it from the source code. -

    -
    -
    -
    + -
    -
    -
    -

    Use SimpleX

    -

    - SimpleX chat terminal client - v2.0.0 is - released!
    - – groups and files
    - – two-layer E2E encryption, with double-ratchet algorithm
    - – protocol is compatible with mobile apps
    -

    -

    - You can use our servers or deploy your own, e.g. using - - StackScript on Linode. -

    -

    - Sign up to be updated about the new releases. -

    -
    -
    -
    + - - +
    +
    + logo + + +
    + +
    + +
    +
    + © 2020-2022 SimpleX | Open-Source Project + + + + + + + + diff --git a/js/animation.js b/js/animation.js new file mode 100644 index 000000000..26217a8a7 --- /dev/null +++ b/js/animation.js @@ -0,0 +1,130 @@ +window.addEventListener("load", function () { + const imgPath = "/img/hero" + const fastImages = mkFastImages(0, 20); + const slowImages = mkSlowImages([ + ["0005", 3], + ["0008", 1], + ["0009", 2], + ["0011", 3], + ["0014", 3], + ["0017", 1], + ["0018", 2], + ["0020", 2], + ["0022", 2], + ["0024", 3], + ["0027", 1], + ["0028", 2], + ["0030", 2], + ["0032", 3], + ["0035", 1], + ["0036", 2], + ["0038", 1], + ["0039", 1] + ]) + + let complete = false; + run(); + window.onload = run; + + function mkFastImages(from, to) { + const seq = []; + for (let n = from; n <= to; n++) { + let img = "" + n; + img = "0".repeat(4 - img.length) + img; + seq.push([`${imgPath}/light/10fps/${img}.webp`, `${imgPath}/dark/10fps/${img}.webp`, 1]); + } + return seq; + } + + function mkSlowImages(images) { + return images.map(([img, n]) => [`${imgPath}/light/2fps/${img}.webp`, `${imgPath}/dark/2fps/${img}.webp`, n]) + } + + // function setupScroll (imgBackground) { + // const totalHeight = this.document.body.scrollHeight - this.window.innerHeight; + // this.window.onscroll = () => { + // let progressHeight = (window.pageYOffset / totalHeight) * 100; + // if (progressHeight > 10) { + // imgBackground.style.position = "absolute"; + // imgBackground.style.top = "100%"; + // } else { + // imgBackground.style.position = "fixed"; + // imgBackground.style.top = "auto"; + // } + // }; + // } + + async function run() { + const lightImageEl = document.getElementById("hero-phone-light"); + const darkImageEl = document.getElementById("hero-phone-dark"); + const preloadEl = document.getElementById("hero-phone-preload"); + const imgBackground = document.getElementsByClassName("hero-phone-background")[0] + const videoEl = this.document.getElementById("hero-phone-video") + if (complete || !lightImageEl || !darkImageEl || !preloadEl || !imgBackground || !videoEl) return; + complete = true; + // setupScroll(imgBackground) + await preload(fastImages.concat(slowImages)); + await animate(fastImages, 100); + await delay(500) + await animate(slowImages, 500); + // todo - this should happen on scroll, not when animation ends + lightImageEl.style.animationName = "big"; + darkImageEl.style.animationName = "big"; + videoEl.style.animationName = "bigvideo"; + if (window.innerWidth > 1279) { + videoEl.style.display = "block"; + } + + async function preload(images) { + let imgEls = []; + let resolved = false; + return new Promise((resolve) => { + setTimeout(() => { + if (!resolved) { + resolved = true; + resolve(); + } + }, 2000); + for (const [lightImg, darkImg] of images) { + preloadImg(lightImg) + preloadImg(darkImg) + } + + function preloadImg(img) { + const el = document.createElement("img"); + el.src = img; + imgEls.push(el); + preloadEl.appendChild(el); + const loaded = () => { + imgEls = imgEls.filter((e) => e !== el); + if (imgEls.length === 0 && !resolved) { + resolved = true; + resolve(); + } + }; + el.addEventListener("load", loaded); + el.addEventListener("error", loaded); + } + }); + } + + async function animate(images, ms) { + let i = 0; + for (const [lightImg, darkImg, n] of images) { + lightImageEl.src = lightImg; + darkImageEl.src = darkImg; + i++; + if (ms == 500 && i > 16) { + // TODO this is hack, also this should happen on scroll, not during the animation + lightImageEl.style.animationName = "small"; + darkImageEl.style.animationName = "small"; + } + await delay(ms * n); + } + } + + async function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + } +}); \ No newline at end of file diff --git a/js/animation2.js b/js/animation2.js new file mode 100644 index 000000000..1513a5467 --- /dev/null +++ b/js/animation2.js @@ -0,0 +1,114 @@ +window.addEventListener("load", function () { + // const slowImages = mkSequence("./slowImages2/Lightphone1_", 8, 39, ".png") + console.log(this.window.innerWidth); + // if (window.innerWidth <= 770) { + // this.document.getElementsByClassName( + // "flex items-center gap-10" + // )[0].style.display = "none"; + // this.document.getElementsByClassName("hero-phone-background")[0].className = + // "tablet-hero-phone-background"; + // this.document.getElementById("hero-phone").src = + // "../slowImages1/Lightphone1_0015.png"; + // this.document.getElementById("hero-phone").className = "tablet-hero-phone"; + // } else + if (window.innerWidth > 770) { + const fastImages = mkSequence("/img/new/fastImages/Lightphone1_", 0, 30, ".png"); + const slowImages = mkSequence("/img/new/slowImages1/Lightphone1_", 8, 47, ".png"); + + let complete = false; + run(); + window.onload = run; + + function mkSequence(prefix, from, to, ext) { + const seq = []; + for (let n = from; n <= to; n++) { + let suffix = "" + n; + suffix = "0".repeat(4 - suffix.length) + suffix; + seq.push(prefix + suffix + ext); + } + return seq; + } + + let totalHeight = this.document.body.scrollHeight - this.window.innerHeight; + this.window.onscroll = function () { + let progressHeight = (window.pageYOffset / totalHeight) * 100; + if (progressHeight > 11) { + document.getElementsByClassName( + "hero-phone-background" + )[0].style.position = "absolute"; + document.getElementsByClassName("hero-phone-background")[0].style.top = + "100%"; + } else { + document.getElementsByClassName( + "hero-phone-background" + )[0].style.position = "fixed"; + document.getElementsByClassName("hero-phone-background")[0].style.top = + "auto"; + } + }; + + async function run() { + const imageEl = document.getElementById("hero-phone"); + const preloadEl = document.getElementById("hero-phone-preload"); + if (complete || !imageEl || !preloadEl) return; + complete = true; + await preload(fastImages.concat(slowImages)); + await animate(fastImages, 100); + await animate(slowImages, 500); + + async function preload(images) { + let imgEls = []; + let resolved = false; + return new Promise((resolve) => { + setTimeout(() => { + if (!resolved) { + resolved = true; + resolve(); + } + }, 2000); + for (const img of images) { + const el = document.createElement("img"); + el.src = img; + imgEls.push(el); + preloadEl.appendChild(el); + const loaded = () => { + imgEls = imgEls.filter((e) => e !== el); + if (imgEls.length === 0 && !resolved) { + resolved = true; + resolve(); + } + }; + el.addEventListener("load", loaded); + el.addEventListener("error", loaded); + } + }); + } + + async function animate(images, ms) { + let i = 0; + for (const img of images) { + imageEl.src = img; + i++; + if (ms == 500 && i > 30) { + this.document.getElementById("hero-phone").style.animationName = + "small"; + } + if (ms == 500 && i > 38) { + this.document.getElementById("hero-phone").style.animationName = + "big"; + this.document.getElementById( + "hero-phone-video" + ).style.animationName = "bigvideo"; + this.document.getElementById("hero-phone-video").style.display = + "block"; + } + await delay(ms); + } + } + + async function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + } + } +}); \ No newline at end of file diff --git a/js/contact.js b/js/contact.js new file mode 100644 index 000000000..33fa11057 --- /dev/null +++ b/js/contact.js @@ -0,0 +1,67 @@ +(function () { + + let complete = false + run() + window.onload = run + + async function run() { + const connURIel = document.getElementById("conn_req_uri_text"); + const mobileConnURIanchor = document.getElementById("mobile_conn_req_uri"); + const connQRCodes = document.getElementsByClassName("conn_req_uri_qrcode"); + console.log(connQRCodes); + if (complete || !connURIel || !mobileConnURIanchor || connQRCodes < 2) return + complete = true + const connURI = document.location.toString().replace(/\/(contact|invitation)\//, "/$1"); + connURIel.innerText = "/c " + connURI; + const parsedURI = new URL(connURI) + mobileConnURIanchor.href = "simplex:" + parsedURI.pathname + parsedURI.hash + // const els = document.querySelectorAll(".content_copy_with_tooltip"); + // if (navigator.clipboard) { + // els.forEach(contentCopyWithTooltip) + // } else { + // const tooltips = document.querySelectorAll(".content_copy_with_tooltip .tooltip"); + // tooltips.forEach(el => el.style.visibility = "hidden") + // } + + for (const connQRCode of connQRCodes) { + try { + await QRCode.toCanvas(connQRCode, connURI, { + errorCorrectionLevel: "M", + color: { dark: "#062D56" } + }); + connQRCode.style.width = "320px"; + connQRCode.style.height = "320px"; + } catch (err) { + console.error(err); + } + } + + function contentCopyWithTooltip(parent) { + const content = parent.querySelector(".content"); + const tooltip = parent.querySelector(".tooltiptext"); + console.log(parent.querySelector(".content_copy"), 111) + console.log(parent) + const copyButton = parent.querySelector(".content_copy"); + copyButton.addEventListener("click", copyAddress) + copyButton.addEventListener("mouseout", resetTooltip) + + function copyAddress() { + navigator.clipboard.writeText(content.innerText || content.value); + tooltip.innerHTML = "Copied!"; + } + + function resetTooltip() { + tooltip.innerHTML = "Copy to clipboard"; + } + } + + function copyAddress() { + navigator.clipboard.writeText(connURI); + tooltipEl.innerHTML = "Copied!"; + } + + function resetTooltip() { + tooltipEl.innerHTML = "Copy to clipboard"; + } + } +})(); diff --git a/contact/qrcode.js b/js/qrcode.js similarity index 100% rename from contact/qrcode.js rename to js/qrcode.js diff --git a/js/script.js b/js/script.js index 88a6409d7..9011e2e1a 100644 --- a/js/script.js +++ b/js/script.js @@ -1,8 +1,132 @@ -// console.log(window.location.href) -// if(window.location.href.includes('comparison')){ -// console.log('Comparison'); -// document.querySelector('.comparison-nav-btn').classList.add('nav-button-active'); -// } -// else if(window.location.href.includes('blog')){ -// document.querySelector('.blog-nav-btn').classList.add('nav-button-active'); -// } +const uniqueSwiper = new Swiper('.unique-swiper', { + slidesPerView: 1, + spaceBetween: 80, + // autoplay: { + // delay: 3000, + // disableOnInteraction: false, + // }, + direction: 'horizontal', + pagination: { + el: '.simplex-unique-swiper-pagination', + clickable: true, + }, + navigation: { + nextEl: '.unique-swiper-button-next', + prevEl: '.unique-swiper-button-prev', + }, +}); + +const privateSwiper = new Swiper('.private-swiper', { + slidesPerView: 1, + spaceBetween: 20, + // autoplay: { + // delay: 3000, + // }, + + direction: 'horizontal', + scrollbar: { + el: ".swiper-scrollbar", + dragSize: 100, + }, + + navigation: { + nextEl: '.private-swiper-button-next', + prevEl: '.private-swiper-button-prev', + }, + + breakpoints: { + 1280: { + slidesPerView: 4, + spaceBetween: 20, + }, + 1024: { + slidesPerView: 3, + spaceBetween: 20, + }, + 768: { + slidesPerView: 2, + spaceBetween: 20, + } + }, +}); + +const simplexExplainedSwiper = new Swiper(".simplex-explained-swiper", { + slidesPerView: 1, + spaceBetween: 80, + // autoplay: { + // delay: 3000, + // disableOnInteraction: false, + // }, + direction: "horizontal", + pagination: { + el: ".simplex-explained-swiper-pagination", + clickable: true + } +}); + +function closeOverlay (e) { + e.target.closest('.overlay').classList.remove('flex'); + e.target.closest('.overlay').classList.add('hidden'); + document.body.classList.toggle('lock-scroll'); +} + +window.addEventListener('click', clickHandler) +window.addEventListener('touchstart', clickHandler) + +function clickHandler(e) { + console.log(e) + e.stopPropagation() + if (e.target.closest('.card')) { + e.target.closest('.card').classList.toggle('card-active'); + e.target.closest('.card').classList.toggle('no-hover'); + } + + // ---------------For Overlay-------------------- + else if (e.target.closest('.close-overlay-btn')) { + closeOverlay(e); + } + else if (e.target.closest('.overlay-card')) { + return; + } + else if (e.target.closest('.overlay')) { + closeOverlay(e); + } + else if (e.target.closest('.open-overlay-btn')) { + let id = e.target.closest('.open-overlay-btn').dataset.showOverlay; + let overlay = document.getElementById(id); + overlay.classList.remove('hidden'); + overlay.classList.add('flex'); + document.body.classList.toggle('lock-scroll'); + } + // ----------------------------------------------- + // ---------- For Contact & Invitation Page tabs + else if(e.target.closest('.contact-tab-btn')){ + e.target.closest('.contact-tab').classList.toggle('active') + } +} + +const isMobile = { + Android: () => navigator.userAgent.match(/Android/i), + iOS: () => navigator.userAgent.match(/iPhone|iPad|iPod/i) +}; + +window.addEventListener('load', () => { + const googlePlayBtn = document.querySelector('.google-play-btn'); + const appleStoreBtn = document.querySelector('.apple-store-btn'); + const fDroidBtn = document.querySelector('.f-droid-btn'); + if(!googlePlayBtn || !appleStoreBtn || !fDroidBtn) return; + + + if (isMobile.Android()) { + googlePlayBtn.classList.remove('hidden'); + fDroidBtn.classList.remove('hidden'); + } + else if (isMobile.iOS()) { + appleStoreBtn.classList.remove('hidden'); + } + else { + appleStoreBtn.classList.remove('hidden'); + googlePlayBtn.classList.remove('hidden'); + fDroidBtn.classList.remove('hidden'); + } +}) diff --git a/js/swiper-bundle.min.js b/js/swiper-bundle.min.js new file mode 100644 index 000000000..0c347e3e0 --- /dev/null +++ b/js/swiper-bundle.min.js @@ -0,0 +1,14 @@ +/** + * Swiper 8.4.3 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2022 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: October 6, 2022 + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(s,a){void 0===s&&(s={}),void 0===a&&(a={}),Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}class n extends Array{constructor(e){"number"==typeof e?super(e):(super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this))}}function l(e){void 0===e&&(e=[]);const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...l(e)):t.push(e)})),t}function o(e,t){return Array.prototype.filter.call(e,t)}function d(e,t){const s=r(),i=a();let l=[];if(!t&&e instanceof n)return e;if(!e)return new n(l);if("string"==typeof e){const s=e.trim();if(s.indexOf("<")>=0&&s.indexOf(">")>=0){let e="div";0===s.indexOf("e.split(" "))));return this.forEach((e=>{e.classList.add(...a)})),this},removeClass:function(){for(var e=arguments.length,t=new Array(e),s=0;se.split(" "))));return this.forEach((e=>{e.classList.remove(...a)})),this},hasClass:function(){for(var e=arguments.length,t=new Array(e),s=0;se.split(" "))));return o(this,(e=>a.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(){for(var e=arguments.length,t=new Array(e),s=0;se.split(" "))));this.forEach((e=>{a.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s=0;e-=1){const i=a[e];r&&i.listener===r||r&&i.listener&&i.listener.dom7proxy&&i.listener.dom7proxy===r?(s.removeEventListener(t,i.proxyListener,n),a.splice(e,1)):r||(s.removeEventListener(t,i.proxyListener,n),a.splice(e,1))}}}return this},trigger:function(){const e=r();for(var t=arguments.length,s=new Array(t),a=0;at>0)),i.dispatchEvent(t),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function s(a){a.target===this&&(e.call(this,a),t.off("transitionend",s))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=r();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=r(),t=a(),s=this[0],i=s.getBoundingClientRect(),n=t.body,l=s.clientTop||n.clientTop||0,o=s.clientLeft||n.clientLeft||0,d=s===e?e.scrollY:s.scrollTop,c=s===e?e.scrollX:s.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}return null},css:function(e,t){const s=r();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a{e.apply(t,[t,s])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;tt-1)return d([]);if(e<0){const s=t+e;return d(s<0?[]:[this[s]])}return d([this[e]])},append:function(){let e;const t=a();for(let s=0;s=0;i-=1)this[s].insertBefore(a.childNodes[i],this[s].childNodes[0])}else if(e instanceof n)for(i=0;i0?e?this[0].nextElementSibling&&d(this[0].nextElementSibling).is(e)?d([this[0].nextElementSibling]):d([]):this[0].nextElementSibling?d([this[0].nextElementSibling]):d([]):d([])},nextAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.nextElementSibling;){const a=s.nextElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&d(t.previousElementSibling).is(e)?d([t.previousElementSibling]):d([]):t.previousElementSibling?d([t.previousElementSibling]):d([])}return d([])},prevAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.previousElementSibling;){const a=s.previousElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},parent:function(e){const t=[];for(let s=0;s6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),n=new s.WebKitCSSMatrix("none"===i?"":i)):(n=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(i=s.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=s.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function m(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function f(e){return"undefined"!=typeof window&&void 0!==window.HTMLElement?e instanceof HTMLElement:e&&(1===e.nodeType||11===e.nodeType)}function g(){const e=Object(arguments.length<=0?void 0:arguments[0]),t=["__proto__","constructor","prototype"];for(let s=1;st.indexOf(e)<0));for(let t=0,i=s.length;tn?"next":"prev",p=(e,t)=>"next"===c&&e>=t||"prev"===c&&e<=t,u=()=>{l=(new Date).getTime(),null===o&&(o=l);const e=Math.max(Math.min((l-o)/d,1),0),r=.5-Math.cos(e*Math.PI)/2;let c=n+r*(s-n);if(p(c,s)&&(c=s),t.wrapperEl.scrollTo({[a]:c}),p(c,s))return t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.scrollSnapType="",setTimeout((()=>{t.wrapperEl.style.overflow="",t.wrapperEl.scrollTo({[a]:c})})),void i.cancelAnimationFrame(t.cssModeFrameID);t.cssModeFrameID=i.requestAnimationFrame(u)};u()}let b,x,y;function E(){return b||(b=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,s)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),b}function C(e){return void 0===e&&(e={}),x||(x=function(e){let{userAgent:t}=void 0===e?{}:e;const s=E(),a=r(),i=a.navigator.platform,n=t||a.navigator.userAgent,l={ios:!1,android:!1},o=a.screen.width,d=a.screen.height,c=n.match(/(Android);?[\s\/]+([\d.]+)?/);let p=n.match(/(iPad).*OS\s([\d_]+)/);const u=n.match(/(iPod)(.*OS\s([\d_]+))?/),h=!p&&n.match(/(iPhone\sOS|iOS)\s([\d_]+)/),m="Win32"===i;let f="MacIntel"===i;return!p&&f&&s.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${o}x${d}`)>=0&&(p=n.match(/(Version)\/([\d.]+)/),p||(p=[0,1,"13_0_0"]),f=!1),c&&!m&&(l.os="android",l.android=!0),(p||h||u)&&(l.os="ios",l.ios=!0),l}(e)),x}function T(){return y||(y=function(){const e=r();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),y}Object.keys(c).forEach((e=>{Object.defineProperty(d.fn,e,{value:c[e],writable:!0})}));var $={on(e,t,s){const a=this;if(!a.eventsListeners||a.destroyed)return a;if("function"!=typeof t)return a;const i=s?"unshift":"push";return e.split(" ").forEach((e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][i](t)})),a},once(e,t,s){const a=this;if(!a.eventsListeners||a.destroyed)return a;if("function"!=typeof t)return a;function i(){a.off(e,i),i.__emitterProxy&&delete i.__emitterProxy;for(var s=arguments.length,r=new Array(s),n=0;n=0&&t.eventsAnyListeners.splice(s,1),t},off(e,t){const s=this;return!s.eventsListeners||s.destroyed?s:s.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].forEach(((a,i)=>{(a===t||a.__emitterProxy&&a.__emitterProxy===t)&&s.eventsListeners[e].splice(i,1)}))})),s):s},emit(){const e=this;if(!e.eventsListeners||e.destroyed)return e;if(!e.eventsListeners)return e;let t,s,a;for(var i=arguments.length,r=new Array(i),n=0;n{e.eventsAnyListeners&&e.eventsAnyListeners.length&&e.eventsAnyListeners.forEach((e=>{e.apply(a,[t,...s])})),e.eventsListeners&&e.eventsListeners[t]&&e.eventsListeners[t].forEach((e=>{e.apply(a,s)}))})),e}};var S={updateSize:function(){const e=this;let t,s;const a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,s=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),s=s-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(s)&&(s=0),Object.assign(e,{width:t,height:s,size:e.isHorizontal()?t:s}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function s(e,s){return parseFloat(e.getPropertyValue(t(s))||0)}const a=e.params,{$wrapperEl:i,size:r,rtlTranslate:n,wrongRTL:l}=e,o=e.virtual&&a.virtual.enabled,d=o?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),p=o?e.virtual.slides.length:c.length;let u=[];const h=[],m=[];let f=a.slidesOffsetBefore;"function"==typeof f&&(f=a.slidesOffsetBefore.call(e));let g=a.slidesOffsetAfter;"function"==typeof g&&(g=a.slidesOffsetAfter.call(e));const w=e.snapGrid.length,b=e.slidesGrid.length;let x=a.spaceBetween,y=-f,E=0,C=0;if(void 0===r)return;"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*r),e.virtualSize=-x,n?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),a.centeredSlides&&a.cssMode&&(v(e.wrapperEl,"--swiper-centered-offset-before",""),v(e.wrapperEl,"--swiper-centered-offset-after",""));const T=a.grid&&a.grid.rows>1&&e.grid;let $;T&&e.grid.initSlides(p);const S="auto"===a.slidesPerView&&a.breakpoints&&Object.keys(a.breakpoints).filter((e=>void 0!==a.breakpoints[e].slidesPerView)).length>0;for(let i=0;i1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+g:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e{u[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:u,slidesGrid:h,slidesSizesGrid:m}),a.centeredSlides&&a.cssMode&&!a.centeredSlidesBounds){v(e.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),v(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],s=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+s))}if(p!==d&&e.emit("slidesLengthChange"),u.length!==w&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==b&&e.emit("slidesGridLengthChange"),a.watchSlidesProgress&&e.updateSlidesOffset(),!(o||a.cssMode||"slide"!==a.effect&&"fade"!==a.effect)){const t=`${a.containerModifierClass}backface-hidden`,s=e.$el.hasClass(t);p<=a.maxBackfaceHiddenSlides?s||e.$el.addClass(t):s&&e.$el.removeClass(t)}},updateAutoHeight:function(e){const t=this,s=[],a=t.virtual&&t.params.virtual.enabled;let i,r=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const n=e=>a?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||d([])).each((e=>{s.push(e)}));else for(i=0;it.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;ir?e:r}(r||0===r)&&t.$wrapperEl.css("height",`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let s=0;s=0&&p1&&u<=t.size||p<=0&&u>=t.size)&&(t.visibleSlides.push(l),t.visibleSlidesIndexes.push(e),a.eq(e).addClass(s.slideVisibleClass)),l.progress=i?-d:d,l.originalProgress=i?-c:c}t.visibleSlides=d(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,a=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:r,isEnd:n}=t;const l=r,o=n;0===a?(i=0,r=!0,n=!0):(i=(e-t.minTranslate())/a,r=i<=0,n=i>=1),Object.assign(t,{progress:i,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!l&&t.emit("reachBeginning toEdge"),n&&!o&&t.emit("reachEnd toEdge"),(l&&!r||o&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,$wrapperEl:a,activeIndex:i,realIndex:r}=e,n=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=n?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:i,params:r,activeIndex:n,realIndex:l,snapIndex:o}=t;let d,c=e;if(void 0===c){for(let e=0;e=a[e]&&s=a[e]&&s=a[e]&&(c=e);r.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(s)>=0)d=i.indexOf(s);else{const e=Math.min(r.slidesPerGroupSkip,c);d=e+Math.floor((c-e)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===n)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const p=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:d,realIndex:p,previousIndex:n,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==p&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,s=t.params,a=d(e).closest(`.${s.slideClass}`)[0];let i,r=!1;if(a)for(let e=0;eo?o:a&&en?"next":r=o.length&&(g=o.length-1);const v=-o[g];if(l.normalizeSlideIndex)for(let e=0;e=s&&t=s&&t=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&vr.translate&&v>r.maxTranslate()&&(p||0)!==n)return!1}let b;if(n!==(c||0)&&s&&r.emit("beforeSlideChangeStart"),r.updateProgress(v),b=n>p?"next":n{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return w({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return r.setTransition(t),r.setTranslate(v),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),0===t?r.transitionEnd(s,b):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e,t,s,a){if(void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0),"string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndexc(e)));let h=n[u.indexOf(p)-1];if(void 0===h&&i.cssMode){let e;n.forEach(((t,s)=>{p>=t&&(e=s)})),void 0!==e&&(h=n[e>0?e-1:e])}let m=0;if(void 0!==h&&(m=l.indexOf(h),m<0&&(m=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),i.rewind&&a.isBeginning){const i=a.params.virtual&&a.params.virtual.enabled&&a.virtual?a.virtual.slides.length-1:a.slides.length-1;return a.slideTo(i,e,t,s)}return a.slideTo(m,e,t,s)},slideReset:function(e,t,s){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e,t,s,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===a&&(a=.5);const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?re.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-a?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}};var z={loopCreate:function(){const e=this,t=a(),{params:s,$wrapperEl:i}=e,r=i.children().length>0?d(i.children()[0].parentNode):i;r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove();let n=r.children(`.${s.slideClass}`);if(s.loopFillGroupWithBlank){const e=s.slidesPerGroup-n.length%s.slidesPerGroup;if(e!==s.slidesPerGroup){for(let a=0;an.length&&e.params.loopedSlidesLimit&&(e.loopedSlides=n.length);const l=[],o=[];n.each(((e,t)=>{d(e).attr("data-swiper-slide-index",t)}));for(let t=0;t=0;e-=1)r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:a,allowSlidePrev:i,allowSlideNext:r,snapGrid:n,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-n[t]-e.getTranslate();if(t=s.length-a){o=-s.length+t+a,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=i,e.allowSlideNext=r,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}};function L(e){const t=this,s=a(),i=r(),n=t.touchEventsData,{params:l,touches:o,enabled:c}=t;if(!c)return;if(t.animating&&l.preventInteractionOnTransition)return;!t.animating&&l.cssMode&&l.loop&&t.loopFix();let p=e;p.originalEvent&&(p=p.originalEvent);let h=d(p.target);if("wrapper"===l.touchEventsTarget&&!h.closest(t.wrapperEl).length)return;if(n.isTouchEvent="touchstart"===p.type,!n.isTouchEvent&&"which"in p&&3===p.which)return;if(!n.isTouchEvent&&"button"in p&&p.button>0)return;if(n.isTouched&&n.isMoved)return;const m=!!l.noSwipingClass&&""!==l.noSwipingClass,f=e.composedPath?e.composedPath():e.path;m&&p.target&&p.target.shadowRoot&&f&&(h=d(f[0]));const g=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,v=!(!p.target||!p.target.shadowRoot);if(l.noSwiping&&(v?function(e,t){return void 0===t&&(t=this),function t(s){if(!s||s===a()||s===r())return null;s.assignedSlot&&(s=s.assignedSlot);const i=s.closest(e);return i||s.getRootNode?i||t(s.getRootNode().host):null}(t)}(g,h[0]):h.closest(g)[0]))return void(t.allowClick=!0);if(l.swipeHandler&&!h.closest(l.swipeHandler)[0])return;o.currentX="touchstart"===p.type?p.targetTouches[0].pageX:p.pageX,o.currentY="touchstart"===p.type?p.targetTouches[0].pageY:p.pageY;const w=o.currentX,b=o.currentY,x=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,y=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(x&&(w<=y||w>=i.innerWidth-y)){if("prevent"!==x)return;e.preventDefault()}if(Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=w,o.startY=b,n.touchStartTime=u(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1),"touchstart"!==p.type){let e=!0;h.is(n.focusableElements)&&(e=!1,"SELECT"===h[0].nodeName&&(n.isTouched=!1)),s.activeElement&&d(s.activeElement).is(n.focusableElements)&&s.activeElement!==h[0]&&s.activeElement.blur();const a=e&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!a||h[0].isContentEditable||p.preventDefault()}t.params.freeMode&&t.params.freeMode.enabled&&t.freeMode&&t.animating&&!l.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",p)}function O(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:o}=s;if(!o)return;let c=e;if(c.originalEvent&&(c=c.originalEvent),!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",c));if(i.isTouchEvent&&"touchmove"!==c.type)return;const p="touchmove"===c.type&&c.targetTouches&&(c.targetTouches[0]||c.changedTouches[0]),h="touchmove"===c.type?p.pageX:c.pageX,m="touchmove"===c.type?p.pageY:c.pageY;if(c.preventedByNestedSwiper)return n.startX=h,void(n.startY=m);if(!s.allowTouchMove)return d(c.target).is(i.focusableElements)||(s.allowClick=!1),void(i.isTouched&&(Object.assign(n,{startX:h,startY:m,currentX:h,currentY:m}),i.touchStartTime=u()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(mn.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(hn.startX&&s.translate>=s.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&c.target===t.activeElement&&d(c.target).is(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);if(i.allowTouchCallbacks&&s.emit("touchMove",c),c.targetTouches&&c.targetTouches.length>1)return;n.currentX=h,n.currentY=m;const f=n.currentX-n.startX,g=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(f**2+g**2)=25&&(e=180*Math.atan2(Math.abs(g),Math.abs(f))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",c),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation(),i.isMoved||(r.loop&&!r.cssMode&&s.loopFix(),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating&&s.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",c)),s.emit("sliderMove",c),i.isMoved=!0;let v=s.isHorizontal()?f:g;n.diff=v,v*=r.touchRatio,l&&(v=-v),s.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;let w=!0,b=r.resistanceRatio;if(r.touchReleaseOnEdges&&(b=0),v>0&&i.currentTranslate>s.minTranslate()?(w=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+v)**b)):v<0&&i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(v)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=s.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&s.freeMode||r.watchSlidesProgress)&&(s.updateActiveIndex(),s.updateSlidesClasses()),s.params.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function I(e){const t=this,s=t.touchEventsData,{params:a,touches:i,rtlTranslate:r,slidesGrid:n,enabled:l}=t;if(!l)return;let o=e;if(o.originalEvent&&(o=o.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",o),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&a.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);a.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const d=u(),c=d-s.touchStartTime;if(t.allowClick){const e=o.path||o.composedPath&&o.composedPath();t.updateClickedSlide(e&&e[0]||o.target),t.emit("tap click",o),c<300&&d-s.lastClickTime<300&&t.emit("doubleTap doubleClick",o)}if(s.lastClickTime=u(),p((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===i.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=a.followFinger?r?t.translate:-t.translate:-s.currentTranslate,a.cssMode)return;if(t.params.freeMode&&a.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});let m=0,f=t.slidesSizesGrid[0];for(let e=0;e=n[e]&&h=n[e]&&(m=e,f=n[n.length-1]-n[n.length-2])}let g=null,v=null;a.rewind&&(t.isBeginning?v=t.params.virtual&&t.params.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(g=0));const w=(h-n[m])/f,b=ma.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(w>=a.longSwipesRatio?t.slideTo(a.rewind&&t.isEnd?g:m+b):t.slideTo(m)),"prev"===t.swipeDirection&&(w>1-a.longSwipesRatio?t.slideTo(m+b):null!==v&&w<0&&Math.abs(w)>a.longSwipesRatio?t.slideTo(v):t.slideTo(m))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(o.target===t.navigation.nextEl||o.target===t.navigation.prevEl)?o.target===t.navigation.nextEl?t.slideTo(m+b):t.slideTo(m):("next"===t.swipeDirection&&t.slideTo(null!==g?g:m+b),"prev"===t.swipeDirection&&t.slideTo(null!==v?v:m))}}function A(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:a,allowSlidePrev:i,snapGrid:r}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function D(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function G(){const e=this,{wrapperEl:t,rtlTranslate:s,enabled:a}=e;if(!a)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const r=e.maxTranslate()-e.minTranslate();i=0===r?0:(e.translate-e.minTranslate())/r,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let N=!1;function B(){}const H=(e,t)=>{const s=a(),{params:i,touchEvents:r,el:n,wrapperEl:l,device:o,support:d}=e,c=!!i.nested,p="on"===t?"addEventListener":"removeEventListener",u=t;if(d.touch){const t=!("touchstart"!==r.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};n[p](r.start,e.onTouchStart,t),n[p](r.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),n[p](r.end,e.onTouchEnd,t),r.cancel&&n[p](r.cancel,e.onTouchEnd,t)}else n[p](r.start,e.onTouchStart,!1),s[p](r.move,e.onTouchMove,c),s[p](r.end,e.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&n[p]("click",e.onClick,!0),i.cssMode&&l[p]("scroll",e.onScroll),i.updateOnWindowResize?e[u](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",A,!0):e[u]("observerUpdate",A,!0)};var X={attachEvents:function(){const e=this,t=a(),{params:s,support:i}=e;e.onTouchStart=L.bind(e),e.onTouchMove=O.bind(e),e.onTouchEnd=I.bind(e),s.cssMode&&(e.onScroll=G.bind(e)),e.onClick=D.bind(e),i.touch&&!N&&(t.addEventListener("touchstart",B),N=!0),H(e,"on")},detachEvents:function(){H(this,"off")}};const Y=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var R={addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,$el:i,device:r,support:n}=e,l=function(e,t){const s=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((a=>{e[a]&&s.push(t+a)})):"string"==typeof e&&s.push(t+e)})),s}(["initialized",s.direction,{"pointer-events":!n.touch},{"free-mode":e.params.freeMode&&s.freeMode.enabled},{autoheight:s.autoHeight},{rtl:a},{grid:s.grid&&s.grid.rows>1},{"grid-column":s.grid&&s.grid.rows>1&&"column"===s.grid.fill},{android:r.android},{ios:r.ios},{"css-mode":s.cssMode},{centered:s.cssMode&&s.centeredSlides},{"watch-progress":s.watchSlidesProgress}],s.containerModifierClass);t.push(...l),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}};var W={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopedSlidesLimit:!0,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function q(e,t){return function(s){void 0===s&&(s={});const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(a)>=0&&!0===e[a]&&(e[a]={auto:!0}),a in e&&"enabled"in i?(!0===e[a]&&(e[a]={enabled:!0}),"object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),g(t,s)):g(t,s)):g(t,s)}}const j={eventsEmitter:$,update:S,translate:M,transition:{setTransition:function(e,t){const s=this;s.params.cssMode||s.$wrapperEl.transition(e),s.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);const s=this,{params:a}=s;a.cssMode||(a.autoHeight&&s.updateAutoHeight(),P({swiper:s,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e,t){void 0===e&&(e=!0);const s=this,{params:a}=s;s.animating=!1,a.cssMode||(s.setTransition(0),P({swiper:s,runCallbacks:e,direction:t,step:"End"}))}},slide:k,loop:z,grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;s.style.cursor="move",s.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:X,breakpoints:{setBreakpoint:function(){const e=this,{activeIndex:t,initialized:s,loopedSlides:a=0,params:i,$el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;const l=e.getBreakpoint(n,e.params.breakpointsBase,e.el);if(!l||e.currentBreakpoint===l)return;const o=(l in n?n[l]:void 0)||e.originalParams,d=Y(e,i),c=Y(e,o),p=i.enabled;d&&!c?(r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&c&&(r.addClass(`${i.containerModifierClass}grid`),(o.grid.fill&&"column"===o.grid.fill||!o.grid.fill&&"column"===i.grid.fill)&&r.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses()),["navigation","pagination","scrollbar"].forEach((t=>{const s=i[t]&&i[t].enabled,a=o[t]&&o[t].enabled;s&&!a&&e[t].disable(),!s&&a&&e[t].enable()}));const u=o.direction&&o.direction!==i.direction,h=i.loop&&(o.slidesPerView!==i.slidesPerView||u);u&&s&&e.changeDirection(),g(e.params,o);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),p&&!m?e.disable():!p&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",o),h&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",o)},getBreakpoint:function(e,t,s){if(void 0===t&&(t="window"),!e||"container"===t&&!s)return;let a=!1;const i=r(),n="window"===t?i.innerHeight:s.clientHeight,l=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:n*t,point:e}}return{value:e,point:e}}));l.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;es}else e.isLocked=1===e.snapGrid.length;!0===s.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===s.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:R,images:{loadImage:function(e,t,s,a,i,n){const l=r();let o;function c(){n&&n()}d(e).parent("picture")[0]||e.complete&&i?c():t?(o=new l.Image,o.onload=c,o.onerror=c,a&&(o.sizes=a),s&&(o.srcset=s),t&&(o.src=t)):c()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s1){const e=[];return d(t.el).each((s=>{const a=g({},t,{el:s});e.push(new V(a))})),e}const r=this;r.__swiper__=!0,r.support=E(),r.device=C({userAgent:t.userAgent}),r.browser=T(),r.eventsListeners={},r.eventsAnyListeners=[],r.modules=[...r.__modules__],t.modules&&Array.isArray(t.modules)&&r.modules.push(...t.modules);const n={};r.modules.forEach((e=>{e({swiper:r,extendParams:q(t,n),on:r.on.bind(r),once:r.once.bind(r),off:r.off.bind(r),emit:r.emit.bind(r)})}));const l=g({},W,n);return r.params=g({},l,_,t),r.originalParams=g({},r.params),r.passedParams=g({},t),r.params&&r.params.on&&Object.keys(r.params.on).forEach((e=>{r.on(e,r.params.on[e])})),r.params&&r.params.onAny&&r.onAny(r.params.onAny),r.$=d,Object.assign(r,{enabled:r.params.enabled,el:e,classNames:[],slides:d(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===r.params.direction,isVertical:()=>"vertical"===r.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:r.params.allowSlideNext,allowSlidePrev:r.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return r.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},r.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},r.support.touch||!r.params.simulateTouch?r.touchEventsTouch:r.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:r.params.focusableElements,lastClickTime:u(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:r.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),r.emit("_swiper"),r.params.init&&r.init(),r}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const s=this;e=Math.min(Math.max(e,0),1);const a=s.minTranslate(),i=(s.maxTranslate()-a)*e+a;s.translateTo(i,void 0===t?0:t),s.updateActiveIndex(),s.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((s=>{const a=e.getSlideClasses(s);t.push({slideEl:s,classNames:a}),e.emit("_slideClass",s,a)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e,t){void 0===e&&(e="current"),void 0===t&&(t=!1);const{params:s,slides:a,slidesGrid:i,slidesSizesGrid:r,size:n,activeIndex:l}=this;let o=1;if(s.centeredSlides){let e,t=a[l].swiperSlideSize;for(let s=l+1;sn&&(e=!0));for(let s=l-1;s>=0;s-=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0))}else if("current"===e)for(let e=l+1;e=0;e-=1){i[l]-i[e]1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||a()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t){void 0===t&&(t=!0);const s=this,a=s.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),s.emit("changeDirection"),t&&s.update()),s}changeLanguageDirection(e){const t=this;t.rtl&&"rtl"===e||!t.rtl&&"ltr"===e||(t.rtl="rtl"===e,t.rtlTranslate="horizontal"===t.params.direction&&t.rtl,t.rtl?(t.$el.addClass(`${t.params.containerModifierClass}rtl`),t.el.dir="rtl"):(t.$el.removeClass(`${t.params.containerModifierClass}rtl`),t.el.dir="ltr"),t.update())}mount(e){const t=this;if(t.mounted)return!0;const s=d(e||t.params.el);if(!(e=s[0]))return!1;e.swiper=t;const i=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let r=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=d(e.shadowRoot.querySelector(i()));return t.children=e=>s.children(e),t}return s.children?s.children(i()):d(s).children(i())})();if(0===r.length&&t.params.createElements){const e=a().createElement("div");r=d(e),e.className=t.params.wrapperClass,s.append(e),s.children(`.${t.params.slideClass}`).each((e=>{r.append(e)}))}return Object.assign(t,{$el:s,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);const s=this,{params:a,$el:i,$wrapperEl:r,slides:n}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),a.loop&&s.loopDestroy(),t&&(s.removeClasses(),i.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(s)),s.destroyed=!0),null}static extendDefaults(e){g(_,e)}static get extendedDefaults(){return _}static get defaults(){return W}static installModule(e){V.prototype.__modules__||(V.prototype.__modules__=[]);const t=V.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>V.installModule(e))),V):(V.installModule(e),V)}}function F(e,t,s,i){const r=a();return e.params.createElements&&Object.keys(i).forEach((a=>{if(!s[a]&&!0===s.auto){let n=e.$el.children(`.${i[a]}`)[0];n||(n=r.createElement("div"),n.className=i[a],e.$el.append(n)),s[a]=n,t[a]=n}})),s}function U(e){return void 0===e&&(e=""),`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function K(e){const t=this,{$wrapperEl:s,params:a}=t;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t=l)return void s.appendSlide(t);let o=n>e?n+1:n;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;ee?n+t.length:n}else a.append(t);for(let e=0;e{if(s.params.effect!==t)return;s.classNames.push(`${s.params.containerModifierClass}${t}`),l&&l()&&s.classNames.push(`${s.params.containerModifierClass}3d`);const e=n?n():{};Object.assign(s.params,e),Object.assign(s.originalParams,e)})),a("setTranslate",(()=>{s.params.effect===t&&i()})),a("setTransition",((e,a)=>{s.params.effect===t&&r(a)})),a("transitionEnd",(()=>{if(s.params.effect===t&&o){if(!d||!d().slideShadows)return;s.slides.each((e=>{s.$(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").remove()})),o()}})),a("virtualUpdate",(()=>{s.params.effect===t&&(s.slides.length||(c=!0),requestAnimationFrame((()=>{c&&s.slides&&s.slides.length&&(i(),c=!1)})))}))}function se(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function ae(e){let{swiper:t,duration:s,transformEl:a,allSlides:i}=e;const{slides:r,activeIndex:n,$wrapperEl:l}=t;if(t.params.virtualTranslate&&0!==s){let e,s=!1;e=i?a?r.find(a):r:a?r.eq(n).find(a):r.eq(n),e.transitionEnd((()=>{if(s)return;if(!t||t.destroyed)return;s=!0,t.animating=!1;const e=["webkitTransitionEnd","transitionend"];for(let t=0;t`),i.append(r)),r}Object.keys(j).forEach((e=>{Object.keys(j[e]).forEach((t=>{V.prototype[t]=j[e][t]}))})),V.use([function(e){let{swiper:t,on:s,emit:a}=e;const i=r();let n=null,l=null;const o=()=>{t&&!t.destroyed&&t.initialized&&(a("beforeResize"),a("resize"))},d=()=>{t&&!t.destroyed&&t.initialized&&a("orientationchange")};s("init",(()=>{t.params.resizeObserver&&void 0!==i.ResizeObserver?t&&!t.destroyed&&t.initialized&&(n=new ResizeObserver((e=>{l=i.requestAnimationFrame((()=>{const{width:s,height:a}=t;let i=s,r=a;e.forEach((e=>{let{contentBoxSize:s,contentRect:a,target:n}=e;n&&n!==t.el||(i=a?a.width:(s[0]||s).inlineSize,r=a?a.height:(s[0]||s).blockSize)})),i===s&&r===a||o()}))})),n.observe(t.el)):(i.addEventListener("resize",o),i.addEventListener("orientationchange",d))})),s("destroy",(()=>{l&&i.cancelAnimationFrame(l),n&&n.unobserve&&t.el&&(n.unobserve(t.el),n=null),i.removeEventListener("resize",o),i.removeEventListener("orientationchange",d)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=[],l=r(),o=function(e,t){void 0===t&&(t={});const s=new(l.MutationObserver||l.WebkitMutationObserver)((e=>{if(1===e.length)return void i("observerUpdate",e[0]);const t=function(){i("observerUpdate",e[0])};l.requestAnimationFrame?l.requestAnimationFrame(t):l.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),n.push(s)};s({observer:!1,observeParents:!1,observeSlideChildren:!1}),a("init",(()=>{if(t.params.observer){if(t.params.observeParents){const e=t.$el.parents();for(let t=0;t{n.forEach((e=>{e.disconnect()})),n.splice(0,n.length)}))}]);const re=[function(e){let t,{swiper:s,extendParams:a,on:i,emit:r}=e;function n(e,t){const a=s.params.virtual;if(a.cache&&s.virtual.cache[t])return s.virtual.cache[t];const i=a.renderSlide?d(a.renderSlide.call(s,e,t)):d(`
    ${e}
    `);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",t),a.cache&&(s.virtual.cache[t]=i),i}function l(e){const{slidesPerView:t,slidesPerGroup:a,centeredSlides:i}=s.params,{addSlidesBefore:l,addSlidesAfter:o}=s.params.virtual,{from:d,to:c,slides:p,slidesGrid:u,offset:h}=s.virtual;s.params.cssMode||s.updateActiveIndex();const m=s.activeIndex||0;let f,g,v;f=s.rtlTranslate?"right":s.isHorizontal()?"left":"top",i?(g=Math.floor(t/2)+a+o,v=Math.floor(t/2)+a+l):(g=t+(a-1)+o,v=a+l);const w=Math.max((m||0)-v,0),b=Math.min((m||0)+g,p.length-1),x=(s.slidesGrid[w]||0)-(s.slidesGrid[0]||0);function y(){s.updateSlides(),s.updateProgress(),s.updateSlidesClasses(),s.lazy&&s.params.lazy.enabled&&s.lazy.load(),r("virtualUpdate")}if(Object.assign(s.virtual,{from:w,to:b,offset:x,slidesGrid:s.slidesGrid}),d===w&&c===b&&!e)return s.slidesGrid!==u&&x!==h&&s.slides.css(f,`${x}px`),s.updateProgress(),void r("virtualUpdate");if(s.params.virtual.renderExternal)return s.params.virtual.renderExternal.call(s,{offset:x,from:w,to:b,slides:function(){const e=[];for(let t=w;t<=b;t+=1)e.push(p[t]);return e}()}),void(s.params.virtual.renderExternalUpdate?y():r("virtualUpdate"));const E=[],C=[];if(e)s.$wrapperEl.find(`.${s.params.slideClass}`).remove();else for(let e=d;e<=c;e+=1)(eb)&&s.$wrapperEl.find(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`).remove();for(let t=0;t=w&&t<=b&&(void 0===c||e?C.push(t):(t>c&&C.push(t),t{s.$wrapperEl.append(n(p[e],e))})),E.sort(((e,t)=>t-e)).forEach((e=>{s.$wrapperEl.prepend(n(p[e],e))})),s.$wrapperEl.children(".swiper-slide").css(f,`${x}px`),y()}a({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),s.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},i("beforeInit",(()=>{s.params.virtual.enabled&&(s.virtual.slides=s.params.virtual.slides,s.classNames.push(`${s.params.containerModifierClass}virtual`),s.params.watchSlidesProgress=!0,s.originalParams.watchSlidesProgress=!0,s.params.initialSlide||l())})),i("setTranslate",(()=>{s.params.virtual.enabled&&(s.params.cssMode&&!s._immediateVirtual?(clearTimeout(t),t=setTimeout((()=>{l()}),100)):l())})),i("init update resize",(()=>{s.params.virtual.enabled&&s.params.cssMode&&v(s.wrapperEl,"--swiper-virtual-size",`${s.virtualSize}px`)})),Object.assign(s.virtual,{appendSlide:function(e){if("object"==typeof e&&"length"in e)for(let t=0;t{const a=e[s],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),t[parseInt(s,10)+i]=a})),s.virtual.cache=t}l(!0),s.slideTo(a,0)},removeSlide:function(e){if(null==e)return;let t=s.activeIndex;if(Array.isArray(e))for(let a=e.length-1;a>=0;a-=1)s.virtual.slides.splice(e[a],1),s.params.virtual.cache&&delete s.virtual.cache[e[a]],e[a]0&&0===t.$el.parents(`.${t.params.slideActiveClass}`).length)return;const a=t.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=o.innerWidth,l=o.innerHeight,d=t.$el.offset();s&&(d.left-=t.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let t=0;t=0&&s[0]<=n&&s[1]>=0&&s[1]<=l){if(0===s[0]&&0===s[1])continue;e=!0}}if(!e)return}t.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&t.slideNext(),((d||p)&&!s||(c||u)&&s)&&t.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&t.slideNext(),(d||h)&&t.slidePrev()),n("keyPress",i)}}function p(){t.keyboard.enabled||(d(l).on("keydown",c),t.keyboard.enabled=!0)}function u(){t.keyboard.enabled&&(d(l).off("keydown",c),t.keyboard.enabled=!1)}t.keyboard={enabled:!1},s({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),i("init",(()=>{t.params.keyboard.enabled&&p()})),i("destroy",(()=>{t.keyboard.enabled&&u()})),Object.assign(t.keyboard,{enable:p,disable:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();let l;s({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),t.mousewheel={enabled:!1};let o,c=u();const h=[];function m(){t.enabled&&(t.mouseEntered=!0)}function f(){t.enabled&&(t.mouseEntered=!1)}function g(e){return!(t.params.mousewheel.thresholdDelta&&e.delta=6&&u()-c<60||(e.direction<0?t.isEnd&&!t.params.loop||t.animating||(t.slideNext(),i("scroll",e.raw)):t.isBeginning&&!t.params.loop||t.animating||(t.slidePrev(),i("scroll",e.raw)),c=(new n.Date).getTime(),!1)))}function v(e){let s=e,a=!0;if(!t.enabled)return;const r=t.params.mousewheel;t.params.cssMode&&s.preventDefault();let n=t.$el;if("container"!==t.params.mousewheel.eventsTarget&&(n=d(t.params.mousewheel.eventsTarget)),!t.mouseEntered&&!n[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let c=0;const m=t.rtlTranslate?-1:1,f=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(t.isHorizontal()){if(!(Math.abs(f.pixelX)>Math.abs(f.pixelY)))return!0;c=-f.pixelX*m}else{if(!(Math.abs(f.pixelY)>Math.abs(f.pixelX)))return!0;c=-f.pixelY}else c=Math.abs(f.pixelX)>Math.abs(f.pixelY)?-f.pixelX*m:-f.pixelY;if(0===c)return!0;r.invert&&(c=-c);let v=t.getTranslate()+c*r.sensitivity;if(v>=t.minTranslate()&&(v=t.minTranslate()),v<=t.maxTranslate()&&(v=t.maxTranslate()),a=!!t.params.loop||!(v===t.minTranslate()||v===t.maxTranslate()),a&&t.params.nested&&s.stopPropagation(),t.params.freeMode&&t.params.freeMode.enabled){const e={time:u(),delta:Math.abs(c),direction:Math.sign(c)},a=o&&e.time=t.minTranslate()&&(n=t.minTranslate()),n<=t.maxTranslate()&&(n=t.maxTranslate()),t.setTransition(0),t.setTranslate(n),t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses(),(!d&&t.isBeginning||!u&&t.isEnd)&&t.updateSlidesClasses(),t.params.freeMode.sticky){clearTimeout(l),l=void 0,h.length>=15&&h.shift();const s=h.length?h[h.length-1]:void 0,a=h[0];if(h.push(e),s&&(e.delta>s.delta||e.direction!==s.direction))h.splice(0);else if(h.length>=15&&e.time-a.time<500&&a.delta-e.delta>=1&&e.delta<=6){const s=c>0?.8:.2;o=e,h.splice(0),l=p((()=>{t.slideToClosest(t.params.speed,!0,void 0,s)}),0)}l||(l=p((()=>{o=e,h.splice(0),t.slideToClosest(t.params.speed,!0,void 0,.5)}),500))}if(a||i("scroll",s),t.params.autoplay&&t.params.autoplayDisableOnInteraction&&t.autoplay.stop(),n===t.minTranslate()||n===t.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(c),direction:Math.sign(c),raw:e};h.length>=2&&h.shift();const a=h.length?h[h.length-1]:void 0;if(h.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&g(s):g(s),function(e){const s=t.params.mousewheel;if(e.direction<0){if(t.isEnd&&!t.params.loop&&s.releaseOnEdges)return!0}else if(t.isBeginning&&!t.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function w(e){let s=t.$el;"container"!==t.params.mousewheel.eventsTarget&&(s=d(t.params.mousewheel.eventsTarget)),s[e]("mouseenter",m),s[e]("mouseleave",f),s[e]("wheel",v)}function b(){return t.params.cssMode?(t.wrapperEl.removeEventListener("wheel",v),!0):!t.mousewheel.enabled&&(w("on"),t.mousewheel.enabled=!0,!0)}function x(){return t.params.cssMode?(t.wrapperEl.addEventListener(event,v),!0):!!t.mousewheel.enabled&&(w("off"),t.mousewheel.enabled=!1,!0)}a("init",(()=>{!t.params.mousewheel.enabled&&t.params.cssMode&&x(),t.params.mousewheel.enabled&&b()})),a("destroy",(()=>{t.params.cssMode&&b(),t.mousewheel.enabled&&x()})),Object.assign(t.mousewheel,{enable:b,disable:x})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;function r(e){let s;return e&&(s=d(e),t.params.uniqueNavElements&&"string"==typeof e&&s.length>1&&1===t.$el.find(e).length&&(s=t.$el.find(e))),s}function n(e,s){const a=t.params.navigation;e&&e.length>0&&(e[s?"addClass":"removeClass"](a.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=s),t.params.watchOverflow&&t.enabled&&e[t.isLocked?"addClass":"removeClass"](a.lockClass))}function l(){if(t.params.loop)return;const{$nextEl:e,$prevEl:s}=t.navigation;n(s,t.isBeginning&&!t.params.rewind),n(e,t.isEnd&&!t.params.rewind)}function o(e){e.preventDefault(),(!t.isBeginning||t.params.loop||t.params.rewind)&&(t.slidePrev(),i("navigationPrev"))}function c(e){e.preventDefault(),(!t.isEnd||t.params.loop||t.params.rewind)&&(t.slideNext(),i("navigationNext"))}function p(){const e=t.params.navigation;if(t.params.navigation=F(t,t.originalParams.navigation,t.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;const s=r(e.nextEl),a=r(e.prevEl);s&&s.length>0&&s.on("click",c),a&&a.length>0&&a.on("click",o),Object.assign(t.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),t.enabled||(s&&s.addClass(e.lockClass),a&&a.addClass(e.lockClass))}function u(){const{$nextEl:e,$prevEl:s}=t.navigation;e&&e.length&&(e.off("click",c),e.removeClass(t.params.navigation.disabledClass)),s&&s.length&&(s.off("click",o),s.removeClass(t.params.navigation.disabledClass))}s({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),t.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},a("init",(()=>{!1===t.params.navigation.enabled?h():(p(),l())})),a("toEdge fromEdge lock unlock",(()=>{l()})),a("destroy",(()=>{u()})),a("enable disable",(()=>{const{$nextEl:e,$prevEl:s}=t.navigation;e&&e[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass),s&&s[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass)})),a("click",((e,s)=>{const{$nextEl:a,$prevEl:r}=t.navigation,n=s.target;if(t.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(a)){if(t.pagination&&t.params.pagination&&t.params.pagination.clickable&&(t.pagination.el===n||t.pagination.el.contains(n)))return;let e;a?e=a.hasClass(t.params.navigation.hiddenClass):r&&(e=r.hasClass(t.params.navigation.hiddenClass)),i(!0===e?"navigationShow":"navigationHide"),a&&a.toggleClass(t.params.navigation.hiddenClass),r&&r.toggleClass(t.params.navigation.hiddenClass)}}));const h=()=>{t.$el.addClass(t.params.navigation.navigationDisabledClass),u()};Object.assign(t.navigation,{enable:()=>{t.$el.removeClass(t.params.navigation.navigationDisabledClass),p(),l()},disable:h,update:l,init:p,destroy:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const r="swiper-pagination";let n;s({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`,paginationDisabledClass:`${r}-disabled`}}),t.pagination={el:null,$el:null,bullets:[]};let l=0;function o(){return!t.params.pagination.el||!t.pagination.el||!t.pagination.$el||0===t.pagination.$el.length}function c(e,s){const{bulletActiveClass:a}=t.params.pagination;e[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function p(){const e=t.rtl,s=t.params.pagination;if(o())return;const a=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,r=t.pagination.$el;let p;const u=t.params.loop?Math.ceil((a-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;if(t.params.loop?(p=Math.ceil((t.activeIndex-t.loopedSlides)/t.params.slidesPerGroup),p>a-1-2*t.loopedSlides&&(p-=a-2*t.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==t.params.paginationType&&(p=u+p)):p=void 0!==t.snapIndex?t.snapIndex:t.activeIndex||0,"bullets"===s.type&&t.pagination.bullets&&t.pagination.bullets.length>0){const a=t.pagination.bullets;let i,o,u;if(s.dynamicBullets&&(n=a.eq(0)[t.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(t.isHorizontal()?"width":"height",n*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==t.previousIndex&&(l+=p-(t.previousIndex-t.loopedSlides||0),l>s.dynamicMainBullets-1?l=s.dynamicMainBullets-1:l<0&&(l=0)),i=Math.max(p-l,0),o=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(o+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),r.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=o&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&c(t,"prev"),a===o&&c(t,"next"))}));else{const e=a.eq(p),r=e.index();if(e.addClass(s.bulletActiveClass),s.dynamicBullets){const e=a.eq(i),n=a.eq(o);for(let e=i;e<=o;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(t.params.loop)if(r>=a.length){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else c(e,"prev"),c(n,"next");else c(e,"prev"),c(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),r=(n*i-n)/2-u*n,l=e?"right":"left";a.css(t.isHorizontal()?l:"top",`${r}px`)}}if("fraction"===s.type&&(r.find(U(s.currentClass)).text(s.formatFractionCurrent(p+1)),r.find(U(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let e;e=s.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,n=1;"horizontal"===e?i=a:n=a,r.find(U(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${n})`).transition(t.params.speed)}"custom"===s.type&&s.renderCustom?(r.html(s.renderCustom(t,p+1,u)),i("paginationRender",r[0])):i("paginationUpdate",r[0]),t.params.watchOverflow&&t.enabled&&r[t.isLocked?"addClass":"removeClass"](s.lockClass)}function u(){const e=t.params.pagination;if(o())return;const s=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,a=t.pagination.$el;let r="";if("bullets"===e.type){let i=t.params.loop?Math.ceil((s-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;t.params.freeMode&&t.params.freeMode.enabled&&!t.params.loop&&i>s&&(i=s);for(let s=0;s`;a.html(r),t.pagination.bullets=a.find(U(e.bulletClass))}"fraction"===e.type&&(r=e.renderFraction?e.renderFraction.call(t,e.currentClass,e.totalClass):` / `,a.html(r)),"progressbar"===e.type&&(r=e.renderProgressbar?e.renderProgressbar.call(t,e.progressbarFillClass):``,a.html(r)),"custom"!==e.type&&i("paginationRender",t.pagination.$el[0])}function h(){t.params.pagination=F(t,t.originalParams.pagination,t.params.pagination,{el:"swiper-pagination"});const e=t.params.pagination;if(!e.el)return;let s=d(e.el);0!==s.length&&(t.params.uniqueNavElements&&"string"==typeof e.el&&s.length>1&&(s=t.$el.find(e.el),s.length>1&&(s=s.filter((e=>d(e).parents(".swiper")[0]===t.el)))),"bullets"===e.type&&e.clickable&&s.addClass(e.clickableClass),s.addClass(e.modifierClass+e.type),s.addClass(t.isHorizontal()?e.horizontalClass:e.verticalClass),"bullets"===e.type&&e.dynamicBullets&&(s.addClass(`${e.modifierClass}${e.type}-dynamic`),l=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&s.addClass(e.progressbarOppositeClass),e.clickable&&s.on("click",U(e.bulletClass),(function(e){e.preventDefault();let s=d(this).index()*t.params.slidesPerGroup;t.params.loop&&(s+=t.loopedSlides),t.slideTo(s)})),Object.assign(t.pagination,{$el:s,el:s[0]}),t.enabled||s.addClass(e.lockClass))}function m(){const e=t.params.pagination;if(o())return;const s=t.pagination.$el;s.removeClass(e.hiddenClass),s.removeClass(e.modifierClass+e.type),s.removeClass(t.isHorizontal()?e.horizontalClass:e.verticalClass),t.pagination.bullets&&t.pagination.bullets.removeClass&&t.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&s.off("click",U(e.bulletClass))}a("init",(()=>{!1===t.params.pagination.enabled?f():(h(),u(),p())})),a("activeIndexChange",(()=>{(t.params.loop||void 0===t.snapIndex)&&p()})),a("snapIndexChange",(()=>{t.params.loop||p()})),a("slidesLengthChange",(()=>{t.params.loop&&(u(),p())})),a("snapGridLengthChange",(()=>{t.params.loop||(u(),p())})),a("destroy",(()=>{m()})),a("enable disable",(()=>{const{$el:e}=t.pagination;e&&e[t.enabled?"removeClass":"addClass"](t.params.pagination.lockClass)})),a("lock unlock",(()=>{p()})),a("click",((e,s)=>{const a=s.target,{$el:r}=t.pagination;if(t.params.pagination.el&&t.params.pagination.hideOnClick&&r&&r.length>0&&!d(a).hasClass(t.params.pagination.bulletClass)){if(t.navigation&&(t.navigation.nextEl&&a===t.navigation.nextEl||t.navigation.prevEl&&a===t.navigation.prevEl))return;const e=r.hasClass(t.params.pagination.hiddenClass);i(!0===e?"paginationShow":"paginationHide"),r.toggleClass(t.params.pagination.hiddenClass)}}));const f=()=>{t.$el.addClass(t.params.pagination.paginationDisabledClass),t.pagination.$el&&t.pagination.$el.addClass(t.params.pagination.paginationDisabledClass),m()};Object.assign(t.pagination,{enable:()=>{t.$el.removeClass(t.params.pagination.paginationDisabledClass),t.pagination.$el&&t.pagination.$el.removeClass(t.params.pagination.paginationDisabledClass),h(),u(),p()},disable:f,render:u,update:p,init:h,destroy:m})},function(e){let{swiper:t,extendParams:s,on:i,emit:r}=e;const n=a();let l,o,c,u,h=!1,m=null,f=null;function g(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e,rtlTranslate:s,progress:a}=t,{$dragEl:i,$el:r}=e,n=t.params.scrollbar;let l=o,d=(c-o)*a;s?(d=-d,d>0?(l=o-d,d=0):-d+o>c&&(l=c+d)):d<0?(l=o+d,d=0):d+o>c&&(l=c-d),t.isHorizontal()?(i.transform(`translate3d(${d}px, 0, 0)`),i[0].style.width=`${l}px`):(i.transform(`translate3d(0px, ${d}px, 0)`),i[0].style.height=`${l}px`),n.hide&&(clearTimeout(m),r[0].style.opacity=1,m=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function v(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e}=t,{$dragEl:s,$el:a}=e;s[0].style.width="",s[0].style.height="",c=t.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,u=t.size/(t.virtualSize+t.params.slidesOffsetBefore-(t.params.centeredSlides?t.snapGrid[0]:0)),o="auto"===t.params.scrollbar.dragSize?c*u:parseInt(t.params.scrollbar.dragSize,10),t.isHorizontal()?s[0].style.width=`${o}px`:s[0].style.height=`${o}px`,a[0].style.display=u>=1?"none":"",t.params.scrollbar.hide&&(a[0].style.opacity=0),t.params.watchOverflow&&t.enabled&&e.$el[t.isLocked?"addClass":"removeClass"](t.params.scrollbar.lockClass)}function w(e){return t.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY}function b(e){const{scrollbar:s,rtlTranslate:a}=t,{$el:i}=s;let r;r=(w(e)-i.offset()[t.isHorizontal()?"left":"top"]-(null!==l?l:o/2))/(c-o),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const n=t.minTranslate()+(t.maxTranslate()-t.minTranslate())*r;t.updateProgress(n),t.setTranslate(n),t.updateActiveIndex(),t.updateSlidesClasses()}function x(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n,$dragEl:o}=a;h=!0,l=e.target===o[0]||e.target===o?w(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),i.transition(100),o.transition(100),b(e),clearTimeout(f),n.transition(0),s.hide&&n.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),r("scrollbarDragStart",e)}function y(e){const{scrollbar:s,$wrapperEl:a}=t,{$el:i,$dragEl:n}=s;h&&(e.preventDefault?e.preventDefault():e.returnValue=!1,b(e),a.transition(0),i.transition(0),n.transition(0),r("scrollbarDragMove",e))}function E(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n}=a;h&&(h=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),i.transition("")),s.hide&&(clearTimeout(f),f=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),r("scrollbarDragEnd",e),s.snapOnRelease&&t.slideToClosest())}function C(e){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:r,support:l}=t,o=s.$el;if(!o)return;const d=o[0],c=!(!l.passiveListener||!r.passiveListeners)&&{passive:!1,capture:!1},p=!(!l.passiveListener||!r.passiveListeners)&&{passive:!0,capture:!1};if(!d)return;const u="on"===e?"addEventListener":"removeEventListener";l.touch?(d[u](a.start,x,c),d[u](a.move,y,c),d[u](a.end,E,p)):(d[u](i.start,x,c),n[u](i.move,y,c),n[u](i.end,E,p))}function T(){const{scrollbar:e,$el:s}=t;t.params.scrollbar=F(t,t.originalParams.scrollbar,t.params.scrollbar,{el:"swiper-scrollbar"});const a=t.params.scrollbar;if(!a.el)return;let i=d(a.el);t.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el)),i.addClass(t.isHorizontal()?a.horizontalClass:a.verticalClass);let r=i.find(`.${t.params.scrollbar.dragClass}`);0===r.length&&(r=d(`
    `),i.append(r)),Object.assign(e,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&t.params.scrollbar.el&&t.scrollbar.el&&C("on"),i&&i[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)}function $(){const e=t.params.scrollbar,s=t.scrollbar.$el;s&&s.removeClass(t.isHorizontal()?e.horizontalClass:e.verticalClass),t.params.scrollbar.el&&t.scrollbar.el&&C("off")}s({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag",scrollbarDisabledClass:"swiper-scrollbar-disabled",horizontalClass:"swiper-scrollbar-horizontal",verticalClass:"swiper-scrollbar-vertical"}}),t.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},i("init",(()=>{!1===t.params.scrollbar.enabled?S():(T(),v(),g())})),i("update resize observerUpdate lock unlock",(()=>{v()})),i("setTranslate",(()=>{g()})),i("setTransition",((e,s)=>{!function(e){t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)}(s)})),i("enable disable",(()=>{const{$el:e}=t.scrollbar;e&&e[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)})),i("destroy",(()=>{$()}));const S=()=>{t.$el.addClass(t.params.scrollbar.scrollbarDisabledClass),t.scrollbar.$el&&t.scrollbar.$el.addClass(t.params.scrollbar.scrollbarDisabledClass),$()};Object.assign(t.scrollbar,{enable:()=>{t.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass),t.scrollbar.$el&&t.scrollbar.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass),T(),v(),g()},disable:S,updateSize:v,setTranslate:g,init:T,destroy:$})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({parallax:{enabled:!1}});const i=(e,s)=>{const{rtl:a}=t,i=d(e),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):t.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},r=()=>{const{$el:e,slides:s,progress:a,snapGrid:r}=t;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,a)})),s.each(((e,s)=>{let n=e.progress;t.params.slidesPerGroup>1&&"auto"!==t.params.slidesPerView&&(n+=Math.ceil(s/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,n)}))}))};a("beforeInit",(()=>{t.params.parallax.enabled&&(t.params.watchSlidesProgress=!0,t.originalParams.watchSlidesProgress=!0)})),a("init",(()=>{t.params.parallax.enabled&&r()})),a("setTranslate",(()=>{t.params.parallax.enabled&&r()})),a("setTransition",((e,s)=>{t.params.parallax.enabled&&function(e){void 0===e&&(e=t.params.speed);const{$el:s}=t;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t=>{const s=d(t);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||e;0===e&&(a=0),s.transition(a)}))}(s)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();s({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),t.zoom={enabled:!1};let l,o,c,p=1,u=!1;const m={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},f={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},g={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let v=1;function w(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function b(e){const s=t.support,a=t.params.zoom;if(o=!1,c=!1,!s.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;o=!0,m.scaleStart=w(e)}m.$slideEl&&m.$slideEl.length||(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`),0===m.$slideEl.length&&(m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`),m.maxRatio=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==m.$imageWrapEl.length)?(m.$imageEl&&m.$imageEl.transition(0),u=!0):m.$imageEl=void 0}function x(e){const s=t.support,a=t.params.zoom,i=t.zoom;if(!s.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;c=!0,m.scaleMove=w(e)}m.$imageEl&&0!==m.$imageEl.length?(s.gestures?i.scale=e.scale*p:i.scale=m.scaleMove/m.scaleStart*p,i.scale>m.maxRatio&&(i.scale=m.maxRatio-1+(i.scale-m.maxRatio+1)**.5),i.scalef.touchesStart.x))return void(f.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(f.minY)===Math.floor(f.startY)&&f.touchesCurrent.yf.touchesStart.y))return void(f.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),f.isMoved=!0,f.currentX=f.touchesCurrent.x-f.touchesStart.x+f.startX,f.currentY=f.touchesCurrent.y-f.touchesStart.y+f.startY,f.currentXf.maxX&&(f.currentX=f.maxX-1+(f.currentX-f.maxX+1)**.8),f.currentYf.maxY&&(f.currentY=f.maxY-1+(f.currentY-f.maxY+1)**.8),g.prevPositionX||(g.prevPositionX=f.touchesCurrent.x),g.prevPositionY||(g.prevPositionY=f.touchesCurrent.y),g.prevTime||(g.prevTime=Date.now()),g.x=(f.touchesCurrent.x-g.prevPositionX)/(Date.now()-g.prevTime)/2,g.y=(f.touchesCurrent.y-g.prevPositionY)/(Date.now()-g.prevTime)/2,Math.abs(f.touchesCurrent.x-g.prevPositionX)<2&&(g.x=0),Math.abs(f.touchesCurrent.y-g.prevPositionY)<2&&(g.y=0),g.prevPositionX=f.touchesCurrent.x,g.prevPositionY=f.touchesCurrent.y,g.prevTime=Date.now(),m.$imageWrapEl.transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}}function C(){const e=t.zoom;m.$slideEl&&t.previousIndex!==t.activeIndex&&(m.$imageEl&&m.$imageEl.transform("translate3d(0,0,0) scale(1)"),m.$imageWrapEl&&m.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,p=1,m.$slideEl=void 0,m.$imageEl=void 0,m.$imageWrapEl=void 0)}function T(e){const s=t.zoom,a=t.params.zoom;if(m.$slideEl||(e&&e.target&&(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`)),m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`)),!m.$imageEl||0===m.$imageEl.length||!m.$imageWrapEl||0===m.$imageWrapEl.length)return;let i,r,l,o,c,u,h,g,v,w,b,x,y,E,C,T,$,S;t.params.cssMode&&(t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.touchAction="none"),m.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===f.touchesStart.x&&e?(i="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,r="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(i=f.touchesStart.x,r=f.touchesStart.y),s.scale=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,p=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,e?($=m.$slideEl[0].offsetWidth,S=m.$slideEl[0].offsetHeight,l=m.$slideEl.offset().left+n.scrollX,o=m.$slideEl.offset().top+n.scrollY,c=l+$/2-i,u=o+S/2-r,v=m.$imageEl[0].offsetWidth,w=m.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),C=-y,T=-E,h=c*s.scale,g=u*s.scale,hC&&(h=C),gT&&(g=T)):(h=0,g=0),m.$imageWrapEl.transition(300).transform(`translate3d(${h}px, ${g}px,0)`),m.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function $(){const e=t.zoom,s=t.params.zoom;m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex),m.$imageEl=m.$slideEl.find(`.${s.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${s.containerClass}`)),m.$imageEl&&0!==m.$imageEl.length&&m.$imageWrapEl&&0!==m.$imageWrapEl.length&&(t.params.cssMode&&(t.wrapperEl.style.overflow="",t.wrapperEl.style.touchAction=""),e.scale=1,p=1,m.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),m.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),m.$slideEl.removeClass(`${s.zoomedSlideClass}`),m.$slideEl=void 0)}function S(e){const s=t.zoom;s.scale&&1!==s.scale?$():T(e)}function M(){const e=t.support;return{passiveListener:!("touchstart"!==t.touchEvents.start||!e.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!e.passiveListener||{passive:!1,capture:!0}}}function P(){return`.${t.params.slideClass}`}function k(e){const{passiveListener:s}=M(),a=P();t.$wrapperEl[e]("gesturestart",a,b,s),t.$wrapperEl[e]("gesturechange",a,x,s),t.$wrapperEl[e]("gestureend",a,y,s)}function z(){l||(l=!0,k("on"))}function L(){l&&(l=!1,k("off"))}function O(){const e=t.zoom;if(e.enabled)return;e.enabled=!0;const s=t.support,{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.on(t.touchEvents.start,z,a),t.$wrapperEl.on(t.touchEvents.end,L,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.on(t.touchEvents.start,r,b,a),t.$wrapperEl.on(t.touchEvents.move,r,x,i),t.$wrapperEl.on(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.on(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.on(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}function I(){const e=t.zoom;if(!e.enabled)return;const s=t.support;e.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.off(t.touchEvents.start,z,a),t.$wrapperEl.off(t.touchEvents.end,L,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.off(t.touchEvents.start,r,b,a),t.$wrapperEl.off(t.touchEvents.move,r,x,i),t.$wrapperEl.off(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.off(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.off(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}Object.defineProperty(t.zoom,"scale",{get:()=>v,set(e){if(v!==e){const t=m.$imageEl?m.$imageEl[0]:void 0,s=m.$slideEl?m.$slideEl[0]:void 0;i("zoomChange",e,t,s)}v=e}}),a("init",(()=>{t.params.zoom.enabled&&O()})),a("destroy",(()=>{I()})),a("touchStart",((e,s)=>{t.zoom.enabled&&function(e){const s=t.device;m.$imageEl&&0!==m.$imageEl.length&&(f.isTouched||(s.android&&e.cancelable&&e.preventDefault(),f.isTouched=!0,f.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,f.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))}(s)})),a("touchEnd",((e,s)=>{t.zoom.enabled&&function(){const e=t.zoom;if(!m.$imageEl||0===m.$imageEl.length)return;if(!f.isTouched||!f.isMoved)return f.isTouched=!1,void(f.isMoved=!1);f.isTouched=!1,f.isMoved=!1;let s=300,a=300;const i=g.x*s,r=f.currentX+i,n=g.y*a,l=f.currentY+n;0!==g.x&&(s=Math.abs((r-f.currentX)/g.x)),0!==g.y&&(a=Math.abs((l-f.currentY)/g.y));const o=Math.max(s,a);f.currentX=r,f.currentY=l;const d=f.width*e.scale,c=f.height*e.scale;f.minX=Math.min(m.slideWidth/2-d/2,0),f.maxX=-f.minX,f.minY=Math.min(m.slideHeight/2-c/2,0),f.maxY=-f.minY,f.currentX=Math.max(Math.min(f.currentX,f.maxX),f.minX),f.currentY=Math.max(Math.min(f.currentY,f.maxY),f.minY),m.$imageWrapEl.transition(o).transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}()})),a("doubleTap",((e,s)=>{!t.animating&&t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&S(s)})),a("transitionEnd",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&C()})),a("slideChange",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&t.params.cssMode&&C()})),Object.assign(t.zoom,{enable:O,disable:I,in:T,out:$,toggle:S})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;s({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),t.lazy={};let n=!1,l=!1;function o(e,s){void 0===s&&(s=!0);const a=t.params.lazy;if(void 0===e)return;if(0===t.slides.length)return;const r=t.virtual&&t.params.virtual.enabled?t.$wrapperEl.children(`.${t.params.slideClass}[data-swiper-slide-index="${e}"]`):t.slides.eq(e),n=r.find(`.${a.elementClass}:not(.${a.loadedClass}):not(.${a.loadingClass})`);!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||n.push(r[0]),0!==n.length&&n.each((e=>{const n=d(e);n.addClass(a.loadingClass);const l=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");t.loadImage(n[0],c||l,p,u,!1,(()=>{if(null!=t&&t&&(!t||t.params)&&!t.destroyed){if(l?(n.css("background-image",`url("${l}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(a.loadedClass).removeClass(a.loadingClass),r.find(`.${a.preloaderClass}`).remove(),t.params.loop&&s){const e=r.attr("data-swiper-slide-index");if(r.hasClass(t.params.slideDuplicateClass)){o(t.$wrapperEl.children(`[data-swiper-slide-index="${e}"]:not(.${t.params.slideDuplicateClass})`).index(),!1)}else{o(t.$wrapperEl.children(`.${t.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]`).index(),!1)}}i("lazyImageReady",r[0],n[0]),t.params.autoHeight&&t.updateAutoHeight()}})),i("lazyImageLoad",r[0],n[0])}))}function c(){const{$wrapperEl:e,params:s,slides:a,activeIndex:i}=t,r=t.virtual&&s.virtual.enabled,n=s.lazy;let c=s.slidesPerView;function p(t){if(r){if(e.children(`.${s.slideClass}[data-swiper-slide-index="${t}"]`).length)return!0}else if(a[t])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),l||(l=!0),t.params.watchSlidesProgress)e.children(`.${s.slideVisibleClass}`).each((e=>{o(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){const e=n.loadPrevNextAmount,t=Math.ceil(c),s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),0);for(let e=i+t;e0&&o(u(t));const a=e.children(`.${s.slidePrevClass}`);a.length>0&&o(u(a))}}function p(){const e=r();if(!t||t.destroyed)return;const s=t.params.lazy.scrollingElement?d(t.params.lazy.scrollingElement):d(e),a=s[0]===e,i=a?e.innerWidth:s[0].offsetWidth,l=a?e.innerHeight:s[0].offsetHeight,o=t.$el.offset(),{rtlTranslate:u}=t;let h=!1;u&&(o.left-=t.$el[0].scrollLeft);const m=[[o.left,o.top],[o.left+t.width,o.top],[o.left,o.top+t.height],[o.left+t.width,o.top+t.height]];for(let e=0;e=0&&t[0]<=i&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==t.touchEvents.start||!t.support.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1};h?(c(),s.off("scroll",p,f)):n||(n=!0,s.on("scroll",p,f))}a("beforeInit",(()=>{t.params.lazy.enabled&&t.params.preloadImages&&(t.params.preloadImages=!1)})),a("init",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("scroll",(()=>{t.params.freeMode&&t.params.freeMode.enabled&&!t.params.freeMode.sticky&&c()})),a("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("transitionStart",(()=>{t.params.lazy.enabled&&(t.params.lazy.loadOnTransitionStart||!t.params.lazy.loadOnTransitionStart&&!l)&&(t.params.lazy.checkInView?p():c())})),a("transitionEnd",(()=>{t.params.lazy.enabled&&!t.params.lazy.loadOnTransitionStart&&(t.params.lazy.checkInView?p():c())})),a("slideChange",(()=>{const{lazy:e,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=t.params;e.enabled&&(s||a&&(i||0===r))&&c()})),a("destroy",(()=>{t.$el&&t.$el.find(`.${t.params.lazy.loadingClass}`).removeClass(t.params.lazy.loadingClass)})),Object.assign(t.lazy,{load:c,loadInSlide:o})},function(e){let{swiper:t,extendParams:s,on:a}=e;function i(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function r(){t.controller.control&&t.controller.spline&&(t.controller.spline=void 0,delete t.controller.spline)}s({controller:{control:void 0,inverse:!1,by:"slide"}}),t.controller={control:void 0},a("beforeInit",(()=>{t.controller.control=t.params.controller.control})),a("update",(()=>{r()})),a("resize",(()=>{r()})),a("observerUpdate",(()=>{r()})),a("setTranslate",((e,s,a)=>{t.controller.control&&t.controller.setTranslate(s,a)})),a("setTransition",((e,s,a)=>{t.controller.control&&t.controller.setTransition(s,a)})),Object.assign(t.controller,{setTranslate:function(e,s){const a=t.controller.control;let r,n;const l=t.constructor;function o(e){const s=t.rtlTranslate?-t.translate:t.translate;"slide"===t.params.controller.by&&(!function(e){t.controller.spline||(t.controller.spline=t.params.loop?new i(t.slidesGrid,e.slidesGrid):new i(t.snapGrid,e.snapGrid))}(e),n=-t.controller.spline.interpolate(-s)),n&&"container"!==t.params.controller.by||(r=(e.maxTranslate()-e.minTranslate())/(t.maxTranslate()-t.minTranslate()),n=(s-t.minTranslate())*r+e.minTranslate()),t.params.controller.inverse&&(n=e.maxTranslate()-n),e.updateProgress(n),e.setTranslate(n,t),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(a))for(let e=0;e{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===t.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r{n(e),"BUTTON"!==e[0].tagName&&(o(e,"button"),e.on("keydown",m)),p(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)},w=()=>{t.a11y.clicked=!0},b=()=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{t.a11y.clicked=!1}))}))},x=e=>{if(t.a11y.clicked)return;const s=e.target.closest(`.${t.params.slideClass}`);if(!s||!t.slides.includes(s))return;const a=t.slides.indexOf(s)===t.activeIndex,i=t.params.watchSlidesProgress&&t.visibleSlides&&t.visibleSlides.includes(s);a||i||(t.isHorizontal()?t.el.scrollLeft=0:t.el.scrollTop=0,t.slideTo(t.slides.indexOf(s),0))},y=()=>{const e=t.params.a11y;e.itemRoleDescriptionMessage&&c(d(t.slides),e.itemRoleDescriptionMessage),e.slideRole&&o(d(t.slides),e.slideRole);const s=t.params.loop?t.slides.filter((e=>!e.classList.contains(t.params.slideDuplicateClass))).length:t.slides.length;e.slideLabelMessage&&t.slides.each(((a,i)=>{const r=d(a),n=t.params.loop?parseInt(r.attr("data-swiper-slide-index"),10):i;p(r,e.slideLabelMessage.replace(/\{\{index\}\}/,n+1).replace(/\{\{slidesLength\}\}/,s))}))},E=()=>{const e=t.params.a11y;t.$el.append(i);const s=t.$el;e.containerRoleDescriptionMessage&&c(s,e.containerRoleDescriptionMessage),e.containerMessage&&p(s,e.containerMessage);const a=t.$wrapperEl,r=e.id||a.attr("id")||`swiper-wrapper-${n=16,void 0===n&&(n=16),"x".repeat(n).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}`;var n;const l=t.params.autoplay&&t.params.autoplay.enabled?"off":"polite";var o;let d,u;o=r,a.attr("id",o),function(e,t){e.attr("aria-live",t)}(a,l),y(),t.navigation&&t.navigation.$nextEl&&(d=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(u=t.navigation.$prevEl),d&&d.length&&v(d,r,e.nextSlideMessage),u&&u.length&&v(u,r,e.prevSlideMessage),g()&&t.pagination.$el.on("keydown",U(t.params.pagination.bulletClass),m),t.$el.on("focus",x,!0),t.$el.on("pointerdown",w,!0),t.$el.on("pointerup",b,!0)};a("beforeInit",(()=>{i=d(``)})),a("afterInit",(()=>{t.params.a11y.enabled&&E()})),a("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{t.params.a11y.enabled&&y()})),a("fromEdge toEdge afterInit lock unlock",(()=>{t.params.a11y.enabled&&function(){if(t.params.loop||t.params.rewind||!t.navigation)return;const{$nextEl:e,$prevEl:s}=t.navigation;s&&s.length>0&&(t.isBeginning?(u(s),l(s)):(h(s),n(s))),e&&e.length>0&&(t.isEnd?(u(e),l(e)):(h(e),n(e)))}()})),a("paginationUpdate",(()=>{t.params.a11y.enabled&&function(){const e=t.params.a11y;f()&&t.pagination.bullets.each((s=>{const a=d(s);t.params.pagination.clickable&&(n(a),t.params.pagination.renderBullet||(o(a,"button"),p(a,e.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))),a.is(`.${t.params.pagination.bulletActiveClass}`)?a.attr("aria-current","true"):a.removeAttr("aria-current")}))}()})),a("destroy",(()=>{t.params.a11y.enabled&&function(){let e,s;i&&i.length>0&&i.remove(),t.navigation&&t.navigation.$nextEl&&(e=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(s=t.navigation.$prevEl),e&&e.off("keydown",m),s&&s.off("keydown",m),g()&&t.pagination.$el.off("keydown",U(t.params.pagination.bulletClass),m),t.$el.off("focus",x,!0),t.$el.off("pointerdown",w,!0),t.$el.off("pointerup",b,!0)}()}))},function(e){let{swiper:t,extendParams:s,on:a}=e;s({history:{enabled:!1,root:"",replaceState:!1,key:"slides",keepQuery:!1}});let i=!1,n={};const l=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),o=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},d=(e,s)=>{const a=r();if(!i||!t.params.history.enabled)return;let n;n=t.params.url?new URL(t.params.url):a.location;const o=t.slides.eq(s);let d=l(o.attr("data-history"));if(t.params.history.root.length>0){let s=t.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${e}/${d}`}else n.pathname.includes(e)||(d=`${e}/${d}`);t.params.history.keepQuery&&(d+=n.search);const c=a.history.state;c&&c.value===d||(t.params.history.replaceState?a.history.replaceState({value:d},null,d):a.history.pushState({value:d},null,d))},c=(e,s,a)=>{if(s)for(let i=0,r=t.slides.length;i{n=o(t.params.url),c(t.params.speed,n.value,!1)};a("init",(()=>{t.params.history.enabled&&(()=>{const e=r();if(t.params.history){if(!e.history||!e.history.pushState)return t.params.history.enabled=!1,void(t.params.hashNavigation.enabled=!0);i=!0,n=o(t.params.url),(n.key||n.value)&&(c(0,n.value,t.params.runCallbacksOnInit),t.params.history.replaceState||e.addEventListener("popstate",p))}})()})),a("destroy",(()=>{t.params.history.enabled&&(()=>{const e=r();t.params.history.replaceState||e.removeEventListener("popstate",p)})()})),a("transitionEnd _freeModeNoMomentumRelease",(()=>{i&&d(t.params.history.key,t.activeIndex)})),a("slideChange",(()=>{i&&t.params.cssMode&&d(t.params.history.key,t.activeIndex)}))},function(e){let{swiper:t,extendParams:s,emit:i,on:n}=e,l=!1;const o=a(),c=r();s({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const p=()=>{i("hashChange");const e=o.location.hash.replace("#","");if(e!==t.slides.eq(t.activeIndex).attr("data-hash")){const s=t.$wrapperEl.children(`.${t.params.slideClass}[data-hash="${e}"]`).index();if(void 0===s)return;t.slideTo(s)}},u=()=>{if(l&&t.params.hashNavigation.enabled)if(t.params.hashNavigation.replaceState&&c.history&&c.history.replaceState)c.history.replaceState(null,null,`#${t.slides.eq(t.activeIndex).attr("data-hash")}`||""),i("hashSet");else{const e=t.slides.eq(t.activeIndex),s=e.attr("data-hash")||e.attr("data-history");o.location.hash=s||"",i("hashSet")}};n("init",(()=>{t.params.hashNavigation.enabled&&(()=>{if(!t.params.hashNavigation.enabled||t.params.history&&t.params.history.enabled)return;l=!0;const e=o.location.hash.replace("#","");if(e){const s=0;for(let a=0,i=t.slides.length;a{t.params.hashNavigation.enabled&&t.params.hashNavigation.watchState&&d(c).off("hashchange",p)})),n("transitionEnd _freeModeNoMomentumRelease",(()=>{l&&u()})),n("slideChange",(()=>{l&&t.params.cssMode&&u()}))},function(e){let t,{swiper:s,extendParams:i,on:r,emit:n}=e;function l(){if(!s.size)return s.autoplay.running=!1,void(s.autoplay.paused=!1);const e=s.slides.eq(s.activeIndex);let a=s.params.autoplay.delay;e.attr("data-swiper-autoplay")&&(a=e.attr("data-swiper-autoplay")||s.params.autoplay.delay),clearTimeout(t),t=p((()=>{let e;s.params.autoplay.reverseDirection?s.params.loop?(s.loopFix(),e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.isBeginning?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(s.slides.length-1,s.params.speed,!0,!0),n("autoplay")):(e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.params.loop?(s.loopFix(),e=s.slideNext(s.params.speed,!0,!0),n("autoplay")):s.isEnd?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(0,s.params.speed,!0,!0),n("autoplay")):(e=s.slideNext(s.params.speed,!0,!0),n("autoplay")),(s.params.cssMode&&s.autoplay.running||!1===e)&&l()}),a)}function o(){return void 0===t&&(!s.autoplay.running&&(s.autoplay.running=!0,n("autoplayStart"),l(),!0))}function d(){return!!s.autoplay.running&&(void 0!==t&&(t&&(clearTimeout(t),t=void 0),s.autoplay.running=!1,n("autoplayStop"),!0))}function c(e){s.autoplay.running&&(s.autoplay.paused||(t&&clearTimeout(t),s.autoplay.paused=!0,0!==e&&s.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].addEventListener(e,h)})):(s.autoplay.paused=!1,l())))}function u(){const e=a();"hidden"===e.visibilityState&&s.autoplay.running&&c(),"visible"===e.visibilityState&&s.autoplay.paused&&(l(),s.autoplay.paused=!1)}function h(e){s&&!s.destroyed&&s.$wrapperEl&&e.target===s.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)})),s.autoplay.paused=!1,s.autoplay.running?l():d())}function m(){s.params.autoplay.disableOnInteraction?d():(n("autoplayPause"),c()),["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)}))}function f(){s.params.autoplay.disableOnInteraction||(s.autoplay.paused=!1,n("autoplayResume"),l())}s.autoplay={running:!1,paused:!1},i({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),r("init",(()=>{if(s.params.autoplay.enabled){o();a().addEventListener("visibilitychange",u),s.params.autoplay.pauseOnMouseEnter&&(s.$el.on("mouseenter",m),s.$el.on("mouseleave",f))}})),r("beforeTransitionStart",((e,t,a)=>{s.autoplay.running&&(a||!s.params.autoplay.disableOnInteraction?s.autoplay.pause(t):d())})),r("sliderFirstMove",(()=>{s.autoplay.running&&(s.params.autoplay.disableOnInteraction?d():c())})),r("touchEnd",(()=>{s.params.cssMode&&s.autoplay.paused&&!s.params.autoplay.disableOnInteraction&&l()})),r("destroy",(()=>{s.$el.off("mouseenter",m),s.$el.off("mouseleave",f),s.autoplay.running&&d();a().removeEventListener("visibilitychange",u)})),Object.assign(s.autoplay,{pause:c,run:l,start:o,stop:d})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let i=!1,r=!1;function n(){const e=t.thumbs.swiper;if(!e||e.destroyed)return;const s=e.clickedIndex,a=e.clickedSlide;if(a&&d(a).hasClass(t.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=e.params.loop?parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10):s,t.params.loop){let e=t.activeIndex;t.slides.eq(e).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,e=t.activeIndex);const s=t.slides.eq(e).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=t.slides.eq(e).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-e1&&!t.params.centeredSlides&&(i=t.params.slidesPerView),t.params.thumbs.multipleActiveThumbs||(i=1),i=Math.floor(i),s.slides.removeClass(r),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let e=0;e1?a:o:a-ot.previousIndex?"next":"prev"}else i=t.realIndex,r=i>t.previousIndex?"next":"prev";l&&(i+="next"===r?n:-1*n),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(i)<0&&(s.params.centeredSlides?i=i>o?i-Math.floor(a/2)+1:i+Math.floor(a/2)-1:i>o&&s.params.slidesPerGroup,s.slideTo(i,e?0:void 0))}}t.thumbs={swiper:null},a("beforeInit",(()=>{const{thumbs:e}=t.params;e&&e.swiper&&(l(),o(!0))})),a("slideChange update resize observerUpdate",(()=>{o()})),a("setTransition",((e,s)=>{const a=t.thumbs.swiper;a&&!a.destroyed&&a.setTransition(s)})),a("beforeDestroy",(()=>{const e=t.thumbs.swiper;e&&!e.destroyed&&r&&e.destroy()})),Object.assign(t.thumbs,{init:l,update:o})},function(e){let{swiper:t,extendParams:s,emit:a,once:i}=e;s({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(t,{freeMode:{onTouchStart:function(){const e=t.getTranslate();t.setTranslate(e),t.setTransition(0),t.touchEventsData.velocities.length=0,t.freeMode.onTouchEnd({currentPos:t.rtl?t.translate:-t.translate})},onTouchMove:function(){const{touchEventsData:e,touches:s}=t;0===e.velocities.length&&e.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:e.touchStartTime}),e.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function(e){let{currentPos:s}=e;const{params:r,$wrapperEl:n,rtlTranslate:l,snapGrid:o,touchEventsData:d}=t,c=u()-d.touchStartTime;if(s<-t.minTranslate())t.slideTo(t.activeIndex);else if(s>-t.maxTranslate())t.slides.length1){const e=d.velocities.pop(),s=d.velocities.pop(),a=e.position-s.position,i=e.time-s.time;t.velocity=a/i,t.velocity/=2,Math.abs(t.velocity)150||u()-e.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=r.freeMode.momentumVelocityRatio,d.velocities.length=0;let e=1e3*r.freeMode.momentumRatio;const s=t.velocity*e;let c=t.translate+s;l&&(c=-c);let p,h=!1;const m=20*Math.abs(t.velocity)*r.freeMode.momentumBounceRatio;let f;if(ct.minTranslate())r.freeMode.momentumBounce?(c-t.minTranslate()>m&&(c=t.minTranslate()+m),p=t.minTranslate(),h=!0,d.allowMomentumBounce=!0):c=t.minTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(r.freeMode.sticky){let e;for(let t=0;t-c){e=t;break}c=Math.abs(o[e]-c){t.loopFix()})),0!==t.velocity){if(e=l?Math.abs((-c-t.translate)/t.velocity):Math.abs((c-t.translate)/t.velocity),r.freeMode.sticky){const s=Math.abs((l?-c:c)-t.translate),a=t.slidesSizesGrid[t.activeIndex];e=s{t&&!t.destroyed&&d.allowMomentumBounce&&(a("momentumBounce"),t.setTransition(r.speed),setTimeout((()=>{t.setTranslate(p),n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(a("_freeModeNoMomentumRelease"),t.updateProgress(c),t.setTransition(e),t.setTranslate(c),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()})))):t.updateProgress(c),t.updateActiveIndex(),t.updateSlidesClasses()}else{if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode&&a("_freeModeNoMomentumRelease")}(!r.freeMode.momentum||c>=r.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}}}})},function(e){let t,s,a,{swiper:i,extendParams:r}=e;r({grid:{rows:1,fill:"column"}}),i.grid={initSlides:e=>{const{slidesPerView:r}=i.params,{rows:n,fill:l}=i.params.grid;s=t/n,a=Math.floor(e/n),t=Math.floor(e/n)===e/n?e:Math.ceil(e/n)*n,"auto"!==r&&"row"===l&&(t=Math.max(t,r*n))},updateSlide:(e,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=i.params,{rows:c,fill:p}=i.params.grid;let u,h,m;if("row"===p&&o>1){const s=Math.floor(e/(o*c)),a=e-c*o*s,i=0===s?o:Math.min(Math.ceil((n-s*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+s*o,u=h+m*t/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(e/c),m=e-h*c,(h>a||h===a&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(e/s),h=e-m*s);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(e,s,a)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=i.params,{rows:o}=i.params.grid;if(i.virtualSize=(e+r)*t,i.virtualSize=Math.ceil(i.virtualSize/o)-r,i.$wrapperEl.css({[a("width")]:`${i.virtualSize+r}px`}),n){s.splice(0,s.length);const e=[];for(let t=0;t{const{slides:e}=t,s=t.params.fadeEffect;for(let a=0;a{const{transformEl:s}=t.params.fadeEffect;(s?t.slides.find(s):t.slides).transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}});const i=(e,t,s)=>{let a=s?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),i=s?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===a.length&&(a=d(`
    `),e.append(a)),0===i.length&&(i=d(`
    `),e.append(i)),a.length&&(a[0].style.opacity=Math.max(-t,0)),i.length&&(i[0].style.opacity=Math.max(t,0))};te({effect:"cube",swiper:t,on:a,setTranslate:()=>{const{$el:e,$wrapperEl:s,slides:a,width:r,height:n,rtlTranslate:l,size:o,browser:c}=t,p=t.params.cubeEffect,u=t.isHorizontal(),h=t.virtual&&t.params.virtual.enabled;let m,f=0;p.shadow&&(u?(m=s.find(".swiper-cube-shadow"),0===m.length&&(m=d('
    '),s.append(m)),m.css({height:`${r}px`})):(m=e.find(".swiper-cube-shadow"),0===m.length&&(m=d('
    '),e.append(m))));for(let e=0;e-1&&(f=90*s+90*d,l&&(f=90*-s-90*d)),t.transform(v),p.slideShadows&&i(t,d,u)}if(s.css({"-webkit-transform-origin":`50% 50% -${o/2}px`,"transform-origin":`50% 50% -${o/2}px`}),p.shadow)if(u)m.transform(`translate3d(0px, ${r/2+p.shadowOffset}px, ${-r/2}px) rotateX(90deg) rotateZ(0deg) scale(${p.shadowScale})`);else{const e=Math.abs(f)-90*Math.floor(Math.abs(f)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=p.shadowScale,a=p.shadowScale/t,i=p.shadowOffset;m.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${n/2+i}px, ${-n/2/a}px) rotateX(-90deg)`)}const g=c.isSafari||c.isWebView?-o/2:0;s.transform(`translate3d(0px,0,${g}px) rotateX(${t.isHorizontal()?0:f}deg) rotateY(${t.isHorizontal()?-f:0}deg)`),s[0].style.setProperty("--swiper-cube-translate-z",`${g}px`)},setTransition:e=>{const{$el:s,slides:a}=t;a.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.cubeEffect.shadow&&!t.isHorizontal()&&s.find(".swiper-cube-shadow").transition(e)},recreateShadows:()=>{const e=t.isHorizontal();t.slides.each((t=>{const s=Math.max(Math.min(t.progress,1),-1);i(d(t),s,e)}))},getEffectParams:()=>t.params.cubeEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}});const i=(e,s,a)=>{let i=t.isHorizontal()?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),r=t.isHorizontal()?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===i.length&&(i=ie(a,e,t.isHorizontal()?"left":"top")),0===r.length&&(r=ie(a,e,t.isHorizontal()?"right":"bottom")),i.length&&(i[0].style.opacity=Math.max(-s,0)),r.length&&(r[0].style.opacity=Math.max(s,0))};te({effect:"flip",swiper:t,on:a,setTranslate:()=>{const{slides:e,rtlTranslate:s}=t,a=t.params.flipEffect;for(let r=0;r{const{transformEl:s}=t.params.flipEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),ae({swiper:t,duration:e,transformEl:s})},recreateShadows:()=>{const e=t.params.flipEffect;t.slides.each((s=>{const a=d(s);let r=a[0].progress;t.params.flipEffect.limitRotation&&(r=Math.max(Math.min(s.progress,1),-1)),i(a,r,e)}))},getEffectParams:()=>t.params.flipEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),te({effect:"coverflow",swiper:t,on:a,setTranslate:()=>{const{width:e,height:s,slides:a,slidesSizesGrid:i}=t,r=t.params.coverflowEffect,n=t.isHorizontal(),l=t.translate,o=n?e/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e0?p:0),s.length&&(s[0].style.opacity=-p>0?-p:0)}}},setTransition:e=>{const{transformEl:s}=t.params.coverflowEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const i=e=>"string"==typeof e?e:`${e}px`;te({effect:"creative",swiper:t,on:a,setTranslate:()=>{const{slides:e,$wrapperEl:s,slidesSizesGrid:a}=t,r=t.params.creativeEffect,{progressMultiplier:n}=r,l=t.params.centeredSlides;if(l){const e=a[0]/2-t.params.slidesOffsetBefore||0;s.transform(`translateX(calc(50% - ${e}px))`)}for(let s=0;s0&&(f=r.prev,m=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${i(f.translate[t])} * ${Math.abs(d*n)}))`})),h.forEach(((e,t)=>{h[t]=f.rotate[t]*Math.abs(d*n)})),a[0].style.zIndex=-Math.abs(Math.round(o))+e.length;const g=u.join(", "),v=`rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,x=`translate3d(${g}) ${v} ${w}`;if(m&&f.shadow||!m){let e=a.children(".swiper-slide-shadow");if(0===e.length&&f.shadow&&(e=ie(r,a)),e.length){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const y=se(r,a);y.transform(x).css({opacity:b}),f.origin&&y.css("transform-origin",f.origin)}},setTransition:e=>{const{transformEl:s}=t.params.creativeEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},perspective:()=>t.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cardsEffect:{slideShadows:!0,transformEl:null,rotate:!0,perSlideRotate:2,perSlideOffset:8}}),te({effect:"cards",swiper:t,on:a,setTranslate:()=>{const{slides:e,activeIndex:s}=t,a=t.params.cardsEffect,{startTranslate:i,isTouched:r}=t.touchEventsData,n=t.translate;for(let l=0;l0&&c<1&&(r||t.params.cssMode)&&n-1&&(r||t.params.cssMode)&&n>i;if(b||x){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!t.isHorizontal()){const e=h;h=u,u=e}const y=c<0?""+(1+(1-f)*c):""+(1-(1-f)*c),E=`\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${a.rotate?g:0}deg)\n scale(${y})\n `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=ie(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+e.length;se(a,o).transform(E)}},setTransition:e=>{const{transformEl:s}=t.params.cardsEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})}];return V.use(re),V})); +//# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/video/connect.mp4 b/video/connect.mp4 new file mode 100644 index 000000000..03f0ee756 Binary files /dev/null and b/video/connect.mp4 differ