diff --git a/CNAME b/CNAME index 52b6970872..6455e69481 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 9921738069..8be5750ae2 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 771d1663aa..496d4cf9f7 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 bc8787fcbf..a4a3e2ab1b 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 557367fefd..dde23fa0a7 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 4840560f4d..e15eaa0132 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 f375f2ad44..a9e1ac2abc 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 e7ec06035a..6787bc8a1b 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 58140880aa..0a03bff8e3 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 38d5f72139..10b8e8702e 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 fd4df16ac6..56246e6316 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 b618ffaeb8..7a9d2631a2 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 f467999a5f..92dd2abbf4 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 8f10753250..807e71f90b 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 90883cb83d..86598ea2c6 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 4dafaa38d5..dccf9dc99f 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 7d87083b6a..319b3529ca 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 c07e116a3a..be7047401b 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 0000000000..1fdecbc28c 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 0000000000..35cd201b0d Binary files /dev/null and b/blog/images/20220711-call.png differ diff --git a/blog/index.html b/blog/index.html index c6a9bf41dd..4ff12a3a5e 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 5bd3c075b2..e927415b2a 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 0ee91f21dd..0000000000 --- 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 3cceb226f8..d2153e3365 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 209fb3514f..69c53a8153 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 0000000000..916173ac0d --- /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 2b0b0a0283..c879f1fdf3 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 0000000000..1f252b0ba5 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 0000000000..687474f86e 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 0000000000..903d99d455 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 0000000000..f4d4fc3e0c 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 0000000000..3dd51a978b 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 0000000000..895b6d4f1b 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 0000000000..115ae73dfc 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 0000000000..24465fb7dc 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 0000000000..1f69fc1e62 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 0000000000..ef01c8d5d3 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 34bb016b22..0000000000 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 efb34f3770..0000000000 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 156e11e35e..0000000000 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 cda4b4eb74..0000000000 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 ce551e6ae8..0000000000 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 b6ee335ed1..0000000000 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 9dd6ade3f2..0000000000 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 dcf6742bff..0000000000 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 c64579f94e..0000000000 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 3ad736a7b3..0000000000 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 9d7e62ada2..0000000000 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 eba6d7467a..0000000000 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 2bd96c63c8..0000000000 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 375acf74ab..0000000000 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 98e9f8d2d1..0000000000 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 1eefe57915..0000000000 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 7287785f73..0000000000 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 9654acdb3b..0000000000 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 51085c2b20..0000000000 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 a6297a6786..0000000000 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 d23dbb2b1b..0000000000 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 a79b4d53cc..0000000000 --- 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 0e47feb880..0000000000 --- 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 1a382a482c..0000000000 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 19098b123d..0000000000 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 4eab6ca91a..0000000000 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 fc58aa26d9..0000000000 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 3e3afa88aa..0000000000 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 677af04441..0000000000 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 22aeb98b40..0000000000 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 15a2673fad..0000000000 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 370925f1a3..0000000000 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 ce60f54c93..0000000000 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 be0d44199a..0000000000 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 f53ff45d82..0000000000 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 c8c18d0fcf..0000000000 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 9a6c92ef89..0000000000 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 be48853908..0000000000 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 fcf1bb6acf..0000000000 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 45630e9c69..0000000000 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 db85715605..0000000000 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 b40bcfe8b7..0000000000 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 4c73248556..0000000000 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 5c11f4a1fd..0000000000 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 b6b135e24e..0000000000 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 1439dbadcb..0000000000 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 c72504f3ef..0000000000 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 a861ca6011..0000000000 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 f71b0d3939..0000000000 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 2db2227f17..0000000000 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 a155d7360f..0000000000 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 b257823ea0..0000000000 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 ac18b5f861..0000000000 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 ce2402fca6..0000000000 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 35d9868e89..0000000000 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 198ea1b678..0000000000 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 a959d98b8a..0000000000 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 33e36b7bc2..0000000000 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 e24fff1238..0000000000 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 4cff81ac51..0000000000 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 155f63b6d9..0000000000 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 de32cccb00..0000000000 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 5d5c60cec6..0000000000 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 3cf80f764e..0000000000 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 e32802235b..0000000000 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 5573cb959b..0000000000 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 e15705b884..0000000000 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 ed0bffdd07..0000000000 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 76ee83a035..0000000000 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 a1ce1e6d9f..0000000000 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 c6c093568f..0000000000 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 1df9409296..0000000000 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 d0a757bcc3..0000000000 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 47d341737c..0000000000 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 99265663dd..0000000000 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 72c4888a29..0000000000 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 3ee1d80794..0000000000 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 f7174ec1bb..0000000000 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 c4cf278068..0000000000 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 4b2ce3d8bc..0000000000 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 f6a04a8499..0000000000 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 ceae3841b5..0000000000 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 4eb47eda25..0000000000 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 abbdbd43dc..0000000000 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 651fe84088..0000000000 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 a79b4d53cc..0000000000 --- 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 7987410bd1..0000000000 --- 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 9ba9062976..0000000000 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 942a9534aa..0000000000 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 5a70b7f141..0000000000 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 0c60c44e54..0000000000 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 c016b0c6d8..0000000000 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 04807c8076..0000000000 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 86ceb304ca..0000000000 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 fc9447ae29..0000000000 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 faacaae8c2..0000000000 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 bfc802de24..0000000000 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 e1f11b8724..0000000000 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 59437bbaac..0000000000 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 53e669c30e..0000000000 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 6f9e376af5..0000000000 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 22c0425d15..0000000000 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 c37618d74b..0000000000 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 91293b007e..0000000000 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 ad4ab4c58b..0000000000 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 b512c5bc58..0000000000 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 24c6d37822..0000000000 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 c8dcca111d..0000000000 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 0d0a3dc8a2..0000000000 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 2de4f7c703..0000000000 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 fbfda5d7c5..0000000000 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 80a31632f8..0000000000 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 06073bf61e..0000000000 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 1f2ec13f1f..0000000000 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 7744e79f52..0000000000 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 7929751902..0000000000 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 35e57fda51..0000000000 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 0183d74901..0000000000 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 d284081a3e..0000000000 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 f48db12b3f..0000000000 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 f237a59288..0000000000 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 17a153f45b..0000000000 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 5ce3218837..0000000000 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 bc0bb21c2d..0000000000 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 68b899e072..0000000000 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 8030e5ca61..0000000000 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 db3b76e6e2..0000000000 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 5d364653d5..0000000000 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 2ee03fefd3..0000000000 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 37c68d8be1..0000000000 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 32eb4b1494..0000000000 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 194799a558..0000000000 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 a1c3011a34..0000000000 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 ffa034cddc..0000000000 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 6eea839328..0000000000 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 4669663058..0000000000 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 1f137efdbd..0000000000 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 dd2caa70b6..0000000000 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 925a6439c9..0000000000 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 765487bc95..0000000000 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 d4d558f360..0000000000 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 2bf4657aa6..0000000000 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 728109cecb..0000000000 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 8a4aa523e1..0000000000 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 4b56311b6d..0000000000 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 7295fb42a5..0000000000 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 7302e01a9f..0000000000 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 f03326f041..0000000000 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 a62ccac0dd..0000000000 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 b7e82a4c0c..0000000000 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 569ef3d9c4..0000000000 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 9ba9062976..0000000000 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 942a9534aa..0000000000 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 5a70b7f141..0000000000 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 0c60c44e54..0000000000 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 c016b0c6d8..0000000000 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 04807c8076..0000000000 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 86ceb304ca..0000000000 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 fc9447ae29..0000000000 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 faacaae8c2..0000000000 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 bfc802de24..0000000000 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 e1f11b8724..0000000000 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 59437bbaac..0000000000 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 53e669c30e..0000000000 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 6f9e376af5..0000000000 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 22c0425d15..0000000000 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 c37618d74b..0000000000 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 91293b007e..0000000000 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 ad4ab4c58b..0000000000 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 b512c5bc58..0000000000 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 24c6d37822..0000000000 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 c8dcca111d..0000000000 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 0d0a3dc8a2..0000000000 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 2de4f7c703..0000000000 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 fbfda5d7c5..0000000000 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 80a31632f8..0000000000 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 06073bf61e..0000000000 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 1f2ec13f1f..0000000000 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 7744e79f52..0000000000 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 7929751902..0000000000 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 35e57fda51..0000000000 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 0183d74901..0000000000 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 d284081a3e..0000000000 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 f48db12b3f..0000000000 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 f237a59288..0000000000 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 17a153f45b..0000000000 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 5ce3218837..0000000000 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 bc0bb21c2d..0000000000 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 68b899e072..0000000000 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 8030e5ca61..0000000000 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 db3b76e6e2..0000000000 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 5d364653d5..0000000000 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 2ee03fefd3..0000000000 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 37c68d8be1..0000000000 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 32eb4b1494..0000000000 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 194799a558..0000000000 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 a1c3011a34..0000000000 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 ffa034cddc..0000000000 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 6eea839328..0000000000 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 4669663058..0000000000 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 1f137efdbd..0000000000 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 dd2caa70b6..0000000000 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 925a6439c9..0000000000 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 765487bc95..0000000000 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 d4d558f360..0000000000 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 2bf4657aa6..0000000000 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 728109cecb..0000000000 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 8a4aa523e1..0000000000 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 4b56311b6d..0000000000 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 7295fb42a5..0000000000 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 7302e01a9f..0000000000 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 f03326f041..0000000000 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 a62ccac0dd..0000000000 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 b7e82a4c0c..0000000000 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 569ef3d9c4..0000000000 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 0000000000..40992dd5e7 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 0000000000..18e7325ae9 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 0000000000..1517725079 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 0000000000..04be85fb1c 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 0000000000..de6ec47b3e 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 0000000000..46c9e70103 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 0000000000..37046f2854 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 0000000000..a0bd76a515 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 0000000000..a69dfa0dcf 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 0000000000..84fead34ff 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 0000000000..87a6d352fd 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 0000000000..a917901e46 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 0000000000..c23497b735 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 0000000000..796b9eb0af 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 0000000000..ed7a6c6bbc 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 0000000000..c141bd53de 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 0000000000..2ea1e36e4b 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 0000000000..b629b17768 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 0000000000..843af2d15d 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 0000000000..20de132790 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 0000000000..a548cd61b3 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 0000000000..0729d71419 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 0000000000..57e6928d07 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 0000000000..ac5cd4b2c0 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 0000000000..feb1ba6d5c 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 0000000000..1d0349a0e3 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 0000000000..db955954b3 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 0000000000..1b5966613c 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 0000000000..2d160c9a19 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 0000000000..cf560734e1 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 0000000000..200234df61 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 0000000000..ac2843de8c 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 0000000000..5ac019f594 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 0000000000..ff53bd6095 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 0000000000..0f6f60c028 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 0000000000..83180145bf 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 0000000000..6b69a897c0 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 0000000000..e5fd692d90 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 0000000000..7e31e05804 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 0000000000..e564a152ac 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 0000000000..109684a09e 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 0000000000..2df7f5a18f 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 0000000000..5011bd5835 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 0000000000..4379da6ea2 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 0000000000..9e3effb2e0 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 0000000000..bcc9eaf0da 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 0000000000..26ae9b977a 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 0000000000..f0a1c389d6 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 0000000000..b32d9a3178 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 0000000000..189ad37c62 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 0000000000..ebddee21ce 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 0000000000..f78a5d838b 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 0000000000..81da2995b1 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 0000000000..313eae9819 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 0000000000..cbcdf6e696 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 0000000000..2f4179b87d 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 0000000000..df354550d2 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 0000000000..cad608d6d8 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 0000000000..fcaf8b94ae 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 0000000000..6bfd746923 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 0000000000..16dad0432e 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 0000000000..a17929f323 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 0000000000..39e0755341 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 0000000000..827c7524af 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 0000000000..726ca2044f 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 0000000000..dc730cbc3e 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 0000000000..11ac9af7e6 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 0000000000..47b81edc73 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 0000000000..1d400eae85 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 0000000000..e3d3312a9a 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 0000000000..cf4ac08f1b 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 0000000000..251286f6c0 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 0000000000..c2bc4cbfea 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 0000000000..c434cd608a 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 0000000000..42acb6ed0d 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 0000000000..aee8e7d2aa 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 0000000000..27fdec7a26 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 0000000000..6f4216e009 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 0000000000..da804cc9b2 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 0000000000..60ff342d36 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 0000000000..b977fa2cf9 --- /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 0000000000..6300e60e17 --- /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 0000000000..126b58ce20 --- /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 0000000000..303c86e7d0 --- /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 0000000000..06545fde18 --- /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 0000000000..1f276b3112 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 0000000000..7d829965a8 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 0000000000..3e7992e927 --- /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 0000000000..b48978e1ee --- /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 0000000000..6b7e352095 --- /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 0000000000..ac57f491ef --- /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 0000000000..745a97cd25 --- /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 0000000000..2d6ec68710 --- /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 0000000000..806f7b650c --- /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 0000000000..893ab43e5c --- /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 0000000000..6cb3aea2d1 --- /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 0000000000..955baba0c3 --- /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 0000000000..c01316adcc --- /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 0000000000..6763d8f97a --- /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 0000000000..f3b8408ff8 --- /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 0000000000..bc9119a365 --- /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 0000000000..2d7ef7f185 --- /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 0000000000..8d26f55d99 --- /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 0000000000..f8d7f4239d --- /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 0000000000..e8e40df1ad --- /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 0000000000..28e36b04fe --- /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 0000000000..a2b79fb9da --- /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 0000000000..20b5a394a5 --- /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 0000000000..610b655292 --- /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 0000000000..4fc6c3b5b0 --- /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 0000000000..6cda5f6d31 --- /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 0000000000..3cd8fa89b7 --- /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 0000000000..1886df819c 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 0000000000..3da724650f 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 0000000000..fa598acf3d --- /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 0000000000..d8b5951a0b --- /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 0000000000..21d853e33e 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 0000000000..ef22aed819 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 0000000000..1054735b5e --- /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 0000000000..d97de168c0 --- /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 0000000000..b4f5c9ec7f --- /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 0000000000..5a576eb4bb --- /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 0000000000..500c0e9e76 --- /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 0000000000..41f3197344 --- /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 0000000000..ede81020cc --- /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 0000000000..65e7d60bb2 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 0000000000..8ca0135c1f 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 0000000000..5d07df5a4d 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 0000000000..d311a79417 --- /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 0000000000..5a325b7e75 --- /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 0000000000..13f63beba8 --- /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 0000000000..a9c2465b6d --- /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 0000000000..a62abdeecc --- /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 0000000000..0e7d213e61 --- /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 0000000000..681f3adb01 --- /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 0000000000..83e814a8af --- /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 0000000000..4b945f10fd --- /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 0000000000..3cf03114df --- /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 0000000000..8193a9f719 --- /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 0000000000..77e0757b0b --- /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 0000000000..0ccb78f11c --- /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 0000000000..cb76605a15 --- /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 0000000000..26131ec228 --- /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 0000000000..8e05bb28cd --- /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 0000000000..c33644173d --- /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 0000000000..f44dd6cd3e --- /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 0000000000..fc6fdfaf46 --- /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 0000000000..002c2a4f92 --- /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 0000000000..d78ce2e902 --- /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 0000000000..bff6bbf896 --- /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 0000000000..6e31db4d5a --- /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 0000000000..68b88fbd23 --- /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 0000000000..8407b98e5f --- /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 0000000000..a4fdb24b8a --- /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 0000000000..55e8b2d36e --- /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 0000000000..8111a69d54 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 0000000000..20688b1d43 --- /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 0000000000..2efee8b5e1 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 0000000000..1b66493dfc 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 0000000000..6449be2024 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 0000000000..6474552747 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 0000000000..8eea04fe14 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 0000000000..9bd584c45a 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 0000000000..51dc83aa36 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 0000000000..e9c461951d Binary files /dev/null and b/img/new/unique-section-4.png differ diff --git a/index.html b/index.html index d6525957c0..517b801fb2 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 d170f40a49..f567e12ae6 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 0000000000..26217a8a72 --- /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 0000000000..1513a54678 --- /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 0000000000..33fa11057f --- /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 88a6409d7c..9011e2e1a1 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 0000000000..0c347e3e06 --- /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 0000000000..03f0ee756e Binary files /dev/null and b/video/connect.mp4 differ