diff --git a/.gitignore b/.gitignore index 0083e76434..8fffa06ae3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,26 @@ -# OS generated files # -###################### +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +node_modules +pnpm-lock.yaml +package-lock.json +yarn.lock + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +dist +.editorconfig + +# Misc .DS_Store .DS_Store? ._* -.Spotlight-V100 -.Trashes -.idea -ehthumbs.db Thumbs.db -node_modules +logs +*.log +.env + +# Adastra +assets/adastra.manifest.json diff --git a/README.md b/README.md index 926d8c0e3b..9dd394ccad 100644 --- a/README.md +++ b/README.md @@ -1,185 +1,126 @@ -Brought to you and maintained by [Trellis Commerce](https://trellis.co/) - A full-service eCommerce agency based in Boston, MA +# Adastra Necessary Template ✨ -Latest merged code from [Dawn v15.0.1](https://github.com/Shopify/dawn/releases/tag/v15.0.1) - -# Dawn + Tailwind CSS + Prettier Shopify Starter Theme - -Shopify Dawn theme with Tailwind CSS & Prettier integrations - -The starter theme includes an integration of: - -## [Tailwind CSS](https://tailwindcss.com/) - -- [Configured](https://markustripp.medium.com/extend-shopify-dawn-theme-with-a-custom-tailwind-css-carousel-section-e3efe3ecf18e) to use `prefix: twcss-` in order to not clash with Dawn’s existing styles - -## [Trellis' Prettier config](https://www.npmjs.com/package/@trelliscommerce/prettier-config) with Husky pre-commit hooks - -- Formats JS & CSS whenever a git commit is made -- Set up your own VSCode to apply Prettier formatting when a file is saved (optional) - -## Other Noted Modifications - -- Set the default page width to 1440px and tweaked the desktop page width range to be 1200px to 1600px with a step adjustment of 10px (standard desktop width used at Trellis and allows for more fine tuning) -- There is a page template called `noindexnofollow` with the meta tag `noindex, nofollow` for any pages that need to be hidden from search engine site crawlers - -## Steps to Start Using this Starter Theme - -1. Fork this repository & enable actions in the repo's Actions tab. - -| :bangbang: | When forking this repo, make sure to change the settings in the forked repo under Settings > Actions > General > Workflow permissions to be `Read and write permissions` and check `Allow GitHub Actions to create and approve pull requests` for the Theme Check & Lighthouse actions to run | -|:----------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - -2. Clone the forked repo, navigate to the directory in your terminal, & run `npm install`. - -3. In the theme section of your Shopify admin you can connect to a GitHub repository via “Add theme” button. - -Add a theme and connect it to your github repo - -4. In your terminal, navigate to the cloned repo directory, and use the Shopify CLI to launch the development server to your store with `shopify theme dev --store=mystore.myshopify.com` and upload the theme with `shopify theme share`. - -| :bangbang: | If you are working on a development store and are signed in via your partner dashboard, you must add a separate user in that Shopify store with admin rights and sign in with this new user when logging in using the Shopify CLI | -|:----------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - -You can add users in the store Settings: - -Where to add users in the store settings - -## Add GitHub secrets for Lighthouse CI Performance Evaluation Actions - -| :bangbang: | This repo does not have the following secrets configured, which is why the Lighthouse action is failing. | -|:----------:|:---------------------------------------------------------------------------------------------------------| - -First, make sure your `Workflow permissions` are set like below in order for the actions to run: - -Workflow permissions settings - -In your GitHub repo, navigate to Settings > Secrets > Actions and add the following repository secrets: - -`SHOP_ACCESS_TOKEN` - -- Settings > Apps and sales channels > Develop Apps > Create an app. Name it something like `Lighthouse` and give the app permissions of `read_products,write_themes`. Install the app and use the token value that will start with `shpat_`. - -`SHOP_STORE` - -- `mystore.myshopify.com` (ex. `trellis-sandbox.myshopify.com`) - -`SHOP_PASSWORD` - -- Need if Preferences > Password protection is enabled - -`SHOP_COLLECTION_HANDLE` - -- Collection with products **manually added** needs to be created and the handle used here -- Make sure data shows for the API request: https://mystore.myshopify.com/admin/api/2021-04/custom_collections.json?published_status=published&limit=1 - -`SHOP_PRODUCT_HANDLE` - -- Select a product handle for a product that comes back from the API request: https://mystore.myshopify.com/admin/api/2021-04/products.json?published_status=published&limit=1 - -`LHCI_GITHUB_APP_TOKEN` - -- To enable GitHub status checks via the official GitHub app, [install and authorize the app](https://github.com/apps/lighthouse-ci) with the owner of the target repo. If the repo is within an organization, organization approval might be necessary. Copy the app token provided on the authorization confirmation page and add it to your build environment as `LHCI_GITHUB_APP_TOKEN` - -These secret values are used in the `ci.yml` GitHub workflow: - -Screenshot 2024-07-30 at 1 44 13 PM - -## Install [Shopify Liquid VSCode extension](https://marketplace.visualstudio.com/items?itemName=Shopify.theme-check-vscode) - -- Includes [Shopify Theme Check](https://shopify.dev/themes/tools/theme-check) linting - -## Common local development commands - -1. Before beginning any work, it is good practice to pull down the latest changes from the Shopify Dawn theme: - `git fetch upstream` - `git pull upstream main` - -2. Add upstream link if you get the error `fatal: 'upstream' does not appear to be a git repository` run: - `git remote add upstream https://github.com/Shopify/dawn.git` or `git remote add upstream https://github.com/TrellisCommerce/shopify-tailwind-starter-base` depending on which repository you want to pull updates from - -3. Pull down changes from the theme editor: - `shopify theme pull -d` +```bash +npm create adastra@latest -- --template necessary +``` -4. Anytime you add a Tailwind CSS class (remember to prefix it with twcss-), run the CLI tool to scan your template files for classes and build your CSS to assets/app.css: - `npx tailwindcss -i ./assets/app-tailwind.css -o ./assets/app.css --watch` +Using Yarn/PNPM -- Run this command in a separate terminal, so it will continue to run while you are developing. -- Note that using a Tailwind CSS class without a space afterward when followed by a liquid tag causes compiling issues: -`lg:!twcss-px-[32px]{% endif %}'>` -But this does work: -`lg:!twcss-px-[32px] {% endif %}'>` +```bash +yarn create adastra@latest --template necessary +# pnpm create adastra@latest --template necessary +``` -5. Launch the local development server: - `shopify theme dev` - ---- +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=603560480) -# Other Versions of the Starter Theme +> 🧑‍🚀 **Hey astronaut?** Have fun building Shopify themes with Adastra! -## Tailwind Admin Fields +![necessary](https://raw.githubusercontent.com/odestry/adastra/main/.github/assets/minimal-template-banner.png) -- [Branch](https://github.com/TrellisCommerce/shopify-tailwind-starter-base/tree/tailwind-admin-fields) +## Launch development server -### How Is It Different +### Using Adastra CLI ✨ -Multiple admin fields have been added at the theme level, as well as at the section level, to allow for more granular control over the Dawn theme's settings and elements directly through the admin by inputting Tailwind CSS classes as values. +To launch the development server for the first time, you will need to replace the development command inside the `package.json` with the following: -### How To Use +```json +"scripts": { + - "dev": "adastra dev", + "dev": "adastra dev -s example-store.myshopify.com", + ... +} +``` -First, decide if you want to configure the `tailwind.config.js` file to allow for your specific font families, sizes, colors, etc to cut down on the generated Tailwind CSS file from the start, or you can just jump in and take advantage of all the default Tailwind CSS classes. +> 💡 The command will launch two dev servers, the first for Vite at `localhost:5173` to server static files from the `src` directory and the second for Shopify at `localhost:9292` to serve your theme. -1. Affect global animation timing & easing from [Easing Functions Cheat Sheet](https://easings.net/) in Theme Settings under Animations: +### Using Vite and Shopify CLI -Animation Tailwind CSS settings +```json +"scripts": { + - "dev": "adastra dev", + "dev": "vite", + "dev:shopify": "shopify theme dev -s example-store.myshopify.com", + "build": "vite build", + ... +} +``` -2. Affect global elements in the Theme Settings under the Tailwind CSS accordion: +> 💡 Both commands will launch two dev servers, however you will need to spawn two terminal sessions for each server. + +## Theme Structure + +Inside your Adastra ✨ theme project, you'll see the following folders and files. + +1. Most Shopify themes files and folders remain the same. +2. There is only one additional **Super Special** folder called `src` (you can change its name in `vite.config.js` file). +3. Instead of directly editing static assets in the theme `assets` directory, you will use the new `src` directory instead. +4. Static files inside the `src` directory are served by [Vite](https://vitejs.dev). +5. When launching the developement sever command `npm run dev` the command launches two dev servers, one for [Vite](https://vitejs.dev) to serve static files and the other one for Shopify to upload the development theme to remote Shopify server (Takes a bit of time). + +```shell +/ +├── assets +├── config +├── layout +├── locales +├── sections/ +│ └── hello-world.liquid +├── snippets/ +│ └── colors.liquid +├── src/ # Source directory (name can be changed in vite.config.js) +│ ├── entrypoints/ # Entrypoints directory (name can be changed in vite.config.js) +│ │ ├── base.css +│ │ └── index.js +│ └── hello-world.js +├── templates +├── vite.config.js +└── package.json +``` -Global element Tailwind CSS theme settings +Adastra ✨ detects entrypoint files automatically in the `entrypoints/` directory. In this case `base.css` for styles and `index.js` for modules. -3. Affect global elements and page-level sections under the Tailwind CSS heading for each Dawn element in the admin: +So everything you import to these two files will be shipped to the theme `assets` folder when building for production. -Header Tailwind CSS settings +You can create other folders like `src/utils/` if you want, or a `src/components/` folder for Native/React/Vue/Lit/Preact components. Only the files/modules imported in the entrypoint files will be served by Vite. -### If Using in Conjunction with a Development Team +Any static assets, like custom fonts, manifest files, `.css.liquid` or `.js.liquid`, can be placed inside the `assets` theme folder, just make sure to add the configuration below to avoid clearing the assets directory when building for production. -#### Optimizing CSS +```js +// vite.config.js -In order to make all the Tailwind classes available for the editor in the admin, the following was added to the `tailwind.config.js` file to include ALL classes, as well as breakpoint & hover variants, and to add `!important` to each class to make sure it overrides any existing Dawn styles: +import { defineConfig } from 'vite' +import adastra from 'adastra-plugin' +export default defineConfig({ + plugins: [adastra()], + build: { + emptyOutDir: false + } +}) ``` -... -// safelist is added to provide all styles for design to add through the admin -safelist: [ - { - pattern: /.*/, - variants: ['xs', 'sm', 'md', 'lg', 'hover', 'group-hover'], - }, -], -// !important is added to override core Dawn styles for design -important: true, -... -``` - -If this theme is handed over to a development team who will be editing the code directly, the safelist array will need to be removed (ideal to also remove the `important` key, but that would require adjusting any conflicting Dawn styles) from the config file and the following added to the content array to have Tailwind recognize the classes added through the admin fields: -``` -content: [ - ... - './**/*.json', -], -``` +## Commands -If desired, run the Tailwind compile command to purge any unused styles (this step is optional as making a commit with changes to the tailwind config file will auto-generate a new `app.css` file after the commit is pushed, but this step will allow for a quick check on the proper purging of the classes): `npx tailwindcss -i ./assets/app-tailwind.css -o ./assets/app.css` +Adastra CLI ✨ is built on top of Shopify CLI 3.X, this means that existing Adastra commands are the same as Shopify's. -#### Lock Down the Admin Fields +```bash +adastra dev -s example-store.myshopify.com +# same as shopify theme dev -s example-store.myshopify.com +``` -To lock down the Tailwind CSS admin fields from being editied through the admin, run `gulp` in your terminal to transform all Tailwind text fields to checkbox fields instead and to add the following paragraph text to all Tailwind sections: +All commands are run from the root of the theme project, from a terminal: -_Tailwind fields are not editable through the admin at this stage. Please contact a Trellis engineer if changes are needed._ +### Other commands -| :bangbang: | Note that toggling one of the checkboxes after running `gulp` will remove the contents of the tailwind admin fields. Since removing the fields also removes the entered values, swapping to a different field type preserves the values and does not allow for editing the values. | -|:----------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command | Action | +| :--------------------- | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run build` | Build and minifies your production static files to `./assets/` folder | +| `npm run preview` | Preview of your remote development theme, before deploying | +| `npm run check` | Run theme check to lint the theme | +| `npm run adastra ...` | Run CLI commands like `adastra dev`, `adastra check` | +| `npm run adastra --help` | Get help using the Adastra CLI | -#### Code Review of Classes Inserted Through the Admin +## Want to learn more? -It is recommended to have a separate branch & connected theme version created for the design team to use when adding in classes through the admin fields. This way, when it is time to merge in the changes from that branch to another theme branch, a pull request can be created and all the commits can be reviewed all at once instead of reviewing each individual commit generated by `shopify[bot]`. +Feel free to check [our documentation](https://docs.odestry.com) or jump into our [Discord server](https://help.odestry.com). diff --git a/assets/adastra.manifest.json b/assets/adastra.manifest.json new file mode 100644 index 0000000000..a89538719f --- /dev/null +++ b/assets/adastra.manifest.json @@ -0,0 +1,20 @@ +{ + "src/entrypoints/base.css": { + "file": "mm-base-056c9d6d.css", + "isEntry": true, + "src": "src/entrypoints/base.css" + }, + "src/entrypoints/index.css": { + "file": "mm-index-db544325.css", + "src": "src/entrypoints/index.css" + }, + "src/entrypoints/index.js": { + "css": [ + "mm-index-db544325.css", + "mm-base-056c9d6d.css" + ], + "file": "mm-index-b9f6c250.js", + "isEntry": true, + "src": "src/entrypoints/index.js" + } +} \ No newline at end of file diff --git a/assets/app.css b/assets/app.css index b158105889..7c79c25895 100644 --- a/assets/app.css +++ b/assets/app.css @@ -107,7 +107,7 @@ } /* -! tailwindcss v3.4.12 | MIT License | https://tailwindcss.com +! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com */ /* @@ -550,6 +550,1133 @@ video { /* Make elements with the HTML hidden attribute stay hidden by default */ -[hidden] { +[hidden]:where(:not([hidden="until-found"])) { display: none; } + +.container { + width: 100%; +} + +@media (min-width: 320px) { + .container { + max-width: 320px; + } +} + +@media (min-width: 750px) { + .container { + max-width: 750px; + } +} + +@media (min-width: 990px) { + .container { + max-width: 990px; + } +} + +@media (min-width: 1440px) { + .container { + max-width: 1440px; + } +} + +@media (min-width: 1624px) { + .container { + max-width: 1624px; + } +} + +@media (min-width: 1920px) { + .container { + max-width: 1920px; + } +} + +.\!visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: sticky; +} + +.-bottom-16 { + bottom: -4rem; +} + +.bottom-0 { + bottom: 0px; +} + +.left-0 { + left: 0px; +} + +.right-0 { + right: 0px; +} + +.right-4 { + right: 1rem; +} + +.isolate { + isolation: isolate; +} + +.z-\[2\] { + z-index: 2; +} + +.order-1 { + order: 1; +} + +.order-2 { + order: 2; +} + +.order-3 { + order: 3; +} + +.order-4 { + order: 4; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +.\!ml-1 { + margin-left: 0.25rem !important; +} + +.-mt-1 { + margin-top: -0.25rem; +} + +.-mt-20 { + margin-top: -5rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-10 { + margin-bottom: 2.5rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.mb-5 { + margin-bottom: 1.25rem; +} + +.mb-8 { + margin-bottom: 2rem; +} + +.ml-4 { + margin-left: 1rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.mt-3 { + margin-top: 0.75rem; +} + +.mb-3 { + margin-bottom: 0.75rem; +} + +.\!mb-3 { + margin-bottom: 0.75rem !important; +} + +.\!block { + display: block !important; +} + +.block { + display: block; +} + +.inline-block { + display: inline-block; +} + +.inline { + display: inline; +} + +.flex { + display: flex; +} + +.inline-flex { + display: inline-flex; +} + +.table { + display: table; +} + +.grid { + display: grid; +} + +.\!hidden { + display: none !important; +} + +.hidden { + display: none; +} + +.aspect-square { + aspect-ratio: 1 / 1; +} + +.\!h-auto { + height: auto !important; +} + +.h-0 { + height: 0px; +} + +.h-3 { + height: 0.75rem; +} + +.h-5 { + height: 1.25rem; +} + +.h-8 { + height: 2rem; +} + +.h-\[1px\] { + height: 1px; +} + +.h-auto { + height: auto; +} + +.h-full { + height: 100%; +} + +.min-h-20 { + min-height: 5rem; +} + +.\!w-full { + width: 100% !important; +} + +.w-3 { + width: 0.75rem; +} + +.w-4 { + width: 1rem; +} + +.w-5 { + width: 1.25rem; +} + +.w-8 { + width: 2rem; +} + +.w-fit { + width: -moz-fit-content; + width: fit-content; +} + +.w-full { + width: 100%; +} + +.min-w-\[250px\] { + min-width: 250px; +} + +.min-w-full { + min-width: 100%; +} + +.max-w-\[100px\] { + max-width: 100px; +} + +.max-w-\[250px\] { + max-width: 250px; +} + +.max-w-\[80vw\] { + max-width: 80vw; +} + +.max-w-full { + max-width: 100%; +} + +.max-w-none { + max-width: none; +} + +.grow { + flex-grow: 1; +} + +.-translate-x-2 { + --tw-translate-x: -0.5rem; + 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-5 { + --tw-translate-y: -1.25rem; + 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-0 { + --tw-translate-y: 0px; + 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)); +} + +.-rotate-\[8deg\] { + --tw-rotate: -8deg; + 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)); +} + +.rotate-0 { + --tw-rotate: 0deg; + 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)); +} + +.rotate-180 { + --tw-rotate: 180deg; + 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)); +} + +.cursor-pointer { + cursor: pointer; +} + +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} + +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.items-start { + align-items: flex-start; +} + +.items-end { + align-items: flex-end; +} + +.items-center { + align-items: center; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.gap-0 { + gap: 0px; +} + +.gap-10 { + gap: 2.5rem; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-4 { + gap: 1rem; +} + +.overflow-hidden { + overflow: hidden; +} + +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.whitespace-normal { + white-space: normal; +} + +.whitespace-nowrap { + white-space: nowrap; +} + +.\!border-0 { + border-width: 0px !important; +} + +.border { + border-width: 1px; +} + +.\!border-t-0 { + border-top-width: 0px !important; +} + +.border-b { + border-bottom-width: 1px; +} + +.border-t { + border-top-width: 1px; +} + +.border-\[grey\] { + --tw-border-opacity: 1; + border-color: rgb(128 128 128 / var(--tw-border-opacity)); +} + +.border-black { + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); +} + +.border-white { + --tw-border-opacity: 1; + border-color: rgb(255 255 255 / var(--tw-border-opacity)); +} + +.\!bg-\[\#FBEB34\] { + --tw-bg-opacity: 1 !important; + background-color: rgb(251 235 52 / var(--tw-bg-opacity)) !important; +} + +.bg-\[\#292929\] { + --tw-bg-opacity: 1; + background-color: rgb(41 41 41 / var(--tw-bg-opacity)); +} + +.bg-\[\#6E6E6E\] { + --tw-bg-opacity: 1; + background-color: rgb(110 110 110 / var(--tw-bg-opacity)); +} + +.bg-\[\#A42325\] { + --tw-bg-opacity: 1; + background-color: rgb(164 35 37 / var(--tw-bg-opacity)); +} + +.bg-\[\#FFECEC\] { + --tw-bg-opacity: 1; + background-color: rgb(255 236 236 / var(--tw-bg-opacity)); +} + +.bg-\[rgba\(255\2c 255\2c 255\2c 0\.7\)\] { + background-color: rgba(255,255,255,0.7); +} + +.bg-black { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); +} + +.object-cover { + -o-object-fit: cover; + object-fit: cover; +} + +.\!p-0 { + padding: 0px !important; +} + +.p-10 { + padding: 2.5rem; +} + +.p-2 { + padding: 0.5rem; +} + +.p-3 { + padding: 0.75rem; +} + +.p-4 { + padding: 1rem; +} + +.\!px-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; +} + +.\!px-4 { + padding-left: 1rem !important; + padding-right: 1rem !important; +} + +.\!py-10 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.px-8 { + padding-left: 2rem; + padding-right: 2rem; +} + +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.pb-10 { + padding-bottom: 2.5rem; +} + +.pb-8 { + padding-bottom: 2rem; +} + +.pt-1 { + padding-top: 0.25rem; +} + +.pt-10 { + padding-top: 2.5rem; +} + +.pt-5 { + padding-top: 1.25rem; +} + +.text-center { + text-align: center; +} + +.\!font-body { + font-family: var(--font-body-family) !important; +} + +.\!font-heading { + font-family: var(--font-heading-family) !important; +} + +.font-heading { + font-family: var(--font-heading-family); +} + +.font-script { + font-family: var(--font-script-family); +} + +.font-body { + font-family: var(--font-body-family); +} + +.\!text-base { + font-size: 1rem !important; + line-height: 1.5rem !important; +} + +.\!text-lg { + font-size: 1.125rem !important; + line-height: 1.75rem !important; +} + +.\!text-sm { + font-size: 0.875rem !important; + line-height: 1.25rem !important; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-\[12px\] { + font-size: 12px; +} + +.text-\[28px\] { + font-size: 28px; +} + +.text-\[5vw\] { + font-size: 5vw; +} + +.text-\[8vw\] { + font-size: 8vw; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.text-3xl { + font-size: 1.875rem; + line-height: 2.25rem; +} + +.font-bold { + font-weight: 700; +} + +.font-medium { + font-weight: 500; +} + +.font-semibold { + font-weight: 600; +} + +.uppercase { + text-transform: uppercase; +} + +.lowercase { + text-transform: lowercase; +} + +.capitalize { + text-transform: capitalize; +} + +.italic { + font-style: italic; +} + +.\!tracking-wide { + letter-spacing: 0.025em !important; +} + +.tracking-wide { + letter-spacing: 0.025em; +} + +.tracking-widest { + letter-spacing: 0.1em; +} + +.\!text-\[grey\] { + --tw-text-opacity: 1 !important; + color: rgb(128 128 128 / var(--tw-text-opacity)) !important; +} + +.text-\[\#A42325\] { + --tw-text-opacity: 1; + color: rgb(164 35 37 / var(--tw-text-opacity)); +} + +.text-\[\#FBEB34\] { + --tw-text-opacity: 1; + color: rgb(251 235 52 / var(--tw-text-opacity)); +} + +.text-\[grey\] { + --tw-text-opacity: 1; + color: rgb(128 128 128 / var(--tw-text-opacity)); +} + +.text-black { + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity)); +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.underline { + text-decoration-line: underline; +} + +.opacity-0 { + opacity: 0; +} + +.opacity-100 { + opacity: 1; +} + +.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-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.outline { + outline-style: solid; +} + +.grayscale-0 { + --tw-grayscale: grayscale(0); + 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); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + 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; +} + +.duration-200 { + transition-duration: 200ms; +} + +.duration-500 { + transition-duration: 500ms; +} + +.hover\:bg-\[\#520303\]:hover { + --tw-bg-opacity: 1; + background-color: rgb(82 3 3 / var(--tw-bg-opacity)); +} + +.hover\:text-\[\#FBEB34\]:hover { + --tw-text-opacity: 1; + color: rgb(251 235 52 / var(--tw-text-opacity)); +} + +.hover\:\!shadow-none:hover { + --tw-shadow: 0 0 #0000 !important; + --tw-shadow-colored: 0 0 #0000 !important; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; +} + +.hover\:brightness-90:hover { + --tw-brightness: brightness(.9); + 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); +} + +.hover\:backdrop-brightness-90:hover { + --tw-backdrop-brightness: brightness(.9); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.focus-visible\:\!shadow-none:focus-visible { + --tw-shadow: 0 0 #0000 !important; + --tw-shadow-colored: 0 0 #0000 !important; + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; +} + +.focus-visible\:shadow-none:focus-visible { + --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); +} + +.focus-visible\:\!outline-none:focus-visible { + outline: 2px solid transparent !important; + outline-offset: 2px !important; +} + +.focus-visible\:outline-2:focus-visible { + outline-width: 2px; +} + +.focus-visible\:\!outline-offset-0:focus-visible { + outline-offset: 0px !important; +} + +.focus-visible\:outline-offset-0:focus-visible { + outline-offset: 0px; +} + +.group:hover .group-hover\:visible { + visibility: visible; +} + +.group:hover .group-hover\:translate-x-0 { + --tw-translate-x: 0px; + 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)); +} + +.group:hover .group-hover\:opacity-100 { + opacity: 1; +} + +.group:hover .group-hover\:grayscale-0 { + --tw-grayscale: grayscale(0); + 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); +} + +@media (min-width: 750px) { + .md\:mb-0 { + margin-bottom: 0px; + } + + .md\:mb-10 { + margin-bottom: 2.5rem; + } + + .md\:\!flex { + display: flex !important; + } + + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .md\:gap-4 { + gap: 1rem; + } + + .md\:\!px-\[3\.2rem\] { + padding-left: 3.2rem !important; + padding-right: 3.2rem !important; + } + + .md\:text-2xl { + font-size: 1.5rem; + line-height: 2rem; + } + + .md\:text-5xl { + font-size: 3rem; + line-height: 1; + } +} + +@media (min-width: 990px) { + .lg\:visible { + visibility: visible; + } + + .lg\:static { + position: static; + } + + .lg\:order-1 { + order: 1; + } + + .lg\:order-2 { + order: 2; + } + + .lg\:order-3 { + order: 3; + } + + .lg\:order-4 { + order: 4; + } + + .lg\:mb-0 { + margin-bottom: 0px; + } + + .lg\:mb-4 { + margin-bottom: 1rem; + } + + .lg\:\!block { + display: block !important; + } + + .lg\:flex { + display: flex; + } + + .lg\:\!hidden { + display: none !important; + } + + .lg\:hidden { + display: none; + } + + .lg\:h-auto { + height: auto; + } + + .lg\:h-full { + height: 100%; + } + + .lg\:min-h-0 { + min-height: 0px; + } + + .lg\:\!w-full { + width: 100% !important; + } + + .lg\:w-auto { + width: auto; + } + + .lg\:max-w-\[40vw\] { + max-width: 40vw; + } + + .lg\:max-w-full { + max-width: 100%; + } + + .lg\:translate-y-0 { + --tw-translate-y: 0px; + 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)); + } + + .lg\:cursor-auto { + cursor: auto; + } + + .lg\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .lg\:grid-cols-\[300px_auto\] { + grid-template-columns: 300px auto; + } + + .lg\:flex-row { + flex-direction: row; + } + + .lg\:flex-col { + flex-direction: column; + } + + .lg\:justify-start { + justify-content: flex-start; + } + + .lg\:gap-4 { + gap: 1rem; + } + + .lg\:whitespace-nowrap { + white-space: nowrap; + } + + .lg\:border-none { + border-style: none; + } + + .lg\:bg-transparent { + background-color: transparent; + } + + .lg\:\!px-\[5rem\] { + padding-left: 5rem !important; + padding-right: 5rem !important; + } + + .lg\:\!py-20 { + padding-top: 5rem !important; + padding-bottom: 5rem !important; + } + + .lg\:px-0 { + padding-left: 0px; + padding-right: 0px; + } + + .lg\:py-0 { + padding-top: 0px; + padding-bottom: 0px; + } + + .lg\:py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + } + + .lg\:text-\[2\.5vw\] { + font-size: 2.5vw; + } + + .lg\:text-\[5vw\] { + font-size: 5vw; + } + + .lg\:text-lg { + font-size: 1.125rem; + line-height: 1.75rem; + } + + .lg\:font-normal { + font-weight: 400; + } + + .lg\:text-\[grey\] { + --tw-text-opacity: 1; + color: rgb(128 128 128 / var(--tw-text-opacity)); + } + + .lg\:text-black { + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity)); + } + + .lg\:text-inherit { + color: inherit; + } + + .lg\:opacity-100 { + opacity: 1; + } + + .lg\: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); + } + + .lg\:grayscale { + --tw-grayscale: grayscale(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); + } + + .lg\:hover\:brightness-100:hover { + --tw-brightness: brightness(1); + 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); + } + + .lg\:hover\:backdrop-brightness-100:hover { + --tw-backdrop-brightness: brightness(1); + -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); + } + + .group:hover .group-hover\:lg\:text-\[\#A42325\] { + --tw-text-opacity: 1; + color: rgb(164 35 37 / var(--tw-text-opacity)); + } +} + +@media (min-width: 1440px) { + .xl\:flex { + display: flex; + } +} diff --git a/assets/base.css b/assets/base.css index 90da2e8bf7..afca0adca5 100644 --- a/assets/base.css +++ b/assets/base.css @@ -103,7 +103,7 @@ body:has(.section-header .drawer-menu) .announcement-bar-section .page-width { @media screen and (min-width: 750px) { .page-width { - padding: 0 5rem; + padding: 0 1rem; } .header.page-width, @@ -193,7 +193,7 @@ body:has(.section-header .drawer-menu) .announcement-bar-section .page-width { } .hidden { - display: none !important; + display: none; } .visually-hidden { @@ -240,7 +240,7 @@ body:has(.section-header .drawer-menu) .announcement-bar-section .page-width { } .text-body { - font-size: 1.5rem; + font-size: 1rem; letter-spacing: 0.06rem; line-height: calc(1 + 0.8 / var(--font-body-scale)); font-family: var(--font-body-family); @@ -408,7 +408,7 @@ blockquote { .field__input, .form__label, .select__select { - font-size: 1.3rem; + font-size: 1rem; line-height: calc(1 + 0.5 / var(--font-body-scale)); letter-spacing: 0.04rem; } @@ -496,7 +496,7 @@ h6:empty { text-underline-offset: 0.3rem; color: rgb(var(--color-link)); background-color: transparent; - font-size: 1.4rem; + font-size: 1.2rem; font-family: inherit; } @@ -704,9 +704,9 @@ summary::-webkit-details-marker { } *:focus-visible { - outline: var(--focused-base-outline); - outline-offset: var(--focused-base-outline-offset); - box-shadow: var(--focused-base-box-shadow); + outline: inherit; + /* outline-offset: var(--focused-base-outline-offset); + box-shadow: var(--focused-base-box-shadow); */ } /* Fallback - for browsers that don't support :focus-visible, a fallback is set for :focus */ @@ -1199,8 +1199,8 @@ button.shopify-payment-button__button--unbranded, .shopify-challenge__button, .customer button, button.shopify-payment-button__button--unbranded { - min-width: calc(12rem + var(--buttons-border-width) * 2); - min-height: calc(4.5rem + var(--buttons-border-width) * 2); + /* min-width: calc(12rem + var(--buttons-border-width) * 2); */ + min-height: 42px; } .shopify-payment-button__button--branded { @@ -1297,7 +1297,9 @@ button.shopify-payment-button__button--unbranded { } .button:focus:not(:focus-visible):not(.focused), -.shopify-payment-button__button--unbranded:focus:not(:focus-visible):not(.focused), +.shopify-payment-button__button--unbranded:focus:not(:focus-visible):not( + .focused + ), .shopify-payment-button [role='button']:focus:not(:focus-visible):not(.focused) { box-shadow: inherit; @@ -1313,7 +1315,7 @@ button.shopify-payment-button__button--unbranded { .button-label, .shopify-challenge__button, .customer button { - font-size: 1.5rem; + font-size: 1rem; letter-spacing: 0.1rem; line-height: calc(1 + 0.2 / var(--font-body-scale)); } @@ -1885,10 +1887,10 @@ input[type='checkbox'] { .quantity { color: rgba(var(--color-foreground)); position: relative; - width: calc(14rem / var(--font-body-scale) + var(--inputs-border-width) * 2); + width: calc(8rem / var(--font-body-scale) + var(--inputs-border-width)); display: flex; border-radius: var(--inputs-radius); - min-height: calc((var(--inputs-border-width) * 2) + 4.5rem); + min-height: calc((var(--inputs-border-width) * 2) + 2.5rem); } .quantity:after { @@ -1928,7 +1930,7 @@ input[type='checkbox'] { font-family: var(--font-body-family); font-style: var(--font-body-style); font-weight: var(--font-body-weight); - font-size: 1.6rem; + font-size: 1rem; font-weight: 500; opacity: 0.85; text-align: center; @@ -1942,9 +1944,9 @@ input[type='checkbox'] { } .quantity__button { - width: calc(4.5rem / var(--font-body-scale)); + width: calc(2rem / var(--font-body-scale)); flex-shrink: 0; - font-size: 1.8rem; + font-size: 1rem; border: 0; background-color: transparent; cursor: pointer; @@ -1982,8 +1984,8 @@ input[type='checkbox'] { .quantity__button:not(:focus-visible):not(.focused), .quantity__input:not(:focus-visible):not(.focused) { - box-shadow: inherit; - background-color: inherit; + box-shadow: none; + background-color: none; } .quantity__input:-webkit-autofill, @@ -2094,8 +2096,8 @@ input[type='checkbox'] { justify-content: center; align-items: center; font-size: 0.9rem; - bottom: 0.8rem; - left: 2.2rem; + bottom: 0.5rem; + left: 2rem; line-height: calc(1 + 0.1 / var(--font-body-scale)); } @@ -2395,7 +2397,7 @@ input[type='checkbox'] { .header--middle-left { grid-template-areas: 'heading navigation icons'; - grid-template-columns: auto auto 1fr; + grid-template-columns: auto auto auto; column-gap: 2rem; } @@ -2552,16 +2554,16 @@ input[type='checkbox'] { } .header__icon .icon { - height: 2rem; - width: 2rem; + height: 1.5rem; + width: 1.5rem; fill: none; vertical-align: middle; } .header__icon, .header__icon--cart .icon { - height: 4.4rem; - width: 4.4rem; + height: 3rem; + width: 3rem; padding: 0; } @@ -2773,7 +2775,8 @@ details[open] > .header__submenu { @media screen and (min-width: 990px) { .header__inline-menu { - display: block; + display: flex; + justify-content: center; } .header--top-center .header__inline-menu { @@ -2794,7 +2797,7 @@ details[open] > .header__submenu { } .header__menu-item { - padding: 1.2rem; + padding: 1.2rem 1rem; text-decoration: none; color: rgba(var(--color-foreground), 0.75); } @@ -2924,10 +2927,11 @@ details-disclosure > details { border: 1px solid transparent; border-radius: var(--badge-corner-radius); display: inline-block; - font-size: 1.2rem; + font-size: 0.75rem; letter-spacing: 0.1rem; line-height: 1; - padding: 0.5rem 1.3rem 0.6rem 1.3rem; + padding: 0.25rem; + text-transform: uppercase; text-align: center; background-color: rgb(var(--color-badge-background)); border-color: rgba(var(--color-badge-border), var(--alpha-badge-border)); @@ -3551,6 +3555,7 @@ details-disclosure > details { position: absolute; z-index: 1; width: 1.8rem; + display: none !important; } .loading__spinner { @@ -3644,3 +3649,9 @@ details-disclosure > details { transform: translateX(100%) scaleX(0); } } + +.article-template__content, +.article-template__social-sharing, +.article-template__title { + @apply px-4; +} diff --git a/assets/component-article-card.css b/assets/component-article-card.css index 998f100cbe..63f9733135 100644 --- a/assets/component-article-card.css +++ b/assets/component-article-card.css @@ -48,6 +48,7 @@ .article-card .card__heading { margin-bottom: 0.6rem; + font-size: 2.4rem; } .blog-articles .article-card .card__information, @@ -76,6 +77,7 @@ .article-card__excerpt { width: 100%; margin-top: 1.2rem; + font-size: 1rem; } .article-card__link:not(:only-child) { diff --git a/assets/component-card.css b/assets/component-card.css index aa41a4f800..776858cd9f 100644 --- a/assets/component-card.css +++ b/assets/component-card.css @@ -286,6 +286,14 @@ align-self: flex-end; grid-row-start: 3; justify-self: flex-start; + display: flex; +} + +.card__badge.left { + align-self: flex-end; + grid-row-start: 3; + justify-self: flex-start; + display: flex; } .card__badge.top { @@ -303,7 +311,7 @@ .card__media .media img { height: 100%; - object-fit: cover; + object-fit: contain; object-position: center center; width: 100%; } diff --git a/assets/component-cart-drawer.css b/assets/component-cart-drawer.css index 94cab92376..e28614ae79 100644 --- a/assets/component-cart-drawer.css +++ b/assets/component-cart-drawer.css @@ -19,7 +19,7 @@ height: 100%; width: 40rem; max-width: calc(100vw - 3rem); - padding: 0 1.5rem; + padding: 0 1rem; border: 0.1rem solid rgba(var(--color-foreground), 0.2); border-right: 0; overflow: hidden; @@ -81,14 +81,16 @@ cart-drawer:not(.is-empty) .cart-drawer__collection { } .drawer__close { - display: inline-block; + display: flex; + justify-content: center; + align-items: center; padding: 0; - min-width: 4.4rem; - min-height: 4.4rem; + width: 1.5rem; + height: 1.5rem; box-shadow: 0 0 0 0.2rem rgba(var(--color-button), 0); position: absolute; - top: 10px; - right: -10px; + top: 1.5rem; + right: 1rem; color: rgb(var(--color-foreground)); background-color: transparent; border: none; @@ -255,10 +257,6 @@ cart-drawer-items { padding-top: 1.7rem; } -.cart-drawer .cart-item > td + td { - padding-left: 1rem; -} - .cart-drawer .cart-item__details { width: auto; grid-column: 2 / 4; diff --git a/assets/component-cart-items.css b/assets/component-cart-items.css index d2294b4e96..c8448e70ef 100644 --- a/assets/component-cart-items.css +++ b/assets/component-cart-items.css @@ -41,7 +41,7 @@ cart-items .title-wrapper-with-link { max-width: calc(10rem / var(--font-body-scale)); } -@media screen and (min-width: 750px) { +@media screen and (min-width: 1024px) { .cart-item__image { max-width: 100%; } @@ -110,7 +110,7 @@ cart-items .title-wrapper-with-link { } .product-option { - font-size: 1.4rem; + font-size: 1rem; word-break: break-word; line-height: calc(1 + 0.5 / var(--font-body-scale)); } @@ -120,12 +120,12 @@ cart-items .title-wrapper-with-link { margin-left: 1rem; } -@media screen and (min-width: 750px) and (max-width: 989px) { +/* @media screen and (min-width: 750px) and (max-width: 989px) { .cart-item cart-remove-button { width: 4.5rem; height: 4.5rem; } -} +} */ cart-remove-button .button { min-width: calc(4.5rem / var(--font-body-scale)); @@ -143,7 +143,7 @@ cart-remove-button .button:not([disabled]):hover { color: rgb(var(--color-foreground)); } -@media screen and (min-width: 750px) { +@media screen and (min-width: 1024px) { cart-remove-button .button { min-width: 3.5rem; min-height: 3.5rem; @@ -163,7 +163,7 @@ cart-remove-button .icon-remove { padding: 0; } -@media screen and (min-width: 750px) { +@media screen and (min-width: 1024px) { .cart-item .loading__spinner { right: 0; padding-top: 4.5rem; @@ -215,7 +215,7 @@ cart-remove-button .icon-remove { text-transform: uppercase; } -@media screen and (max-width: 749px) { +@media screen and (max-width: 1023px) { .cart-items, .cart-items thead, .cart-items tbody { @@ -232,8 +232,8 @@ cart-remove-button .icon-remove { .cart-item { display: grid; - grid-template: repeat(2, auto) / repeat(4, 1fr); - gap: 1.5rem; + /* grid-template: repeat(2, auto) / repeat(4, 1fr); */ + gap: 1rem; margin-bottom: 3.5rem; } @@ -253,18 +253,30 @@ cart-remove-button .icon-remove { grid-column: 2 / 5; } - .cart-item__quantity-wrapper { - flex-wrap: wrap; - } - .cart-item__totals { display: flex; align-items: flex-start; justify-content: flex-end; } + + quantity-input .quantity__button { + width: 45px; + } + + .quantity { + width: 140px; + } + + .quantity__input { + font-size: 1rem; + } + + .cart-item__image { + max-width: calc(6rem / var(--font-body-scale)); + } } -@media screen and (min-width: 750px) { +@media screen and (min-width: 1024px) { .cart-items { border-spacing: 0; border-collapse: separate; @@ -319,7 +331,7 @@ cart-remove-button .icon-remove { } } -@media screen and (min-width: 990px) { +/* @media screen and (min-width: 990px) { .cart-item .cart-item__quantity, .cart-items .cart-items__heading--wide { padding-left: 6rem; @@ -332,9 +344,9 @@ cart-remove-button .icon-remove { .cart-items thead th:first-child { width: 60%; } -} +} */ -@media screen and (min-width: 750px) { +@media screen and (min-width: 1024px) { .cart-items .cart-items__heading--quantity, .cart-item .cart-item__quantity, .cart-item__quantity--info quantity-popover > * { @@ -348,7 +360,7 @@ cart-remove-button .icon-remove { } } -@media screen and (max-width: 989px) { +@media screen and (max-width: 1023px) { .cart-items .quantity-popover__info-button { padding-left: 0; } diff --git a/assets/component-facets.css b/assets/component-facets.css index 0c2ebd88f7..91943eed8b 100644 --- a/assets/component-facets.css +++ b/assets/component-facets.css @@ -360,10 +360,12 @@ transition-property: outline-color, outline-width, box-shadow; transition-duration: var(--duration-short); transition-timing-function: ease; + font-size: 16px; } .facets-layout-grid--image .facet-checkbox__text { padding: 0.4rem; + font-size: 16px; } /* Active state */ @@ -441,7 +443,7 @@ } .facet-checkbox { - padding: 1rem 2rem 1rem 0; + padding: 0.5rem 2rem 0.5rem 0; flex-grow: 1; position: relative; font-size: 1.4rem; @@ -488,6 +490,7 @@ z-index: -1; appearance: none; -webkit-appearance: none; + font-size: 16px; } .facets-layout-grid input[type='checkbox'], @@ -518,9 +521,9 @@ .facet-checkbox .icon-checkmark { visibility: hidden; position: absolute; - left: 0.3rem; + left: 0.1rem; z-index: 5; - top: 1.4rem; + top: auto; } .facet-checkbox > input[type='checkbox']:checked ~ .icon-checkmark { @@ -590,7 +593,7 @@ span.active-facets__button-inner { color: rgb(var(--color-foreground)); box-shadow: 0 0 0 0.1rem rgb(var(--color-foreground)); border-radius: 2.6rem; - font-size: 1rem; + font-size: 0.75rem; min-height: 0; min-width: 0; padding: 0.5rem 1rem; @@ -621,7 +624,7 @@ span.active-facets__button-inner:after { .active-facets__button-wrapper *, span.active-facets__button-inner { - font-size: 1.4rem; + font-size: 0.75rem; } } @@ -824,7 +827,7 @@ a.active-facets__button.focused .active-facets__button-inner { .mobile-facets__count { color: rgba(var(--color-foreground), 0.7); - font-size: 1.3rem; + font-size: 1rem; margin: 0; flex-grow: 1; } @@ -910,7 +913,7 @@ details.menu-opening .mobile-facets__close svg { margin-top: 1.5rem; padding: 1.2rem 2.6rem; text-decoration: none; - + font-family: var(--font-heading-family); display: grid; grid-template-columns: min-content 1fr; text-align: start; @@ -958,6 +961,7 @@ details.menu-opening .mobile-facets__close svg { .mobile-facets__summary { padding: 1.3rem 2.5rem; + font-family: var(--font-heading-family); } .mobile-facets__summary svg { diff --git a/assets/component-pagination.css b/assets/component-pagination.css index 5232c3933d..5caf7d09b3 100644 --- a/assets/component-pagination.css +++ b/assets/component-pagination.css @@ -16,11 +16,11 @@ .pagination__list > li { flex: 1 0 4.4rem; - max-width: 4.4rem; + max-width: 2rem; } .pagination__list > li:not(:last-child) { - margin-right: 1rem; + margin-right: 0.7rem; } .pagination__item { diff --git a/assets/component-price.css b/assets/component-price.css index 17d6cf969b..1c04904193 100644 --- a/assets/component-price.css +++ b/assets/component-price.css @@ -1,8 +1,9 @@ .price { - font-size: 1.6rem; + font-size: 1rem; letter-spacing: 0.1rem; line-height: calc(1 + 0.5 / var(--font-body-scale)); color: rgb(var(--color-foreground)); + white-space: nowrap; } .price > * { @@ -38,9 +39,10 @@ } .price--large { - font-size: 1.6rem; - line-height: calc(1 + 0.5 / var(--font-body-scale)); + font-size: 1rem; + line-height: 1.2rem; letter-spacing: 0.13rem; + font-weight: 600; } @media screen and (min-width: 750px) { diff --git a/assets/component-totals.css b/assets/component-totals.css index 156c05b717..37ceeedb62 100644 --- a/assets/component-totals.css +++ b/assets/component-totals.css @@ -10,7 +10,7 @@ } .totals > h2 { - font-size: calc(var(--font-heading-scale) * 1.6rem); + font-size: calc(var(--font-heading-scale) * 1.2rem); } .totals * { @@ -26,7 +26,10 @@ } .totals__total-value { - font-size: 1.8rem; + font-size: 1.2rem; + white-space: nowrap; + color: black; + font-weight: 600; } .cart__ctas + .totals { diff --git a/assets/customer.css b/assets/customer.css index 9d831a9207..466f53190e 100644 --- a/assets/customer.css +++ b/assets/customer.css @@ -443,7 +443,7 @@ :is(.account, .order) p { margin: 0 0 2rem; - font-size: 1.6rem; + font-size: 1rem; } :is(.account, .order) h1 { diff --git a/assets/index.css b/assets/index.css new file mode 100644 index 0000000000..78a21fbac5 --- /dev/null +++ b/assets/index.css @@ -0,0 +1,278 @@ +:root { + font-family: var(--font-body-family); + line-height: 1.5; + font-weight: var(--font-body-weight); + font-size: var(--font-size-base); + color: hsla(var(--color-accent) / 1); + background-color: hsla(var(--color-surface) / 1); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; + padding: 0; + display: grid; + place-items: center; + min-height: 100vh; +} +a { + color: hsla(var(--color-accent) / 1); + text-decoration: none; +} +h1, +h2, +p { + margin: 0; + padding: 0; +} +h1 { + font-family: var(--font-heading-family); + font-size: calc(2.5 * var(--font-size-xl)); + line-height: 1.1; +} +button { + border-radius: 0.5rem; + border: 1px solid transparent; + padding: 0.75rem 1.5rem; + font-size: var(--font-size-base); + font-weight: 700; + font-family: var(--font-body-family); + background-color: hsla(var(--color-contrast) / 1); + color: hsla(var(--color-primary) / 1); + cursor: pointer; + margin: 2rem 0; +} +button:focus, +button:focus-visible { + outline: 4px auto hsla(var(--color-primary) / 1); +} +.container { + max-width: 800px; + margin: 0 auto; + padding: 0 2rem; +} +footer { + opacity: 0.6; +} +@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; +} +:host { + position: relative; + display: block; + margin-left: auto; + margin-right: auto; + z-index: 1; +} +.swiper { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; + display: block; +} +.swiper-vertical > .swiper-wrapper { + flex-direction: column; +} +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: transform; + transition-timing-function: var( + --swiper-wrapper-transition-timing-function, + initial + ); + box-sizing: content-box; +} +.swiper-android .swiper-slide, +.swiper-ios .swiper-slide, +.swiper-wrapper { + transform: translateZ(0); +} +.swiper-horizontal { + touch-action: pan-y; +} +.swiper-vertical { + touch-action: pan-x; +} +.swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + transition-property: transform; + display: block; +} +.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-css-mode .swiper-wrapper { + perspective: 1200px; +} +.swiper-3d .swiper-wrapper { + transform-style: preserve-3d; +} +.swiper-3d { + perspective: 1200px; +} +.swiper-3d .swiper-slide, +.swiper-3d .swiper-cube-shadow { + transform-style: preserve-3d; +} +.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-css-mode.swiper-horizontal > .swiper-wrapper { + scroll-snap-type: x mandatory; +} +.swiper-css-mode.swiper-vertical > .swiper-wrapper { + scroll-snap-type: y mandatory; +} +.swiper-css-mode.swiper-free-mode > .swiper-wrapper { + scroll-snap-type: none; +} +.swiper-css-mode.swiper-free-mode > .swiper-wrapper > .swiper-slide { + scroll-snap-align: none; +} +.swiper-css-mode.swiper-centered > .swiper-wrapper:before { + content: ''; + flex-shrink: 0; + order: 9999; +} +.swiper-css-mode.swiper-centered > .swiper-wrapper > .swiper-slide { + scroll-snap-align: center center; + scroll-snap-stop: always; +} +.swiper-css-mode.swiper-centered.swiper-horizontal + > .swiper-wrapper + > .swiper-slide:first-child { + margin-inline-start: var(--swiper-centered-offset-before); +} +.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper:before { + height: 100%; + min-height: 1px; + width: var(--swiper-centered-offset-after); +} +.swiper-css-mode.swiper-centered.swiper-vertical + > .swiper-wrapper + > .swiper-slide:first-child { + margin-block-start: var(--swiper-centered-offset-before); +} +.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper:before { + width: 100%; + min-width: 1px; + height: var(--swiper-centered-offset-after); +} +.swiper-3d .swiper-slide-shadow, +.swiper-3d .swiper-slide-shadow-left, +.swiper-3d .swiper-slide-shadow-right, +.swiper-3d .swiper-slide-shadow-top, +.swiper-3d .swiper-slide-shadow-bottom { + 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, 0.15); +} +.swiper-3d .swiper-slide-shadow-left { + background-image: linear-gradient( + to left, + rgba(0, 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, 0.5), + rgba(0, 0, 0, 0) + ); +} +.swiper-3d .swiper-slide-shadow-top { + background-image: linear-gradient( + to top, + rgba(0, 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, 0.5), + rgba(0, 0, 0, 0) + ); +} +.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:not(.swiper-watch-progress) .swiper-lazy-preloader, +.swiper-watch-progress .swiper-slide-visible .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(0); + } + to { + transform: rotate(360deg); + } +} diff --git a/assets/index.js b/assets/index.js new file mode 100644 index 0000000000..44b1db1f0c --- /dev/null +++ b/assets/index.js @@ -0,0 +1,4248 @@ +function me(s) { + return ( + s !== null && + typeof s == 'object' && + 'constructor' in s && + s.constructor === Object + ); +} +function fe(s, e) { + s === void 0 && (s = {}), + e === void 0 && (e = {}), + Object.keys(e).forEach((t) => { + typeof s[t] > 'u' + ? (s[t] = e[t]) + : me(e[t]) && + me(s[t]) && + Object.keys(e[t]).length > 0 && + fe(s[t], e[t]); + }); +} +const Se = { + body: {}, + addEventListener() {}, + removeEventListener() {}, + activeElement: { blur() {}, nodeName: '' }, + querySelector() { + return null; + }, + querySelectorAll() { + return []; + }, + getElementById() { + return null; + }, + createEvent() { + return { initEvent() {} }; + }, + createElement() { + return { + children: [], + childNodes: [], + style: {}, + setAttribute() {}, + getElementsByTagName() { + return []; + }, + }; + }, + createElementNS() { + return {}; + }, + importNode() { + return null; + }, + location: { + hash: '', + host: '', + hostname: '', + href: '', + origin: '', + pathname: '', + protocol: '', + search: '', + }, +}; +function R() { + const s = typeof document < 'u' ? document : {}; + return fe(s, Se), s; +} +const Ie = { + document: Se, + navigator: { userAgent: '' }, + location: { + hash: '', + host: '', + hostname: '', + href: '', + origin: '', + pathname: '', + protocol: '', + search: '', + }, + history: { replaceState() {}, pushState() {}, go() {}, back() {} }, + CustomEvent: function () { + return this; + }, + addEventListener() {}, + removeEventListener() {}, + getComputedStyle() { + return { + getPropertyValue() { + return ''; + }, + }; + }, + Image() {}, + Date() {}, + screen: {}, + setTimeout() {}, + clearTimeout() {}, + matchMedia() { + return {}; + }, + requestAnimationFrame(s) { + return typeof setTimeout > 'u' ? (s(), null) : setTimeout(s, 0); + }, + cancelAnimationFrame(s) { + typeof setTimeout > 'u' || clearTimeout(s); + }, +}; +function B() { + const s = typeof window < 'u' ? window : {}; + return fe(s, Ie), s; +} +function N(s) { + return ( + s === void 0 && (s = ''), + s + .trim() + .split(' ') + .filter((e) => !!e.trim()) + ); +} +function ze(s) { + const e = s; + Object.keys(e).forEach((t) => { + try { + e[t] = null; + } catch {} + try { + delete e[t]; + } catch {} + }); +} +function U(s, e) { + return e === void 0 && (e = 0), setTimeout(s, e); +} +function K() { + return Date.now(); +} +function Oe(s) { + const e = B(); + let t; + return ( + e.getComputedStyle && (t = e.getComputedStyle(s, null)), + !t && s.currentStyle && (t = s.currentStyle), + t || (t = s.style), + t + ); +} +function Ae(s, e) { + e === void 0 && (e = 'x'); + const t = B(); + let i, n, r; + const o = Oe(s); + return ( + t.WebKitCSSMatrix + ? ((n = o.transform || o.webkitTransform), + n.split(',').length > 6 && + (n = n + .split(', ') + .map((l) => l.replace(',', '.')) + .join(', ')), + (r = new t.WebKitCSSMatrix(n === 'none' ? '' : n))) + : ((r = + o.MozTransform || + o.OTransform || + o.MsTransform || + o.msTransform || + o.transform || + o + .getPropertyValue('transform') + .replace('translate(', 'matrix(1, 0, 0, 1,')), + (i = r.toString().split(','))), + e === 'x' && + (t.WebKitCSSMatrix + ? (n = r.m41) + : i.length === 16 + ? (n = parseFloat(i[12])) + : (n = parseFloat(i[4]))), + e === 'y' && + (t.WebKitCSSMatrix + ? (n = r.m42) + : i.length === 16 + ? (n = parseFloat(i[13])) + : (n = parseFloat(i[5]))), + n || 0 + ); +} +function j(s) { + return ( + typeof s == 'object' && + s !== null && + s.constructor && + Object.prototype.toString.call(s).slice(8, -1) === 'Object' + ); +} +function De(s) { + return typeof window < 'u' && typeof window.HTMLElement < 'u' + ? s instanceof HTMLElement + : s && (s.nodeType === 1 || s.nodeType === 11); +} +function $() { + const s = Object(arguments.length <= 0 ? void 0 : arguments[0]), + e = ['__proto__', 'constructor', 'prototype']; + for (let t = 1; t < arguments.length; t += 1) { + const i = t < 0 || arguments.length <= t ? void 0 : arguments[t]; + if (i != null && !De(i)) { + const n = Object.keys(Object(i)).filter((r) => e.indexOf(r) < 0); + for (let r = 0, o = n.length; r < o; r += 1) { + const l = n[r], + a = Object.getOwnPropertyDescriptor(i, l); + a !== void 0 && + a.enumerable && + (j(s[l]) && j(i[l]) + ? i[l].__swiper__ + ? (s[l] = i[l]) + : $(s[l], i[l]) + : !j(s[l]) && j(i[l]) + ? ((s[l] = {}), i[l].__swiper__ ? (s[l] = i[l]) : $(s[l], i[l])) + : (s[l] = i[l])); + } + } + } + return s; +} +function Y(s, e, t) { + s.style.setProperty(e, t); +} +function ye(s) { + let { swiper: e, targetPosition: t, side: i } = s; + const n = B(), + r = -e.translate; + let o = null, + l; + const a = e.params.speed; + (e.wrapperEl.style.scrollSnapType = 'none'), + n.cancelAnimationFrame(e.cssModeFrameID); + const u = t > r ? 'next' : 'prev', + f = (g, m) => (u === 'next' && g >= m) || (u === 'prev' && g <= m), + p = () => { + (l = new Date().getTime()), o === null && (o = l); + const g = Math.max(Math.min((l - o) / a, 1), 0), + m = 0.5 - Math.cos(g * Math.PI) / 2; + let h = r + m * (t - r); + if ((f(h, t) && (h = t), e.wrapperEl.scrollTo({ [i]: h }), f(h, t))) { + (e.wrapperEl.style.overflow = 'hidden'), + (e.wrapperEl.style.scrollSnapType = ''), + setTimeout(() => { + (e.wrapperEl.style.overflow = ''), e.wrapperEl.scrollTo({ [i]: h }); + }), + n.cancelAnimationFrame(e.cssModeFrameID); + return; + } + e.cssModeFrameID = n.requestAnimationFrame(p); + }; + p(); +} +function H(s, e) { + e === void 0 && (e = ''); + const t = [...s.children]; + return ( + s instanceof HTMLSlotElement && t.push(...s.assignedElements()), + e ? t.filter((i) => i.matches(e)) : t + ); +} +function ke(s, e) { + const t = e.contains(s); + return !t && e instanceof HTMLSlotElement + ? [...e.assignedElements()].includes(s) + : t; +} +function J(s) { + try { + console.warn(s); + return; + } catch {} +} +function q(s, e) { + e === void 0 && (e = []); + const t = document.createElement(s); + return t.classList.add(...(Array.isArray(e) ? e : N(e))), t; +} +function Ge(s) { + const e = B(), + t = R(), + i = s.getBoundingClientRect(), + n = t.body, + r = s.clientTop || n.clientTop || 0, + o = s.clientLeft || n.clientLeft || 0, + l = s === e ? e.scrollY : s.scrollTop, + a = s === e ? e.scrollX : s.scrollLeft; + return { top: i.top + l - r, left: i.left + a - o }; +} +function Be(s, e) { + const t = []; + for (; s.previousElementSibling; ) { + const i = s.previousElementSibling; + e ? i.matches(e) && t.push(i) : t.push(i), (s = i); + } + return t; +} +function $e(s, e) { + const t = []; + for (; s.nextElementSibling; ) { + const i = s.nextElementSibling; + e ? i.matches(e) && t.push(i) : t.push(i), (s = i); + } + return t; +} +function _(s, e) { + return B().getComputedStyle(s, null).getPropertyValue(e); +} +function Q(s) { + let e = s, + t; + if (e) { + for (t = 0; (e = e.previousSibling) !== null; ) + e.nodeType === 1 && (t += 1); + return t; + } +} +function Te(s, e) { + const t = []; + let i = s.parentElement; + for (; i; ) e ? i.matches(e) && t.push(i) : t.push(i), (i = i.parentElement); + return t; +} +function ae(s, e, t) { + const i = B(); + return t + ? s[e === 'width' ? 'offsetWidth' : 'offsetHeight'] + + parseFloat( + i + .getComputedStyle(s, null) + .getPropertyValue(e === 'width' ? 'margin-right' : 'margin-top'), + ) + + parseFloat( + i + .getComputedStyle(s, null) + .getPropertyValue(e === 'width' ? 'margin-left' : 'margin-bottom'), + ) + : s.offsetWidth; +} +function k(s) { + return (Array.isArray(s) ? s : [s]).filter((e) => !!e); +} +let Z; +function Ve() { + const s = B(), + e = R(); + return { + smoothScroll: + e.documentElement && + e.documentElement.style && + 'scrollBehavior' in e.documentElement.style, + touch: !!( + 'ontouchstart' in s || + (s.DocumentTouch && e instanceof s.DocumentTouch) + ), + }; +} +function xe() { + return Z || (Z = Ve()), Z; +} +let ee; +function Fe(s) { + let { userAgent: e } = s === void 0 ? {} : s; + const t = xe(), + i = B(), + n = i.navigator.platform, + r = e || i.navigator.userAgent, + o = { ios: !1, android: !1 }, + l = i.screen.width, + a = i.screen.height, + u = r.match(/(Android);?[\s\/]+([\d.]+)?/); + let f = r.match(/(iPad).*OS\s([\d_]+)/); + const p = r.match(/(iPod)(.*OS\s([\d_]+))?/), + g = !f && r.match(/(iPhone\sOS|iOS)\s([\d_]+)/), + m = n === 'Win32'; + let h = n === 'MacIntel'; + const v = [ + '1024x1366', + '1366x1024', + '834x1194', + '1194x834', + '834x1112', + '1112x834', + '768x1024', + '1024x768', + '820x1180', + '1180x820', + '810x1080', + '1080x810', + ]; + return ( + !f && + h && + t.touch && + v.indexOf(`${l}x${a}`) >= 0 && + ((f = r.match(/(Version)\/([\d.]+)/)), + f || (f = [0, 1, '13_0_0']), + (h = !1)), + u && !m && ((o.os = 'android'), (o.android = !0)), + (f || g || p) && ((o.os = 'ios'), (o.ios = !0)), + o + ); +} +function Ee(s) { + return s === void 0 && (s = {}), ee || (ee = Fe(s)), ee; +} +let te; +function He() { + const s = B(), + e = Ee(); + let t = !1; + function i() { + const l = s.navigator.userAgent.toLowerCase(); + return ( + l.indexOf('safari') >= 0 && + l.indexOf('chrome') < 0 && + l.indexOf('android') < 0 + ); + } + if (i()) { + const l = String(s.navigator.userAgent); + if (l.includes('Version/')) { + const [a, u] = l + .split('Version/')[1] + .split(' ')[0] + .split('.') + .map((f) => Number(f)); + t = a < 16 || (a === 16 && u < 2); + } + } + const n = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test( + s.navigator.userAgent, + ), + r = i(), + o = r || (n && e.ios); + return { + isSafari: t || r, + needPerspectiveFix: t, + need3dFix: o, + isWebView: n, + }; +} +function Ne() { + return te || (te = He()), te; +} +function _e(s) { + let { swiper: e, on: t, emit: i } = s; + const n = B(); + let r = null, + o = null; + const l = () => { + !e || e.destroyed || !e.initialized || (i('beforeResize'), i('resize')); + }, + a = () => { + !e || + e.destroyed || + !e.initialized || + ((r = new ResizeObserver((p) => { + o = n.requestAnimationFrame(() => { + const { width: g, height: m } = e; + let h = g, + v = m; + p.forEach((E) => { + let { contentBoxSize: y, contentRect: d, target: c } = E; + (c && c !== e.el) || + ((h = d ? d.width : (y[0] || y).inlineSize), + (v = d ? d.height : (y[0] || y).blockSize)); + }), + (h !== g || v !== m) && l(); + }); + })), + r.observe(e.el)); + }, + u = () => { + o && n.cancelAnimationFrame(o), + r && r.unobserve && e.el && (r.unobserve(e.el), (r = null)); + }, + f = () => { + !e || e.destroyed || !e.initialized || i('orientationchange'); + }; + t('init', () => { + if (e.params.resizeObserver && typeof n.ResizeObserver < 'u') { + a(); + return; + } + n.addEventListener('resize', l), n.addEventListener('orientationchange', f); + }), + t('destroy', () => { + u(), + n.removeEventListener('resize', l), + n.removeEventListener('orientationchange', f); + }); +} +function Re(s) { + let { swiper: e, extendParams: t, on: i, emit: n } = s; + const r = [], + o = B(), + l = function (f, p) { + p === void 0 && (p = {}); + const g = o.MutationObserver || o.WebkitMutationObserver, + m = new g((h) => { + if (e.__preventObserver__) return; + if (h.length === 1) { + n('observerUpdate', h[0]); + return; + } + const v = function () { + n('observerUpdate', h[0]); + }; + o.requestAnimationFrame + ? o.requestAnimationFrame(v) + : o.setTimeout(v, 0); + }); + m.observe(f, { + attributes: typeof p.attributes > 'u' ? !0 : p.attributes, + childList: e.isElement || (typeof p.childList > 'u' ? !0 : p).childList, + characterData: typeof p.characterData > 'u' ? !0 : p.characterData, + }), + r.push(m); + }, + a = () => { + if (e.params.observer) { + if (e.params.observeParents) { + const f = Te(e.hostEl); + for (let p = 0; p < f.length; p += 1) l(f[p]); + } + l(e.hostEl, { childList: e.params.observeSlideChildren }), + l(e.wrapperEl, { attributes: !1 }); + } + }, + u = () => { + r.forEach((f) => { + f.disconnect(); + }), + r.splice(0, r.length); + }; + t({ observer: !1, observeParents: !1, observeSlideChildren: !1 }), + i('init', a), + i('destroy', u); +} +var We = { + on(s, e, t) { + const i = this; + if (!i.eventsListeners || i.destroyed || typeof e != 'function') return i; + const n = t ? 'unshift' : 'push'; + return ( + s.split(' ').forEach((r) => { + i.eventsListeners[r] || (i.eventsListeners[r] = []), + i.eventsListeners[r][n](e); + }), + i + ); + }, + once(s, e, t) { + const i = this; + if (!i.eventsListeners || i.destroyed || typeof e != 'function') return i; + function n() { + i.off(s, n), n.__emitterProxy && delete n.__emitterProxy; + for (var r = arguments.length, o = new Array(r), l = 0; l < r; l++) + o[l] = arguments[l]; + e.apply(i, o); + } + return (n.__emitterProxy = e), i.on(s, n, t); + }, + onAny(s, e) { + const t = this; + if (!t.eventsListeners || t.destroyed || typeof s != 'function') return t; + const i = e ? 'unshift' : 'push'; + return t.eventsAnyListeners.indexOf(s) < 0 && t.eventsAnyListeners[i](s), t; + }, + offAny(s) { + const e = this; + if (!e.eventsListeners || e.destroyed || !e.eventsAnyListeners) return e; + const t = e.eventsAnyListeners.indexOf(s); + return t >= 0 && e.eventsAnyListeners.splice(t, 1), e; + }, + off(s, e) { + const t = this; + return ( + !t.eventsListeners || + t.destroyed || + !t.eventsListeners || + s.split(' ').forEach((i) => { + typeof e > 'u' + ? (t.eventsListeners[i] = []) + : t.eventsListeners[i] && + t.eventsListeners[i].forEach((n, r) => { + (n === e || (n.__emitterProxy && n.__emitterProxy === e)) && + t.eventsListeners[i].splice(r, 1); + }); + }), + t + ); + }, + emit() { + const s = this; + if (!s.eventsListeners || s.destroyed || !s.eventsListeners) return s; + let e, t, i; + for (var n = arguments.length, r = new Array(n), o = 0; o < n; o++) + r[o] = arguments[o]; + return ( + typeof r[0] == 'string' || Array.isArray(r[0]) + ? ((e = r[0]), (t = r.slice(1, r.length)), (i = s)) + : ((e = r[0].events), (t = r[0].data), (i = r[0].context || s)), + t.unshift(i), + (Array.isArray(e) ? e : e.split(' ')).forEach((a) => { + s.eventsAnyListeners && + s.eventsAnyListeners.length && + s.eventsAnyListeners.forEach((u) => { + u.apply(i, [a, ...t]); + }), + s.eventsListeners && + s.eventsListeners[a] && + s.eventsListeners[a].forEach((u) => { + u.apply(i, t); + }); + }), + s + ); + }, +}; +function qe() { + const s = this; + let e, t; + const i = s.el; + typeof s.params.width < 'u' && s.params.width !== null + ? (e = s.params.width) + : (e = i.clientWidth), + typeof s.params.height < 'u' && s.params.height !== null + ? (t = s.params.height) + : (t = i.clientHeight), + !((e === 0 && s.isHorizontal()) || (t === 0 && s.isVertical())) && + ((e = + e - + parseInt(_(i, 'padding-left') || 0, 10) - + parseInt(_(i, 'padding-right') || 0, 10)), + (t = + t - + parseInt(_(i, 'padding-top') || 0, 10) - + parseInt(_(i, 'padding-bottom') || 0, 10)), + Number.isNaN(e) && (e = 0), + Number.isNaN(t) && (t = 0), + Object.assign(s, { + width: e, + height: t, + size: s.isHorizontal() ? e : t, + })); +} +function je() { + const s = this; + function e(C, P) { + return parseFloat(C.getPropertyValue(s.getDirectionLabel(P)) || 0); + } + const t = s.params, + { wrapperEl: i, slidesEl: n, size: r, rtlTranslate: o, wrongRTL: l } = s, + a = s.virtual && t.virtual.enabled, + u = a ? s.virtual.slides.length : s.slides.length, + f = H(n, `.${s.params.slideClass}, swiper-slide`), + p = a ? s.virtual.slides.length : f.length; + let g = []; + const m = [], + h = []; + let v = t.slidesOffsetBefore; + typeof v == 'function' && (v = t.slidesOffsetBefore.call(s)); + let E = t.slidesOffsetAfter; + typeof E == 'function' && (E = t.slidesOffsetAfter.call(s)); + const y = s.snapGrid.length, + d = s.slidesGrid.length; + let c = t.spaceBetween, + w = -v, + b = 0, + L = 0; + if (typeof r > 'u') return; + typeof c == 'string' && c.indexOf('%') >= 0 + ? (c = (parseFloat(c.replace('%', '')) / 100) * r) + : typeof c == 'string' && (c = parseFloat(c)), + (s.virtualSize = -c), + f.forEach((C) => { + o ? (C.style.marginLeft = '') : (C.style.marginRight = ''), + (C.style.marginBottom = ''), + (C.style.marginTop = ''); + }), + t.centeredSlides && + t.cssMode && + (Y(i, '--swiper-centered-offset-before', ''), + Y(i, '--swiper-centered-offset-after', '')); + const A = t.grid && t.grid.rows > 1 && s.grid; + A ? s.grid.initSlides(f) : s.grid && s.grid.unsetSlides(); + let z; + const O = + t.slidesPerView === 'auto' && + t.breakpoints && + Object.keys(t.breakpoints).filter( + (C) => typeof t.breakpoints[C].slidesPerView < 'u', + ).length > 0; + for (let C = 0; C < p; C += 1) { + z = 0; + let P; + if ( + (f[C] && (P = f[C]), + A && s.grid.updateSlide(C, P, f), + !(f[C] && _(P, 'display') === 'none')) + ) { + if (t.slidesPerView === 'auto') { + O && (f[C].style[s.getDirectionLabel('width')] = ''); + const T = getComputedStyle(P), + S = P.style.transform, + x = P.style.webkitTransform; + if ( + (S && (P.style.transform = 'none'), + x && (P.style.webkitTransform = 'none'), + t.roundLengths) + ) + z = s.isHorizontal() ? ae(P, 'width', !0) : ae(P, 'height', !0); + else { + const M = e(T, 'width'), + I = e(T, 'padding-left'), + V = e(T, 'padding-right'), + F = e(T, 'margin-left'), + D = e(T, 'margin-right'), + pe = T.getPropertyValue('box-sizing'); + if (pe && pe === 'border-box') z = M + F + D; + else { + const { clientWidth: Pe, offsetWidth: Le } = P; + z = M + I + V + F + D + (Le - Pe); + } + } + S && (P.style.transform = S), + x && (P.style.webkitTransform = x), + t.roundLengths && (z = Math.floor(z)); + } else + (z = (r - (t.slidesPerView - 1) * c) / t.slidesPerView), + t.roundLengths && (z = Math.floor(z)), + f[C] && (f[C].style[s.getDirectionLabel('width')] = `${z}px`); + f[C] && (f[C].swiperSlideSize = z), + h.push(z), + t.centeredSlides + ? ((w = w + z / 2 + b / 2 + c), + b === 0 && C !== 0 && (w = w - r / 2 - c), + C === 0 && (w = w - r / 2 - c), + Math.abs(w) < 1 / 1e3 && (w = 0), + t.roundLengths && (w = Math.floor(w)), + L % t.slidesPerGroup === 0 && g.push(w), + m.push(w)) + : (t.roundLengths && (w = Math.floor(w)), + (L - Math.min(s.params.slidesPerGroupSkip, L)) % + s.params.slidesPerGroup === + 0 && g.push(w), + m.push(w), + (w = w + z + c)), + (s.virtualSize += z + c), + (b = z), + (L += 1); + } + } + if ( + ((s.virtualSize = Math.max(s.virtualSize, r) + E), + o && + l && + (t.effect === 'slide' || t.effect === 'coverflow') && + (i.style.width = `${s.virtualSize + c}px`), + t.setWrapperSize && + (i.style[s.getDirectionLabel('width')] = `${s.virtualSize + c}px`), + A && s.grid.updateWrapperSize(z, g), + !t.centeredSlides) + ) { + const C = []; + for (let P = 0; P < g.length; P += 1) { + let T = g[P]; + t.roundLengths && (T = Math.floor(T)), + g[P] <= s.virtualSize - r && C.push(T); + } + (g = C), + Math.floor(s.virtualSize - r) - Math.floor(g[g.length - 1]) > 1 && + g.push(s.virtualSize - r); + } + if (a && t.loop) { + const C = h[0] + c; + if (t.slidesPerGroup > 1) { + const P = Math.ceil( + (s.virtual.slidesBefore + s.virtual.slidesAfter) / t.slidesPerGroup, + ), + T = C * t.slidesPerGroup; + for (let S = 0; S < P; S += 1) g.push(g[g.length - 1] + T); + } + for (let P = 0; P < s.virtual.slidesBefore + s.virtual.slidesAfter; P += 1) + t.slidesPerGroup === 1 && g.push(g[g.length - 1] + C), + m.push(m[m.length - 1] + C), + (s.virtualSize += C); + } + if ((g.length === 0 && (g = [0]), c !== 0)) { + const C = + s.isHorizontal() && o ? 'marginLeft' : s.getDirectionLabel('marginRight'); + f.filter((P, T) => + !t.cssMode || t.loop ? !0 : T !== f.length - 1, + ).forEach((P) => { + P.style[C] = `${c}px`; + }); + } + if (t.centeredSlides && t.centeredSlidesBounds) { + let C = 0; + h.forEach((T) => { + C += T + (c || 0); + }), + (C -= c); + const P = C > r ? C - r : 0; + g = g.map((T) => (T <= 0 ? -v : T > P ? P + E : T)); + } + if (t.centerInsufficientSlides) { + let C = 0; + h.forEach((T) => { + C += T + (c || 0); + }), + (C -= c); + const P = (t.slidesOffsetBefore || 0) + (t.slidesOffsetAfter || 0); + if (C + P < r) { + const T = (r - C - P) / 2; + g.forEach((S, x) => { + g[x] = S - T; + }), + m.forEach((S, x) => { + m[x] = S + T; + }); + } + } + if ( + (Object.assign(s, { + slides: f, + snapGrid: g, + slidesGrid: m, + slidesSizesGrid: h, + }), + t.centeredSlides && t.cssMode && !t.centeredSlidesBounds) + ) { + Y(i, '--swiper-centered-offset-before', `${-g[0]}px`), + Y( + i, + '--swiper-centered-offset-after', + `${s.size / 2 - h[h.length - 1] / 2}px`, + ); + const C = -s.snapGrid[0], + P = -s.slidesGrid[0]; + (s.snapGrid = s.snapGrid.map((T) => T + C)), + (s.slidesGrid = s.slidesGrid.map((T) => T + P)); + } + if ( + (p !== u && s.emit('slidesLengthChange'), + g.length !== y && + (s.params.watchOverflow && s.checkOverflow(), + s.emit('snapGridLengthChange')), + m.length !== d && s.emit('slidesGridLengthChange'), + t.watchSlidesProgress && s.updateSlidesOffset(), + s.emit('slidesUpdated'), + !a && !t.cssMode && (t.effect === 'slide' || t.effect === 'fade')) + ) { + const C = `${t.containerModifierClass}backface-hidden`, + P = s.el.classList.contains(C); + p <= t.maxBackfaceHiddenSlides + ? P || s.el.classList.add(C) + : P && s.el.classList.remove(C); + } +} +function Ye(s) { + const e = this, + t = [], + i = e.virtual && e.params.virtual.enabled; + let n = 0, + r; + typeof s == 'number' + ? e.setTransition(s) + : s === !0 && e.setTransition(e.params.speed); + const o = (l) => (i ? e.slides[e.getSlideIndexByData(l)] : e.slides[l]); + if (e.params.slidesPerView !== 'auto' && e.params.slidesPerView > 1) + if (e.params.centeredSlides) + (e.visibleSlides || []).forEach((l) => { + t.push(l); + }); + else + for (r = 0; r < Math.ceil(e.params.slidesPerView); r += 1) { + const l = e.activeIndex + r; + if (l > e.slides.length && !i) break; + t.push(o(l)); + } + else t.push(o(e.activeIndex)); + for (r = 0; r < t.length; r += 1) + if (typeof t[r] < 'u') { + const l = t[r].offsetHeight; + n = l > n ? l : n; + } + (n || n === 0) && (e.wrapperEl.style.height = `${n}px`); +} +function Xe() { + const s = this, + e = s.slides, + t = s.isElement + ? s.isHorizontal() + ? s.wrapperEl.offsetLeft + : s.wrapperEl.offsetTop + : 0; + for (let i = 0; i < e.length; i += 1) + e[i].swiperSlideOffset = + (s.isHorizontal() ? e[i].offsetLeft : e[i].offsetTop) - + t - + s.cssOverflowAdjustment(); +} +const he = (s, e, t) => { + e && !s.classList.contains(t) + ? s.classList.add(t) + : !e && s.classList.contains(t) && s.classList.remove(t); +}; +function Ue(s) { + s === void 0 && (s = (this && this.translate) || 0); + const e = this, + t = e.params, + { slides: i, rtlTranslate: n, snapGrid: r } = e; + if (i.length === 0) return; + typeof i[0].swiperSlideOffset > 'u' && e.updateSlidesOffset(); + let o = -s; + n && (o = s), (e.visibleSlidesIndexes = []), (e.visibleSlides = []); + let l = t.spaceBetween; + typeof l == 'string' && l.indexOf('%') >= 0 + ? (l = (parseFloat(l.replace('%', '')) / 100) * e.size) + : typeof l == 'string' && (l = parseFloat(l)); + for (let a = 0; a < i.length; a += 1) { + const u = i[a]; + let f = u.swiperSlideOffset; + t.cssMode && t.centeredSlides && (f -= i[0].swiperSlideOffset); + const p = + (o + (t.centeredSlides ? e.minTranslate() : 0) - f) / + (u.swiperSlideSize + l), + g = + (o - r[0] + (t.centeredSlides ? e.minTranslate() : 0) - f) / + (u.swiperSlideSize + l), + m = -(o - f), + h = m + e.slidesSizesGrid[a], + v = m >= 0 && m <= e.size - e.slidesSizesGrid[a], + E = + (m >= 0 && m < e.size - 1) || + (h > 1 && h <= e.size) || + (m <= 0 && h >= e.size); + E && (e.visibleSlides.push(u), e.visibleSlidesIndexes.push(a)), + he(u, E, t.slideVisibleClass), + he(u, v, t.slideFullyVisibleClass), + (u.progress = n ? -p : p), + (u.originalProgress = n ? -g : g); + } +} +function Ke(s) { + const e = this; + if (typeof s > 'u') { + const f = e.rtlTranslate ? -1 : 1; + s = (e && e.translate && e.translate * f) || 0; + } + const t = e.params, + i = e.maxTranslate() - e.minTranslate(); + let { progress: n, isBeginning: r, isEnd: o, progressLoop: l } = e; + const a = r, + u = o; + if (i === 0) (n = 0), (r = !0), (o = !0); + else { + n = (s - e.minTranslate()) / i; + const f = Math.abs(s - e.minTranslate()) < 1, + p = Math.abs(s - e.maxTranslate()) < 1; + (r = f || n <= 0), (o = p || n >= 1), f && (n = 0), p && (n = 1); + } + if (t.loop) { + const f = e.getSlideIndexByData(0), + p = e.getSlideIndexByData(e.slides.length - 1), + g = e.slidesGrid[f], + m = e.slidesGrid[p], + h = e.slidesGrid[e.slidesGrid.length - 1], + v = Math.abs(s); + v >= g ? (l = (v - g) / h) : (l = (v + h - m) / h), l > 1 && (l -= 1); + } + Object.assign(e, { progress: n, progressLoop: l, isBeginning: r, isEnd: o }), + (t.watchSlidesProgress || (t.centeredSlides && t.autoHeight)) && + e.updateSlidesProgress(s), + r && !a && e.emit('reachBeginning toEdge'), + o && !u && e.emit('reachEnd toEdge'), + ((a && !r) || (u && !o)) && e.emit('fromEdge'), + e.emit('progress', n); +} +const se = (s, e, t) => { + e && !s.classList.contains(t) + ? s.classList.add(t) + : !e && s.classList.contains(t) && s.classList.remove(t); +}; +function Je() { + const s = this, + { slides: e, params: t, slidesEl: i, activeIndex: n } = s, + r = s.virtual && t.virtual.enabled, + o = s.grid && t.grid && t.grid.rows > 1, + l = (p) => H(i, `.${t.slideClass}${p}, swiper-slide${p}`)[0]; + let a, u, f; + if (r) + if (t.loop) { + let p = n - s.virtual.slidesBefore; + p < 0 && (p = s.virtual.slides.length + p), + p >= s.virtual.slides.length && (p -= s.virtual.slides.length), + (a = l(`[data-swiper-slide-index="${p}"]`)); + } else a = l(`[data-swiper-slide-index="${n}"]`); + else + o + ? ((a = e.filter((p) => p.column === n)[0]), + (f = e.filter((p) => p.column === n + 1)[0]), + (u = e.filter((p) => p.column === n - 1)[0])) + : (a = e[n]); + a && + (o || + ((f = $e(a, `.${t.slideClass}, swiper-slide`)[0]), + t.loop && !f && (f = e[0]), + (u = Be(a, `.${t.slideClass}, swiper-slide`)[0]), + t.loop && !u === 0 && (u = e[e.length - 1]))), + e.forEach((p) => { + se(p, p === a, t.slideActiveClass), + se(p, p === f, t.slideNextClass), + se(p, p === u, t.slidePrevClass); + }), + s.emitSlidesClasses(); +} +const X = (s, e) => { + if (!s || s.destroyed || !s.params) return; + const t = () => (s.isElement ? 'swiper-slide' : `.${s.params.slideClass}`), + i = e.closest(t()); + if (i) { + let n = i.querySelector(`.${s.params.lazyPreloaderClass}`); + !n && + s.isElement && + (i.shadowRoot + ? (n = i.shadowRoot.querySelector(`.${s.params.lazyPreloaderClass}`)) + : requestAnimationFrame(() => { + i.shadowRoot && + ((n = i.shadowRoot.querySelector( + `.${s.params.lazyPreloaderClass}`, + )), + n && n.remove()); + })), + n && n.remove(); + } + }, + ie = (s, e) => { + if (!s.slides[e]) return; + const t = s.slides[e].querySelector('[loading="lazy"]'); + t && t.removeAttribute('loading'); + }, + le = (s) => { + if (!s || s.destroyed || !s.params) return; + let e = s.params.lazyPreloadPrevNext; + const t = s.slides.length; + if (!t || !e || e < 0) return; + e = Math.min(e, t); + const i = + s.params.slidesPerView === 'auto' + ? s.slidesPerViewDynamic() + : Math.ceil(s.params.slidesPerView), + n = s.activeIndex; + if (s.params.grid && s.params.grid.rows > 1) { + const o = n, + l = [o - e]; + l.push(...Array.from({ length: e }).map((a, u) => o + i + u)), + s.slides.forEach((a, u) => { + l.includes(a.column) && ie(s, u); + }); + return; + } + const r = n + i - 1; + if (s.params.rewind || s.params.loop) + for (let o = n - e; o <= r + e; o += 1) { + const l = ((o % t) + t) % t; + (l < n || l > r) && ie(s, l); + } + else + for (let o = Math.max(n - e, 0); o <= Math.min(r + e, t - 1); o += 1) + o !== n && (o > r || o < n) && ie(s, o); + }; +function Qe(s) { + const { slidesGrid: e, params: t } = s, + i = s.rtlTranslate ? s.translate : -s.translate; + let n; + for (let r = 0; r < e.length; r += 1) + typeof e[r + 1] < 'u' + ? i >= e[r] && i < e[r + 1] - (e[r + 1] - e[r]) / 2 + ? (n = r) + : i >= e[r] && i < e[r + 1] && (n = r + 1) + : i >= e[r] && (n = r); + return t.normalizeSlideIndex && (n < 0 || typeof n > 'u') && (n = 0), n; +} +function Ze(s) { + const e = this, + t = e.rtlTranslate ? e.translate : -e.translate, + { snapGrid: i, params: n, activeIndex: r, realIndex: o, snapIndex: l } = e; + let a = s, + u; + const f = (m) => { + let h = m - e.virtual.slidesBefore; + return ( + h < 0 && (h = e.virtual.slides.length + h), + h >= e.virtual.slides.length && (h -= e.virtual.slides.length), + h + ); + }; + if ((typeof a > 'u' && (a = Qe(e)), i.indexOf(t) >= 0)) u = i.indexOf(t); + else { + const m = Math.min(n.slidesPerGroupSkip, a); + u = m + Math.floor((a - m) / n.slidesPerGroup); + } + if ((u >= i.length && (u = i.length - 1), a === r && !e.params.loop)) { + u !== l && ((e.snapIndex = u), e.emit('snapIndexChange')); + return; + } + if (a === r && e.params.loop && e.virtual && e.params.virtual.enabled) { + e.realIndex = f(a); + return; + } + const p = e.grid && n.grid && n.grid.rows > 1; + let g; + if (e.virtual && n.virtual.enabled && n.loop) g = f(a); + else if (p) { + const m = e.slides.filter((v) => v.column === a)[0]; + let h = parseInt(m.getAttribute('data-swiper-slide-index'), 10); + Number.isNaN(h) && (h = Math.max(e.slides.indexOf(m), 0)), + (g = Math.floor(h / n.grid.rows)); + } else if (e.slides[a]) { + const m = e.slides[a].getAttribute('data-swiper-slide-index'); + m ? (g = parseInt(m, 10)) : (g = a); + } else g = a; + Object.assign(e, { + previousSnapIndex: l, + snapIndex: u, + previousRealIndex: o, + realIndex: g, + previousIndex: r, + activeIndex: a, + }), + e.initialized && le(e), + e.emit('activeIndexChange'), + e.emit('snapIndexChange'), + (e.initialized || e.params.runCallbacksOnInit) && + (o !== g && e.emit('realIndexChange'), e.emit('slideChange')); +} +function et(s, e) { + const t = this, + i = t.params; + let n = s.closest(`.${i.slideClass}, swiper-slide`); + !n && + t.isElement && + e && + e.length > 1 && + e.includes(s) && + [...e.slice(e.indexOf(s) + 1, e.length)].forEach((l) => { + !n && l.matches && l.matches(`.${i.slideClass}, swiper-slide`) && (n = l); + }); + let r = !1, + o; + if (n) { + for (let l = 0; l < t.slides.length; l += 1) + if (t.slides[l] === n) { + (r = !0), (o = l); + break; + } + } + if (n && r) + (t.clickedSlide = n), + t.virtual && t.params.virtual.enabled + ? (t.clickedIndex = parseInt( + n.getAttribute('data-swiper-slide-index'), + 10, + )) + : (t.clickedIndex = o); + else { + (t.clickedSlide = void 0), (t.clickedIndex = void 0); + return; + } + i.slideToClickedSlide && + t.clickedIndex !== void 0 && + t.clickedIndex !== t.activeIndex && + t.slideToClickedSlide(); +} +var tt = { + updateSize: qe, + updateSlides: je, + updateAutoHeight: Ye, + updateSlidesOffset: Xe, + updateSlidesProgress: Ue, + updateProgress: Ke, + updateSlidesClasses: Je, + updateActiveIndex: Ze, + updateClickedSlide: et, +}; +function st(s) { + s === void 0 && (s = this.isHorizontal() ? 'x' : 'y'); + const e = this, + { params: t, rtlTranslate: i, translate: n, wrapperEl: r } = e; + if (t.virtualTranslate) return i ? -n : n; + if (t.cssMode) return n; + let o = Ae(r, s); + return (o += e.cssOverflowAdjustment()), i && (o = -o), o || 0; +} +function it(s, e) { + const t = this, + { rtlTranslate: i, params: n, wrapperEl: r, progress: o } = t; + let l = 0, + a = 0; + const u = 0; + t.isHorizontal() ? (l = i ? -s : s) : (a = s), + n.roundLengths && ((l = Math.floor(l)), (a = Math.floor(a))), + (t.previousTranslate = t.translate), + (t.translate = t.isHorizontal() ? l : a), + n.cssMode + ? (r[t.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = t.isHorizontal() + ? -l + : -a) + : n.virtualTranslate || + (t.isHorizontal() + ? (l -= t.cssOverflowAdjustment()) + : (a -= t.cssOverflowAdjustment()), + (r.style.transform = `translate3d(${l}px, ${a}px, ${u}px)`)); + let f; + const p = t.maxTranslate() - t.minTranslate(); + p === 0 ? (f = 0) : (f = (s - t.minTranslate()) / p), + f !== o && t.updateProgress(s), + t.emit('setTranslate', t.translate, e); +} +function rt() { + return -this.snapGrid[0]; +} +function nt() { + return -this.snapGrid[this.snapGrid.length - 1]; +} +function at(s, e, t, i, n) { + s === void 0 && (s = 0), + e === void 0 && (e = this.params.speed), + t === void 0 && (t = !0), + i === void 0 && (i = !0); + const r = this, + { params: o, wrapperEl: l } = r; + if (r.animating && o.preventInteractionOnTransition) return !1; + const a = r.minTranslate(), + u = r.maxTranslate(); + let f; + if ( + (i && s > a ? (f = a) : i && s < u ? (f = u) : (f = s), + r.updateProgress(f), + o.cssMode) + ) { + const p = r.isHorizontal(); + if (e === 0) l[p ? 'scrollLeft' : 'scrollTop'] = -f; + else { + if (!r.support.smoothScroll) + return ( + ye({ swiper: r, targetPosition: -f, side: p ? 'left' : 'top' }), !0 + ); + l.scrollTo({ [p ? 'left' : 'top']: -f, behavior: 'smooth' }); + } + return !0; + } + return ( + e === 0 + ? (r.setTransition(0), + r.setTranslate(f), + t && (r.emit('beforeTransitionStart', e, n), r.emit('transitionEnd'))) + : (r.setTransition(e), + r.setTranslate(f), + t && (r.emit('beforeTransitionStart', e, n), r.emit('transitionStart')), + r.animating || + ((r.animating = !0), + r.onTranslateToWrapperTransitionEnd || + (r.onTranslateToWrapperTransitionEnd = function (g) { + !r || + r.destroyed || + (g.target === this && + (r.wrapperEl.removeEventListener( + 'transitionend', + r.onTranslateToWrapperTransitionEnd, + ), + (r.onTranslateToWrapperTransitionEnd = null), + delete r.onTranslateToWrapperTransitionEnd, + (r.animating = !1), + t && r.emit('transitionEnd'))); + }), + r.wrapperEl.addEventListener( + 'transitionend', + r.onTranslateToWrapperTransitionEnd, + ))), + !0 + ); +} +var lt = { + getTranslate: st, + setTranslate: it, + minTranslate: rt, + maxTranslate: nt, + translateTo: at, +}; +function ot(s, e) { + const t = this; + t.params.cssMode || + ((t.wrapperEl.style.transitionDuration = `${s}ms`), + (t.wrapperEl.style.transitionDelay = s === 0 ? '0ms' : '')), + t.emit('setTransition', s, e); +} +function Ce(s) { + let { swiper: e, runCallbacks: t, direction: i, step: n } = s; + const { activeIndex: r, previousIndex: o } = e; + let l = i; + if ( + (l || (r > o ? (l = 'next') : r < o ? (l = 'prev') : (l = 'reset')), + e.emit(`transition${n}`), + t && r !== o) + ) { + if (l === 'reset') { + e.emit(`slideResetTransition${n}`); + return; + } + e.emit(`slideChangeTransition${n}`), + l === 'next' + ? e.emit(`slideNextTransition${n}`) + : e.emit(`slidePrevTransition${n}`); + } +} +function dt(s, e) { + s === void 0 && (s = !0); + const t = this, + { params: i } = t; + i.cssMode || + (i.autoHeight && t.updateAutoHeight(), + Ce({ swiper: t, runCallbacks: s, direction: e, step: 'Start' })); +} +function ct(s, e) { + s === void 0 && (s = !0); + const t = this, + { params: i } = t; + (t.animating = !1), + !i.cssMode && + (t.setTransition(0), + Ce({ swiper: t, runCallbacks: s, direction: e, step: 'End' })); +} +var ft = { setTransition: ot, transitionStart: dt, transitionEnd: ct }; +function ut(s, e, t, i, n) { + s === void 0 && (s = 0), + t === void 0 && (t = !0), + typeof s == 'string' && (s = parseInt(s, 10)); + const r = this; + let o = s; + o < 0 && (o = 0); + const { + params: l, + snapGrid: a, + slidesGrid: u, + previousIndex: f, + activeIndex: p, + rtlTranslate: g, + wrapperEl: m, + enabled: h, + } = r; + if ( + (!h && !i && !n) || + r.destroyed || + (r.animating && l.preventInteractionOnTransition) + ) + return !1; + typeof e > 'u' && (e = r.params.speed); + const v = Math.min(r.params.slidesPerGroupSkip, o); + let E = v + Math.floor((o - v) / r.params.slidesPerGroup); + E >= a.length && (E = a.length - 1); + const y = -a[E]; + if (l.normalizeSlideIndex) + for (let b = 0; b < u.length; b += 1) { + const L = -Math.floor(y * 100), + A = Math.floor(u[b] * 100), + z = Math.floor(u[b + 1] * 100); + typeof u[b + 1] < 'u' + ? L >= A && L < z - (z - A) / 2 + ? (o = b) + : L >= A && L < z && (o = b + 1) + : L >= A && (o = b); + } + if ( + r.initialized && + o !== p && + ((!r.allowSlideNext && + (g + ? y > r.translate && y > r.minTranslate() + : y < r.translate && y < r.minTranslate())) || + (!r.allowSlidePrev && + y > r.translate && + y > r.maxTranslate() && + (p || 0) !== o)) + ) + return !1; + o !== (f || 0) && t && r.emit('beforeSlideChangeStart'), r.updateProgress(y); + let d; + o > p ? (d = 'next') : o < p ? (d = 'prev') : (d = 'reset'); + const c = r.virtual && r.params.virtual.enabled; + if (!(c && n) && ((g && -y === r.translate) || (!g && y === r.translate))) + return ( + r.updateActiveIndex(o), + l.autoHeight && r.updateAutoHeight(), + r.updateSlidesClasses(), + l.effect !== 'slide' && r.setTranslate(y), + d !== 'reset' && (r.transitionStart(t, d), r.transitionEnd(t, d)), + !1 + ); + if (l.cssMode) { + const b = r.isHorizontal(), + L = g ? y : -y; + if (e === 0) + c && + ((r.wrapperEl.style.scrollSnapType = 'none'), + (r._immediateVirtual = !0)), + c && !r._cssModeVirtualInitialSet && r.params.initialSlide > 0 + ? ((r._cssModeVirtualInitialSet = !0), + requestAnimationFrame(() => { + m[b ? 'scrollLeft' : 'scrollTop'] = L; + })) + : (m[b ? 'scrollLeft' : 'scrollTop'] = L), + c && + requestAnimationFrame(() => { + (r.wrapperEl.style.scrollSnapType = ''), (r._immediateVirtual = !1); + }); + else { + if (!r.support.smoothScroll) + return ( + ye({ swiper: r, targetPosition: L, side: b ? 'left' : 'top' }), !0 + ); + m.scrollTo({ [b ? 'left' : 'top']: L, behavior: 'smooth' }); + } + return !0; + } + return ( + r.setTransition(e), + r.setTranslate(y), + r.updateActiveIndex(o), + r.updateSlidesClasses(), + r.emit('beforeTransitionStart', e, i), + r.transitionStart(t, d), + e === 0 + ? r.transitionEnd(t, d) + : r.animating || + ((r.animating = !0), + r.onSlideToWrapperTransitionEnd || + (r.onSlideToWrapperTransitionEnd = function (L) { + !r || + r.destroyed || + (L.target === this && + (r.wrapperEl.removeEventListener( + 'transitionend', + r.onSlideToWrapperTransitionEnd, + ), + (r.onSlideToWrapperTransitionEnd = null), + delete r.onSlideToWrapperTransitionEnd, + r.transitionEnd(t, d))); + }), + r.wrapperEl.addEventListener( + 'transitionend', + r.onSlideToWrapperTransitionEnd, + )), + !0 + ); +} +function pt(s, e, t, i) { + s === void 0 && (s = 0), + t === void 0 && (t = !0), + typeof s == 'string' && (s = parseInt(s, 10)); + const n = this; + if (n.destroyed) return; + typeof e > 'u' && (e = n.params.speed); + const r = n.grid && n.params.grid && n.params.grid.rows > 1; + let o = s; + if (n.params.loop) + if (n.virtual && n.params.virtual.enabled) o = o + n.virtual.slidesBefore; + else { + let l; + if (r) { + const g = o * n.params.grid.rows; + l = n.slides.filter( + (m) => m.getAttribute('data-swiper-slide-index') * 1 === g, + )[0].column; + } else l = n.getSlideIndexByData(o); + const a = r + ? Math.ceil(n.slides.length / n.params.grid.rows) + : n.slides.length, + { centeredSlides: u } = n.params; + let f = n.params.slidesPerView; + f === 'auto' + ? (f = n.slidesPerViewDynamic()) + : ((f = Math.ceil(parseFloat(n.params.slidesPerView, 10))), + u && f % 2 === 0 && (f = f + 1)); + let p = a - l < f; + if ( + (u && (p = p || l < Math.ceil(f / 2)), + i && u && n.params.slidesPerView !== 'auto' && !r && (p = !1), + p) + ) { + const g = u + ? l < n.activeIndex + ? 'prev' + : 'next' + : l - n.activeIndex - 1 < n.params.slidesPerView + ? 'next' + : 'prev'; + n.loopFix({ + direction: g, + slideTo: !0, + activeSlideIndex: g === 'next' ? l + 1 : l - a + 1, + slideRealIndex: g === 'next' ? n.realIndex : void 0, + }); + } + if (r) { + const g = o * n.params.grid.rows; + o = n.slides.filter( + (m) => m.getAttribute('data-swiper-slide-index') * 1 === g, + )[0].column; + } else o = n.getSlideIndexByData(o); + } + return ( + requestAnimationFrame(() => { + n.slideTo(o, e, t, i); + }), + n + ); +} +function mt(s, e, t) { + e === void 0 && (e = !0); + const i = this, + { enabled: n, params: r, animating: o } = i; + if (!n || i.destroyed) return i; + typeof s > 'u' && (s = i.params.speed); + let l = r.slidesPerGroup; + r.slidesPerView === 'auto' && + r.slidesPerGroup === 1 && + r.slidesPerGroupAuto && + (l = Math.max(i.slidesPerViewDynamic('current', !0), 1)); + const a = i.activeIndex < r.slidesPerGroupSkip ? 1 : l, + u = i.virtual && r.virtual.enabled; + if (r.loop) { + if (o && !u && r.loopPreventsSliding) return !1; + if ( + (i.loopFix({ direction: 'next' }), + (i._clientLeft = i.wrapperEl.clientLeft), + i.activeIndex === i.slides.length - 1 && r.cssMode) + ) + return ( + requestAnimationFrame(() => { + i.slideTo(i.activeIndex + a, s, e, t); + }), + !0 + ); + } + return r.rewind && i.isEnd + ? i.slideTo(0, s, e, t) + : i.slideTo(i.activeIndex + a, s, e, t); +} +function ht(s, e, t) { + e === void 0 && (e = !0); + const i = this, + { + params: n, + snapGrid: r, + slidesGrid: o, + rtlTranslate: l, + enabled: a, + animating: u, + } = i; + if (!a || i.destroyed) return i; + typeof s > 'u' && (s = i.params.speed); + const f = i.virtual && n.virtual.enabled; + if (n.loop) { + if (u && !f && n.loopPreventsSliding) return !1; + i.loopFix({ direction: 'prev' }), (i._clientLeft = i.wrapperEl.clientLeft); + } + const p = l ? i.translate : -i.translate; + function g(y) { + return y < 0 ? -Math.floor(Math.abs(y)) : Math.floor(y); + } + const m = g(p), + h = r.map((y) => g(y)); + let v = r[h.indexOf(m) - 1]; + if (typeof v > 'u' && n.cssMode) { + let y; + r.forEach((d, c) => { + m >= d && (y = c); + }), + typeof y < 'u' && (v = r[y > 0 ? y - 1 : y]); + } + let E = 0; + if ( + (typeof v < 'u' && + ((E = o.indexOf(v)), + E < 0 && (E = i.activeIndex - 1), + n.slidesPerView === 'auto' && + n.slidesPerGroup === 1 && + n.slidesPerGroupAuto && + ((E = E - i.slidesPerViewDynamic('previous', !0) + 1), + (E = Math.max(E, 0)))), + n.rewind && i.isBeginning) + ) { + const y = + i.params.virtual && i.params.virtual.enabled && i.virtual + ? i.virtual.slides.length - 1 + : i.slides.length - 1; + return i.slideTo(y, s, e, t); + } else if (n.loop && i.activeIndex === 0 && n.cssMode) + return ( + requestAnimationFrame(() => { + i.slideTo(E, s, e, t); + }), + !0 + ); + return i.slideTo(E, s, e, t); +} +function gt(s, e, t) { + e === void 0 && (e = !0); + const i = this; + if (!i.destroyed) + return ( + typeof s > 'u' && (s = i.params.speed), i.slideTo(i.activeIndex, s, e, t) + ); +} +function vt(s, e, t, i) { + e === void 0 && (e = !0), i === void 0 && (i = 0.5); + const n = this; + if (n.destroyed) return; + typeof s > 'u' && (s = n.params.speed); + let r = n.activeIndex; + const o = Math.min(n.params.slidesPerGroupSkip, r), + l = o + Math.floor((r - o) / n.params.slidesPerGroup), + a = n.rtlTranslate ? n.translate : -n.translate; + if (a >= n.snapGrid[l]) { + const u = n.snapGrid[l], + f = n.snapGrid[l + 1]; + a - u > (f - u) * i && (r += n.params.slidesPerGroup); + } else { + const u = n.snapGrid[l - 1], + f = n.snapGrid[l]; + a - u <= (f - u) * i && (r -= n.params.slidesPerGroup); + } + return ( + (r = Math.max(r, 0)), + (r = Math.min(r, n.slidesGrid.length - 1)), + n.slideTo(r, s, e, t) + ); +} +function wt() { + const s = this; + if (s.destroyed) return; + const { params: e, slidesEl: t } = s, + i = e.slidesPerView === 'auto' ? s.slidesPerViewDynamic() : e.slidesPerView; + let n = s.clickedIndex, + r; + const o = s.isElement ? 'swiper-slide' : `.${e.slideClass}`; + if (e.loop) { + if (s.animating) return; + (r = parseInt(s.clickedSlide.getAttribute('data-swiper-slide-index'), 10)), + e.centeredSlides + ? n < s.loopedSlides - i / 2 || + n > s.slides.length - s.loopedSlides + i / 2 + ? (s.loopFix(), + (n = s.getSlideIndex( + H(t, `${o}[data-swiper-slide-index="${r}"]`)[0], + )), + U(() => { + s.slideTo(n); + })) + : s.slideTo(n) + : n > s.slides.length - i + ? (s.loopFix(), + (n = s.getSlideIndex( + H(t, `${o}[data-swiper-slide-index="${r}"]`)[0], + )), + U(() => { + s.slideTo(n); + })) + : s.slideTo(n); + } else s.slideTo(n); +} +var bt = { + slideTo: ut, + slideToLoop: pt, + slideNext: mt, + slidePrev: ht, + slideReset: gt, + slideToClosest: vt, + slideToClickedSlide: wt, +}; +function St(s) { + const e = this, + { params: t, slidesEl: i } = e; + if (!t.loop || (e.virtual && e.params.virtual.enabled)) return; + const n = () => { + H(i, `.${t.slideClass}, swiper-slide`).forEach((p, g) => { + p.setAttribute('data-swiper-slide-index', g); + }); + }, + r = e.grid && t.grid && t.grid.rows > 1, + o = t.slidesPerGroup * (r ? t.grid.rows : 1), + l = e.slides.length % o !== 0, + a = r && e.slides.length % t.grid.rows !== 0, + u = (f) => { + for (let p = 0; p < f; p += 1) { + const g = e.isElement + ? q('swiper-slide', [t.slideBlankClass]) + : q('div', [t.slideClass, t.slideBlankClass]); + e.slidesEl.append(g); + } + }; + if (l) { + if (t.loopAddBlankSlides) { + const f = o - (e.slides.length % o); + u(f), e.recalcSlides(), e.updateSlides(); + } else + J( + 'Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)', + ); + n(); + } else if (a) { + if (t.loopAddBlankSlides) { + const f = t.grid.rows - (e.slides.length % t.grid.rows); + u(f), e.recalcSlides(), e.updateSlides(); + } else + J( + 'Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)', + ); + n(); + } else n(); + e.loopFix({ + slideRealIndex: s, + direction: t.centeredSlides ? void 0 : 'next', + }); +} +function yt(s) { + let { + slideRealIndex: e, + slideTo: t = !0, + direction: i, + setTranslate: n, + activeSlideIndex: r, + byController: o, + byMousewheel: l, + } = s === void 0 ? {} : s; + const a = this; + if (!a.params.loop) return; + a.emit('beforeLoopFix'); + const { + slides: u, + allowSlidePrev: f, + allowSlideNext: p, + slidesEl: g, + params: m, + } = a, + { centeredSlides: h } = m; + if ( + ((a.allowSlidePrev = !0), + (a.allowSlideNext = !0), + a.virtual && m.virtual.enabled) + ) { + t && + (!m.centeredSlides && a.snapIndex === 0 + ? a.slideTo(a.virtual.slides.length, 0, !1, !0) + : m.centeredSlides && a.snapIndex < m.slidesPerView + ? a.slideTo(a.virtual.slides.length + a.snapIndex, 0, !1, !0) + : a.snapIndex === a.snapGrid.length - 1 && + a.slideTo(a.virtual.slidesBefore, 0, !1, !0)), + (a.allowSlidePrev = f), + (a.allowSlideNext = p), + a.emit('loopFix'); + return; + } + let v = m.slidesPerView; + v === 'auto' + ? (v = a.slidesPerViewDynamic()) + : ((v = Math.ceil(parseFloat(m.slidesPerView, 10))), + h && v % 2 === 0 && (v = v + 1)); + const E = m.slidesPerGroupAuto ? v : m.slidesPerGroup; + let y = E; + y % E !== 0 && (y += E - (y % E)), + (y += m.loopAdditionalSlides), + (a.loopedSlides = y); + const d = a.grid && m.grid && m.grid.rows > 1; + u.length < v + y + ? J( + 'Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters', + ) + : d && + m.grid.fill === 'row' && + J( + 'Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`', + ); + const c = [], + w = []; + let b = a.activeIndex; + typeof r > 'u' + ? (r = a.getSlideIndex( + u.filter((S) => S.classList.contains(m.slideActiveClass))[0], + )) + : (b = r); + const L = i === 'next' || !i, + A = i === 'prev' || !i; + let z = 0, + O = 0; + const C = d ? Math.ceil(u.length / m.grid.rows) : u.length, + T = (d ? u[r].column : r) + (h && typeof n > 'u' ? -v / 2 + 0.5 : 0); + if (T < y) { + z = Math.max(y - T, E); + for (let S = 0; S < y - T; S += 1) { + const x = S - Math.floor(S / C) * C; + if (d) { + const M = C - x - 1; + for (let I = u.length - 1; I >= 0; I -= 1) + u[I].column === M && c.push(I); + } else c.push(C - x - 1); + } + } else if (T + v > C - y) { + O = Math.max(T - (C - y * 2), E); + for (let S = 0; S < O; S += 1) { + const x = S - Math.floor(S / C) * C; + d + ? u.forEach((M, I) => { + M.column === x && w.push(I); + }) + : w.push(x); + } + } + if ( + ((a.__preventObserver__ = !0), + requestAnimationFrame(() => { + a.__preventObserver__ = !1; + }), + A && + c.forEach((S) => { + (u[S].swiperLoopMoveDOM = !0), + g.prepend(u[S]), + (u[S].swiperLoopMoveDOM = !1); + }), + L && + w.forEach((S) => { + (u[S].swiperLoopMoveDOM = !0), + g.append(u[S]), + (u[S].swiperLoopMoveDOM = !1); + }), + a.recalcSlides(), + m.slidesPerView === 'auto' + ? a.updateSlides() + : d && + ((c.length > 0 && A) || (w.length > 0 && L)) && + a.slides.forEach((S, x) => { + a.grid.updateSlide(x, S, a.slides); + }), + m.watchSlidesProgress && a.updateSlidesOffset(), + t) + ) { + if (c.length > 0 && A) { + if (typeof e > 'u') { + const S = a.slidesGrid[b], + M = a.slidesGrid[b + z] - S; + l + ? a.setTranslate(a.translate - M) + : (a.slideTo(b + Math.ceil(z), 0, !1, !0), + n && + ((a.touchEventsData.startTranslate = + a.touchEventsData.startTranslate - M), + (a.touchEventsData.currentTranslate = + a.touchEventsData.currentTranslate - M))); + } else if (n) { + const S = d ? c.length / m.grid.rows : c.length; + a.slideTo(a.activeIndex + S, 0, !1, !0), + (a.touchEventsData.currentTranslate = a.translate); + } + } else if (w.length > 0 && L) + if (typeof e > 'u') { + const S = a.slidesGrid[b], + M = a.slidesGrid[b - O] - S; + l + ? a.setTranslate(a.translate - M) + : (a.slideTo(b - O, 0, !1, !0), + n && + ((a.touchEventsData.startTranslate = + a.touchEventsData.startTranslate - M), + (a.touchEventsData.currentTranslate = + a.touchEventsData.currentTranslate - M))); + } else { + const S = d ? w.length / m.grid.rows : w.length; + a.slideTo(a.activeIndex - S, 0, !1, !0); + } + } + if ( + ((a.allowSlidePrev = f), + (a.allowSlideNext = p), + a.controller && a.controller.control && !o) + ) { + const S = { + slideRealIndex: e, + direction: i, + setTranslate: n, + activeSlideIndex: r, + byController: !0, + }; + Array.isArray(a.controller.control) + ? a.controller.control.forEach((x) => { + !x.destroyed && + x.params.loop && + x.loopFix({ + ...S, + slideTo: x.params.slidesPerView === m.slidesPerView ? t : !1, + }); + }) + : a.controller.control instanceof a.constructor && + a.controller.control.params.loop && + a.controller.control.loopFix({ + ...S, + slideTo: + a.controller.control.params.slidesPerView === m.slidesPerView + ? t + : !1, + }); + } + a.emit('loopFix'); +} +function Tt() { + const s = this, + { params: e, slidesEl: t } = s; + if (!e.loop || (s.virtual && s.params.virtual.enabled)) return; + s.recalcSlides(); + const i = []; + s.slides.forEach((n) => { + const r = + typeof n.swiperSlideIndex > 'u' + ? n.getAttribute('data-swiper-slide-index') * 1 + : n.swiperSlideIndex; + i[r] = n; + }), + s.slides.forEach((n) => { + n.removeAttribute('data-swiper-slide-index'); + }), + i.forEach((n) => { + t.append(n); + }), + s.recalcSlides(), + s.slideTo(s.realIndex, 0); +} +var xt = { loopCreate: St, loopFix: yt, loopDestroy: Tt }; +function Et(s) { + const e = this; + if ( + !e.params.simulateTouch || + (e.params.watchOverflow && e.isLocked) || + e.params.cssMode + ) + return; + const t = e.params.touchEventsTarget === 'container' ? e.el : e.wrapperEl; + e.isElement && (e.__preventObserver__ = !0), + (t.style.cursor = 'move'), + (t.style.cursor = s ? 'grabbing' : 'grab'), + e.isElement && + requestAnimationFrame(() => { + e.__preventObserver__ = !1; + }); +} +function Ct() { + const s = this; + (s.params.watchOverflow && s.isLocked) || + s.params.cssMode || + (s.isElement && (s.__preventObserver__ = !0), + (s[ + s.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl' + ].style.cursor = ''), + s.isElement && + requestAnimationFrame(() => { + s.__preventObserver__ = !1; + })); +} +var Mt = { setGrabCursor: Et, unsetGrabCursor: Ct }; +function Pt(s, e) { + e === void 0 && (e = this); + function t(i) { + if (!i || i === R() || i === B()) return null; + i.assignedSlot && (i = i.assignedSlot); + const n = i.closest(s); + return !n && !i.getRootNode ? null : n || t(i.getRootNode().host); + } + return t(e); +} +function ge(s, e, t) { + const i = B(), + { params: n } = s, + r = n.edgeSwipeDetection, + o = n.edgeSwipeThreshold; + return r && (t <= o || t >= i.innerWidth - o) + ? r === 'prevent' + ? (e.preventDefault(), !0) + : !1 + : !0; +} +function Lt(s) { + const e = this, + t = R(); + let i = s; + i.originalEvent && (i = i.originalEvent); + const n = e.touchEventsData; + if (i.type === 'pointerdown') { + if (n.pointerId !== null && n.pointerId !== i.pointerId) return; + n.pointerId = i.pointerId; + } else + i.type === 'touchstart' && + i.targetTouches.length === 1 && + (n.touchId = i.targetTouches[0].identifier); + if (i.type === 'touchstart') { + ge(e, i, i.targetTouches[0].pageX); + return; + } + const { params: r, touches: o, enabled: l } = e; + if ( + !l || + (!r.simulateTouch && i.pointerType === 'mouse') || + (e.animating && r.preventInteractionOnTransition) + ) + return; + !e.animating && r.cssMode && r.loop && e.loopFix(); + let a = i.target; + if ( + (r.touchEventsTarget === 'wrapper' && !ke(a, e.wrapperEl)) || + ('which' in i && i.which === 3) || + ('button' in i && i.button > 0) || + (n.isTouched && n.isMoved) + ) + return; + const u = !!r.noSwipingClass && r.noSwipingClass !== '', + f = i.composedPath ? i.composedPath() : i.path; + u && i.target && i.target.shadowRoot && f && (a = f[0]); + const p = r.noSwipingSelector ? r.noSwipingSelector : `.${r.noSwipingClass}`, + g = !!(i.target && i.target.shadowRoot); + if (r.noSwiping && (g ? Pt(p, a) : a.closest(p))) { + e.allowClick = !0; + return; + } + if (r.swipeHandler && !a.closest(r.swipeHandler)) return; + (o.currentX = i.pageX), (o.currentY = i.pageY); + const m = o.currentX, + h = o.currentY; + if (!ge(e, i, m)) return; + Object.assign(n, { + isTouched: !0, + isMoved: !1, + allowTouchCallbacks: !0, + isScrolling: void 0, + startMoving: void 0, + }), + (o.startX = m), + (o.startY = h), + (n.touchStartTime = K()), + (e.allowClick = !0), + e.updateSize(), + (e.swipeDirection = void 0), + r.threshold > 0 && (n.allowThresholdMove = !1); + let v = !0; + a.matches(n.focusableElements) && + ((v = !1), a.nodeName === 'SELECT' && (n.isTouched = !1)), + t.activeElement && + t.activeElement.matches(n.focusableElements) && + t.activeElement !== a && + (i.pointerType === 'mouse' || + (i.pointerType !== 'mouse' && !a.matches(n.focusableElements))) && + t.activeElement.blur(); + const E = v && e.allowTouchMove && r.touchStartPreventDefault; + (r.touchStartForcePreventDefault || E) && + !a.isContentEditable && + i.preventDefault(), + r.freeMode && + r.freeMode.enabled && + e.freeMode && + e.animating && + !r.cssMode && + e.freeMode.onTouchStart(), + e.emit('touchStart', i); +} +function It(s) { + const e = R(), + t = this, + i = t.touchEventsData, + { params: n, touches: r, rtlTranslate: o, enabled: l } = t; + if (!l || (!n.simulateTouch && s.pointerType === 'mouse')) return; + let a = s; + if ( + (a.originalEvent && (a = a.originalEvent), + a.type === 'pointermove' && + (i.touchId !== null || a.pointerId !== i.pointerId)) + ) + return; + let u; + if (a.type === 'touchmove') { + if ( + ((u = [...a.changedTouches].filter((L) => L.identifier === i.touchId)[0]), + !u || u.identifier !== i.touchId) + ) + return; + } else u = a; + if (!i.isTouched) { + i.startMoving && i.isScrolling && t.emit('touchMoveOpposite', a); + return; + } + const f = u.pageX, + p = u.pageY; + if (a.preventedByNestedSwiper) { + (r.startX = f), (r.startY = p); + return; + } + if (!t.allowTouchMove) { + a.target.matches(i.focusableElements) || (t.allowClick = !1), + i.isTouched && + (Object.assign(r, { startX: f, startY: p, currentX: f, currentY: p }), + (i.touchStartTime = K())); + return; + } + if (n.touchReleaseOnEdges && !n.loop) { + if (t.isVertical()) { + if ( + (p < r.startY && t.translate <= t.maxTranslate()) || + (p > r.startY && t.translate >= t.minTranslate()) + ) { + (i.isTouched = !1), (i.isMoved = !1); + return; + } + } else if ( + (f < r.startX && t.translate <= t.maxTranslate()) || + (f > r.startX && t.translate >= t.minTranslate()) + ) + return; + } + if ( + (e.activeElement && + e.activeElement.matches(i.focusableElements) && + e.activeElement !== a.target && + a.pointerType !== 'mouse' && + e.activeElement.blur(), + e.activeElement && + a.target === e.activeElement && + a.target.matches(i.focusableElements)) + ) { + (i.isMoved = !0), (t.allowClick = !1); + return; + } + i.allowTouchCallbacks && t.emit('touchMove', a), + (r.previousX = r.currentX), + (r.previousY = r.currentY), + (r.currentX = f), + (r.currentY = p); + const g = r.currentX - r.startX, + m = r.currentY - r.startY; + if (t.params.threshold && Math.sqrt(g ** 2 + m ** 2) < t.params.threshold) + return; + if (typeof i.isScrolling > 'u') { + let L; + (t.isHorizontal() && r.currentY === r.startY) || + (t.isVertical() && r.currentX === r.startX) + ? (i.isScrolling = !1) + : g * g + m * m >= 25 && + ((L = (Math.atan2(Math.abs(m), Math.abs(g)) * 180) / Math.PI), + (i.isScrolling = t.isHorizontal() + ? L > n.touchAngle + : 90 - L > n.touchAngle)); + } + if ( + (i.isScrolling && t.emit('touchMoveOpposite', a), + typeof i.startMoving > 'u' && + (r.currentX !== r.startX || r.currentY !== r.startY) && + (i.startMoving = !0), + i.isScrolling || + (a.type === 'touchmove' && i.preventTouchMoveFromPointerMove)) + ) { + i.isTouched = !1; + return; + } + if (!i.startMoving) return; + (t.allowClick = !1), + !n.cssMode && a.cancelable && a.preventDefault(), + n.touchMoveStopPropagation && !n.nested && a.stopPropagation(); + let h = t.isHorizontal() ? g : m, + v = t.isHorizontal() ? r.currentX - r.previousX : r.currentY - r.previousY; + n.oneWayMovement && + ((h = Math.abs(h) * (o ? 1 : -1)), (v = Math.abs(v) * (o ? 1 : -1))), + (r.diff = h), + (h *= n.touchRatio), + o && ((h = -h), (v = -v)); + const E = t.touchesDirection; + (t.swipeDirection = h > 0 ? 'prev' : 'next'), + (t.touchesDirection = v > 0 ? 'prev' : 'next'); + const y = t.params.loop && !n.cssMode, + d = + (t.touchesDirection === 'next' && t.allowSlideNext) || + (t.touchesDirection === 'prev' && t.allowSlidePrev); + if (!i.isMoved) { + if ( + (y && d && t.loopFix({ direction: t.swipeDirection }), + (i.startTranslate = t.getTranslate()), + t.setTransition(0), + t.animating) + ) { + const L = new window.CustomEvent('transitionend', { + bubbles: !0, + cancelable: !0, + detail: { bySwiperTouchMove: !0 }, + }); + t.wrapperEl.dispatchEvent(L); + } + (i.allowMomentumBounce = !1), + n.grabCursor && + (t.allowSlideNext === !0 || t.allowSlidePrev === !0) && + t.setGrabCursor(!0), + t.emit('sliderFirstMove', a); + } + let c; + if ( + (new Date().getTime(), + i.isMoved && + i.allowThresholdMove && + E !== t.touchesDirection && + y && + d && + Math.abs(h) >= 1) + ) { + Object.assign(r, { + startX: f, + startY: p, + currentX: f, + currentY: p, + startTranslate: i.currentTranslate, + }), + (i.loopSwapReset = !0), + (i.startTranslate = i.currentTranslate); + return; + } + t.emit('sliderMove', a), + (i.isMoved = !0), + (i.currentTranslate = h + i.startTranslate); + let w = !0, + b = n.resistanceRatio; + if ( + (n.touchReleaseOnEdges && (b = 0), + h > 0 + ? (y && + d && + !c && + i.allowThresholdMove && + i.currentTranslate > + (n.centeredSlides + ? t.minTranslate() - + t.slidesSizesGrid[t.activeIndex + 1] - + (n.slidesPerView !== 'auto' && + t.slides.length - n.slidesPerView >= 2 + ? t.slidesSizesGrid[t.activeIndex + 1] + t.params.spaceBetween + : 0) - + t.params.spaceBetween + : t.minTranslate()) && + t.loopFix({ + direction: 'prev', + setTranslate: !0, + activeSlideIndex: 0, + }), + i.currentTranslate > t.minTranslate() && + ((w = !1), + n.resistance && + (i.currentTranslate = + t.minTranslate() - + 1 + + (-t.minTranslate() + i.startTranslate + h) ** b))) + : h < 0 && + (y && + d && + !c && + i.allowThresholdMove && + i.currentTranslate < + (n.centeredSlides + ? t.maxTranslate() + + t.slidesSizesGrid[t.slidesSizesGrid.length - 1] + + t.params.spaceBetween + + (n.slidesPerView !== 'auto' && + t.slides.length - n.slidesPerView >= 2 + ? t.slidesSizesGrid[t.slidesSizesGrid.length - 1] + + t.params.spaceBetween + : 0) + : t.maxTranslate()) && + t.loopFix({ + direction: 'next', + setTranslate: !0, + activeSlideIndex: + t.slides.length - + (n.slidesPerView === 'auto' + ? t.slidesPerViewDynamic() + : Math.ceil(parseFloat(n.slidesPerView, 10))), + }), + i.currentTranslate < t.maxTranslate() && + ((w = !1), + n.resistance && + (i.currentTranslate = + t.maxTranslate() + + 1 - + (t.maxTranslate() - i.startTranslate - h) ** b))), + w && (a.preventedByNestedSwiper = !0), + !t.allowSlideNext && + t.swipeDirection === 'next' && + i.currentTranslate < i.startTranslate && + (i.currentTranslate = i.startTranslate), + !t.allowSlidePrev && + t.swipeDirection === 'prev' && + i.currentTranslate > i.startTranslate && + (i.currentTranslate = i.startTranslate), + !t.allowSlidePrev && + !t.allowSlideNext && + (i.currentTranslate = i.startTranslate), + n.threshold > 0) + ) + if (Math.abs(h) > n.threshold || i.allowThresholdMove) { + if (!i.allowThresholdMove) { + (i.allowThresholdMove = !0), + (r.startX = r.currentX), + (r.startY = r.currentY), + (i.currentTranslate = i.startTranslate), + (r.diff = t.isHorizontal() + ? r.currentX - r.startX + : r.currentY - r.startY); + return; + } + } else { + i.currentTranslate = i.startTranslate; + return; + } + !n.followFinger || + n.cssMode || + (((n.freeMode && n.freeMode.enabled && t.freeMode) || + n.watchSlidesProgress) && + (t.updateActiveIndex(), t.updateSlidesClasses()), + n.freeMode && n.freeMode.enabled && t.freeMode && t.freeMode.onTouchMove(), + t.updateProgress(i.currentTranslate), + t.setTranslate(i.currentTranslate)); +} +function zt(s) { + const e = this, + t = e.touchEventsData; + let i = s; + i.originalEvent && (i = i.originalEvent); + let n; + if (i.type === 'touchend' || i.type === 'touchcancel') { + if ( + ((n = [...i.changedTouches].filter((b) => b.identifier === t.touchId)[0]), + !n || n.identifier !== t.touchId) + ) + return; + } else { + if (t.touchId !== null || i.pointerId !== t.pointerId) return; + n = i; + } + if ( + ['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes( + i.type, + ) && + !( + ['pointercancel', 'contextmenu'].includes(i.type) && + (e.browser.isSafari || e.browser.isWebView) + ) + ) + return; + (t.pointerId = null), (t.touchId = null); + const { + params: o, + touches: l, + rtlTranslate: a, + slidesGrid: u, + enabled: f, + } = e; + if (!f || (!o.simulateTouch && i.pointerType === 'mouse')) return; + if ( + (t.allowTouchCallbacks && e.emit('touchEnd', i), + (t.allowTouchCallbacks = !1), + !t.isTouched) + ) { + t.isMoved && o.grabCursor && e.setGrabCursor(!1), + (t.isMoved = !1), + (t.startMoving = !1); + return; + } + o.grabCursor && + t.isMoved && + t.isTouched && + (e.allowSlideNext === !0 || e.allowSlidePrev === !0) && + e.setGrabCursor(!1); + const p = K(), + g = p - t.touchStartTime; + if (e.allowClick) { + const b = i.path || (i.composedPath && i.composedPath()); + e.updateClickedSlide((b && b[0]) || i.target, b), + e.emit('tap click', i), + g < 300 && + p - t.lastClickTime < 300 && + e.emit('doubleTap doubleClick', i); + } + if ( + ((t.lastClickTime = K()), + U(() => { + e.destroyed || (e.allowClick = !0); + }), + !t.isTouched || + !t.isMoved || + !e.swipeDirection || + (l.diff === 0 && !t.loopSwapReset) || + (t.currentTranslate === t.startTranslate && !t.loopSwapReset)) + ) { + (t.isTouched = !1), (t.isMoved = !1), (t.startMoving = !1); + return; + } + (t.isTouched = !1), (t.isMoved = !1), (t.startMoving = !1); + let m; + if ( + (o.followFinger + ? (m = a ? e.translate : -e.translate) + : (m = -t.currentTranslate), + o.cssMode) + ) + return; + if (o.freeMode && o.freeMode.enabled) { + e.freeMode.onTouchEnd({ currentPos: m }); + return; + } + const h = m >= -e.maxTranslate() && !e.params.loop; + let v = 0, + E = e.slidesSizesGrid[0]; + for ( + let b = 0; + b < u.length; + b += b < o.slidesPerGroupSkip ? 1 : o.slidesPerGroup + ) { + const L = b < o.slidesPerGroupSkip - 1 ? 1 : o.slidesPerGroup; + typeof u[b + L] < 'u' + ? (h || (m >= u[b] && m < u[b + L])) && ((v = b), (E = u[b + L] - u[b])) + : (h || m >= u[b]) && ((v = b), (E = u[u.length - 1] - u[u.length - 2])); + } + let y = null, + d = null; + o.rewind && + (e.isBeginning + ? (d = + o.virtual && o.virtual.enabled && e.virtual + ? e.virtual.slides.length - 1 + : e.slides.length - 1) + : e.isEnd && (y = 0)); + const c = (m - u[v]) / E, + w = v < o.slidesPerGroupSkip - 1 ? 1 : o.slidesPerGroup; + if (g > o.longSwipesMs) { + if (!o.longSwipes) { + e.slideTo(e.activeIndex); + return; + } + e.swipeDirection === 'next' && + (c >= o.longSwipesRatio + ? e.slideTo(o.rewind && e.isEnd ? y : v + w) + : e.slideTo(v)), + e.swipeDirection === 'prev' && + (c > 1 - o.longSwipesRatio + ? e.slideTo(v + w) + : d !== null && c < 0 && Math.abs(c) > o.longSwipesRatio + ? e.slideTo(d) + : e.slideTo(v)); + } else { + if (!o.shortSwipes) { + e.slideTo(e.activeIndex); + return; + } + e.navigation && + (i.target === e.navigation.nextEl || i.target === e.navigation.prevEl) + ? i.target === e.navigation.nextEl + ? e.slideTo(v + w) + : e.slideTo(v) + : (e.swipeDirection === 'next' && e.slideTo(y !== null ? y : v + w), + e.swipeDirection === 'prev' && e.slideTo(d !== null ? d : v)); + } +} +function ve() { + const s = this, + { params: e, el: t } = s; + if (t && t.offsetWidth === 0) return; + e.breakpoints && s.setBreakpoint(); + const { allowSlideNext: i, allowSlidePrev: n, snapGrid: r } = s, + o = s.virtual && s.params.virtual.enabled; + (s.allowSlideNext = !0), + (s.allowSlidePrev = !0), + s.updateSize(), + s.updateSlides(), + s.updateSlidesClasses(); + const l = o && e.loop; + (e.slidesPerView === 'auto' || e.slidesPerView > 1) && + s.isEnd && + !s.isBeginning && + !s.params.centeredSlides && + !l + ? s.slideTo(s.slides.length - 1, 0, !1, !0) + : s.params.loop && !o + ? s.slideToLoop(s.realIndex, 0, !1, !0) + : s.slideTo(s.activeIndex, 0, !1, !0), + s.autoplay && + s.autoplay.running && + s.autoplay.paused && + (clearTimeout(s.autoplay.resizeTimeout), + (s.autoplay.resizeTimeout = setTimeout(() => { + s.autoplay && + s.autoplay.running && + s.autoplay.paused && + s.autoplay.resume(); + }, 500))), + (s.allowSlidePrev = n), + (s.allowSlideNext = i), + s.params.watchOverflow && r !== s.snapGrid && s.checkOverflow(); +} +function Ot(s) { + const e = this; + e.enabled && + (e.allowClick || + (e.params.preventClicks && s.preventDefault(), + e.params.preventClicksPropagation && + e.animating && + (s.stopPropagation(), s.stopImmediatePropagation()))); +} +function At() { + const s = this, + { wrapperEl: e, rtlTranslate: t, enabled: i } = s; + if (!i) return; + (s.previousTranslate = s.translate), + s.isHorizontal() + ? (s.translate = -e.scrollLeft) + : (s.translate = -e.scrollTop), + s.translate === 0 && (s.translate = 0), + s.updateActiveIndex(), + s.updateSlidesClasses(); + let n; + const r = s.maxTranslate() - s.minTranslate(); + r === 0 ? (n = 0) : (n = (s.translate - s.minTranslate()) / r), + n !== s.progress && s.updateProgress(t ? -s.translate : s.translate), + s.emit('setTranslate', s.translate, !1); +} +function Dt(s) { + const e = this; + X(e, s.target), + !( + e.params.cssMode || + (e.params.slidesPerView !== 'auto' && !e.params.autoHeight) + ) && e.update(); +} +function kt() { + const s = this; + s.documentTouchHandlerProceeded || + ((s.documentTouchHandlerProceeded = !0), + s.params.touchReleaseOnEdges && (s.el.style.touchAction = 'auto')); +} +const Me = (s, e) => { + const t = R(), + { params: i, el: n, wrapperEl: r, device: o } = s, + l = !!i.nested, + a = e === 'on' ? 'addEventListener' : 'removeEventListener', + u = e; + !n || + typeof n == 'string' || + (t[a]('touchstart', s.onDocumentTouchStart, { passive: !1, capture: l }), + n[a]('touchstart', s.onTouchStart, { passive: !1 }), + n[a]('pointerdown', s.onTouchStart, { passive: !1 }), + t[a]('touchmove', s.onTouchMove, { passive: !1, capture: l }), + t[a]('pointermove', s.onTouchMove, { passive: !1, capture: l }), + t[a]('touchend', s.onTouchEnd, { passive: !0 }), + t[a]('pointerup', s.onTouchEnd, { passive: !0 }), + t[a]('pointercancel', s.onTouchEnd, { passive: !0 }), + t[a]('touchcancel', s.onTouchEnd, { passive: !0 }), + t[a]('pointerout', s.onTouchEnd, { passive: !0 }), + t[a]('pointerleave', s.onTouchEnd, { passive: !0 }), + t[a]('contextmenu', s.onTouchEnd, { passive: !0 }), + (i.preventClicks || i.preventClicksPropagation) && + n[a]('click', s.onClick, !0), + i.cssMode && r[a]('scroll', s.onScroll), + i.updateOnWindowResize + ? s[u]( + o.ios || o.android + ? 'resize orientationchange observerUpdate' + : 'resize observerUpdate', + ve, + !0, + ) + : s[u]('observerUpdate', ve, !0), + n[a]('load', s.onLoad, { capture: !0 })); +}; +function Gt() { + const s = this, + { params: e } = s; + (s.onTouchStart = Lt.bind(s)), + (s.onTouchMove = It.bind(s)), + (s.onTouchEnd = zt.bind(s)), + (s.onDocumentTouchStart = kt.bind(s)), + e.cssMode && (s.onScroll = At.bind(s)), + (s.onClick = Ot.bind(s)), + (s.onLoad = Dt.bind(s)), + Me(s, 'on'); +} +function Bt() { + Me(this, 'off'); +} +var $t = { attachEvents: Gt, detachEvents: Bt }; +const we = (s, e) => s.grid && e.grid && e.grid.rows > 1; +function Vt() { + const s = this, + { realIndex: e, initialized: t, params: i, el: n } = s, + r = i.breakpoints; + if (!r || (r && Object.keys(r).length === 0)) return; + const o = s.getBreakpoint(r, s.params.breakpointsBase, s.el); + if (!o || s.currentBreakpoint === o) return; + const a = (o in r ? r[o] : void 0) || s.originalParams, + u = we(s, i), + f = we(s, a), + p = s.params.grabCursor, + g = a.grabCursor, + m = i.enabled; + u && !f + ? (n.classList.remove( + `${i.containerModifierClass}grid`, + `${i.containerModifierClass}grid-column`, + ), + s.emitContainerClasses()) + : !u && + f && + (n.classList.add(`${i.containerModifierClass}grid`), + ((a.grid.fill && a.grid.fill === 'column') || + (!a.grid.fill && i.grid.fill === 'column')) && + n.classList.add(`${i.containerModifierClass}grid-column`), + s.emitContainerClasses()), + p && !g ? s.unsetGrabCursor() : !p && g && s.setGrabCursor(), + ['navigation', 'pagination', 'scrollbar'].forEach((c) => { + if (typeof a[c] > 'u') return; + const w = i[c] && i[c].enabled, + b = a[c] && a[c].enabled; + w && !b && s[c].disable(), !w && b && s[c].enable(); + }); + const h = a.direction && a.direction !== i.direction, + v = i.loop && (a.slidesPerView !== i.slidesPerView || h), + E = i.loop; + h && t && s.changeDirection(), $(s.params, a); + const y = s.params.enabled, + d = s.params.loop; + Object.assign(s, { + allowTouchMove: s.params.allowTouchMove, + allowSlideNext: s.params.allowSlideNext, + allowSlidePrev: s.params.allowSlidePrev, + }), + m && !y ? s.disable() : !m && y && s.enable(), + (s.currentBreakpoint = o), + s.emit('_beforeBreakpoint', a), + t && + (v + ? (s.loopDestroy(), s.loopCreate(e), s.updateSlides()) + : !E && d + ? (s.loopCreate(e), s.updateSlides()) + : E && !d && s.loopDestroy()), + s.emit('breakpoint', a); +} +function Ft(s, e, t) { + if ((e === void 0 && (e = 'window'), !s || (e === 'container' && !t))) return; + let i = !1; + const n = B(), + r = e === 'window' ? n.innerHeight : t.clientHeight, + o = Object.keys(s).map((l) => { + if (typeof l == 'string' && l.indexOf('@') === 0) { + const a = parseFloat(l.substr(1)); + return { value: r * a, point: l }; + } + return { value: l, point: l }; + }); + o.sort((l, a) => parseInt(l.value, 10) - parseInt(a.value, 10)); + for (let l = 0; l < o.length; l += 1) { + const { point: a, value: u } = o[l]; + e === 'window' + ? n.matchMedia(`(min-width: ${u}px)`).matches && (i = a) + : u <= t.clientWidth && (i = a); + } + return i || 'max'; +} +var Ht = { setBreakpoint: Vt, getBreakpoint: Ft }; +function Nt(s, e) { + const t = []; + return ( + s.forEach((i) => { + typeof i == 'object' + ? Object.keys(i).forEach((n) => { + i[n] && t.push(e + n); + }) + : typeof i == 'string' && t.push(e + i); + }), + t + ); +} +function _t() { + const s = this, + { classNames: e, params: t, rtl: i, el: n, device: r } = s, + o = Nt( + [ + 'initialized', + t.direction, + { 'free-mode': s.params.freeMode && t.freeMode.enabled }, + { autoheight: t.autoHeight }, + { rtl: i }, + { grid: t.grid && t.grid.rows > 1 }, + { + 'grid-column': t.grid && t.grid.rows > 1 && t.grid.fill === 'column', + }, + { android: r.android }, + { ios: r.ios }, + { 'css-mode': t.cssMode }, + { centered: t.cssMode && t.centeredSlides }, + { 'watch-progress': t.watchSlidesProgress }, + ], + t.containerModifierClass, + ); + e.push(...o), n.classList.add(...e), s.emitContainerClasses(); +} +function Rt() { + const s = this, + { el: e, classNames: t } = s; + !e || + typeof e == 'string' || + (e.classList.remove(...t), s.emitContainerClasses()); +} +var Wt = { addClasses: _t, removeClasses: Rt }; +function qt() { + const s = this, + { isLocked: e, params: t } = s, + { slidesOffsetBefore: i } = t; + if (i) { + const n = s.slides.length - 1, + r = s.slidesGrid[n] + s.slidesSizesGrid[n] + i * 2; + s.isLocked = s.size > r; + } else s.isLocked = s.snapGrid.length === 1; + t.allowSlideNext === !0 && (s.allowSlideNext = !s.isLocked), + t.allowSlidePrev === !0 && (s.allowSlidePrev = !s.isLocked), + e && e !== s.isLocked && (s.isEnd = !1), + e !== s.isLocked && s.emit(s.isLocked ? 'lock' : 'unlock'); +} +var jt = { checkOverflow: qt }, + be = { + init: !0, + direction: 'horizontal', + oneWayMovement: !1, + swiperElementNodeName: 'SWIPER-CONTAINER', + touchEventsTarget: 'wrapper', + initialSlide: 0, + speed: 300, + cssMode: !1, + updateOnWindowResize: !0, + resizeObserver: !0, + nested: !1, + createElements: !1, + eventsPrefix: 'swiper', + 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: 0.5, + longSwipesMs: 300, + followFinger: !0, + allowTouchMove: !0, + threshold: 5, + touchMoveStopPropagation: !1, + touchStartPreventDefault: !0, + touchStartForcePreventDefault: !1, + touchReleaseOnEdges: !1, + uniqueNavElements: !0, + resistance: !0, + resistanceRatio: 0.85, + watchSlidesProgress: !1, + grabCursor: !1, + preventClicks: !0, + preventClicksPropagation: !0, + slideToClickedSlide: !1, + loop: !1, + loopAddBlankSlides: !0, + loopAdditionalSlides: 0, + loopPreventsSliding: !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-blank', + slideActiveClass: 'swiper-slide-active', + slideVisibleClass: 'swiper-slide-visible', + slideFullyVisibleClass: 'swiper-slide-fully-visible', + slideNextClass: 'swiper-slide-next', + slidePrevClass: 'swiper-slide-prev', + wrapperClass: 'swiper-wrapper', + lazyPreloaderClass: 'swiper-lazy-preloader', + lazyPreloadPrevNext: 0, + runCallbacksOnInit: !0, + _emitClasses: !1, + }; +function Yt(s, e) { + return function (i) { + i === void 0 && (i = {}); + const n = Object.keys(i)[0], + r = i[n]; + if (typeof r != 'object' || r === null) { + $(e, i); + return; + } + if ( + (s[n] === !0 && (s[n] = { enabled: !0 }), + n === 'navigation' && + s[n] && + s[n].enabled && + !s[n].prevEl && + !s[n].nextEl && + (s[n].auto = !0), + ['pagination', 'scrollbar'].indexOf(n) >= 0 && + s[n] && + s[n].enabled && + !s[n].el && + (s[n].auto = !0), + !(n in s && 'enabled' in r)) + ) { + $(e, i); + return; + } + typeof s[n] == 'object' && !('enabled' in s[n]) && (s[n].enabled = !0), + s[n] || (s[n] = { enabled: !1 }), + $(e, i); + }; +} +const re = { + eventsEmitter: We, + update: tt, + translate: lt, + transition: ft, + slide: bt, + loop: xt, + grabCursor: Mt, + events: $t, + breakpoints: Ht, + checkOverflow: jt, + classes: Wt, + }, + ne = {}; +class G { + constructor() { + let e, t; + for (var i = arguments.length, n = new Array(i), r = 0; r < i; r++) + n[r] = arguments[r]; + n.length === 1 && + n[0].constructor && + Object.prototype.toString.call(n[0]).slice(8, -1) === 'Object' + ? (t = n[0]) + : ([e, t] = n), + t || (t = {}), + (t = $({}, t)), + e && !t.el && (t.el = e); + const o = R(); + if ( + t.el && + typeof t.el == 'string' && + o.querySelectorAll(t.el).length > 1 + ) { + const f = []; + return ( + o.querySelectorAll(t.el).forEach((p) => { + const g = $({}, t, { el: p }); + f.push(new G(g)); + }), + f + ); + } + const l = this; + (l.__swiper__ = !0), + (l.support = xe()), + (l.device = Ee({ userAgent: t.userAgent })), + (l.browser = Ne()), + (l.eventsListeners = {}), + (l.eventsAnyListeners = []), + (l.modules = [...l.__modules__]), + t.modules && Array.isArray(t.modules) && l.modules.push(...t.modules); + const a = {}; + l.modules.forEach((f) => { + f({ + params: t, + swiper: l, + extendParams: Yt(t, a), + on: l.on.bind(l), + once: l.once.bind(l), + off: l.off.bind(l), + emit: l.emit.bind(l), + }); + }); + const u = $({}, be, a); + return ( + (l.params = $({}, u, ne, t)), + (l.originalParams = $({}, l.params)), + (l.passedParams = $({}, t)), + l.params && + l.params.on && + Object.keys(l.params.on).forEach((f) => { + l.on(f, l.params.on[f]); + }), + l.params && l.params.onAny && l.onAny(l.params.onAny), + Object.assign(l, { + enabled: l.params.enabled, + el: e, + classNames: [], + slides: [], + slidesGrid: [], + snapGrid: [], + slidesSizesGrid: [], + isHorizontal() { + return l.params.direction === 'horizontal'; + }, + isVertical() { + return l.params.direction === 'vertical'; + }, + activeIndex: 0, + realIndex: 0, + isBeginning: !0, + isEnd: !1, + translate: 0, + previousTranslate: 0, + progress: 0, + velocity: 0, + animating: !1, + cssOverflowAdjustment() { + return Math.trunc(this.translate / 2 ** 23) * 2 ** 23; + }, + allowSlideNext: l.params.allowSlideNext, + allowSlidePrev: l.params.allowSlidePrev, + 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: l.params.focusableElements, + lastClickTime: 0, + clickTimeout: void 0, + velocities: [], + allowMomentumBounce: void 0, + startMoving: void 0, + pointerId: null, + touchId: null, + }, + allowClick: !0, + allowTouchMove: l.params.allowTouchMove, + touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, + imagesToLoad: [], + imagesLoaded: 0, + }), + l.emit('_swiper'), + l.params.init && l.init(), + l + ); + } + getDirectionLabel(e) { + return this.isHorizontal() + ? e + : { + 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', + }[e]; + } + getSlideIndex(e) { + const { slidesEl: t, params: i } = this, + n = H(t, `.${i.slideClass}, swiper-slide`), + r = Q(n[0]); + return Q(e) - r; + } + getSlideIndexByData(e) { + return this.getSlideIndex( + this.slides.filter( + (t) => t.getAttribute('data-swiper-slide-index') * 1 === e, + )[0], + ); + } + recalcSlides() { + const e = this, + { slidesEl: t, params: i } = e; + e.slides = H(t, `.${i.slideClass}, swiper-slide`); + } + 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 i = this; + e = Math.min(Math.max(e, 0), 1); + const n = i.minTranslate(), + o = (i.maxTranslate() - n) * e + n; + i.translateTo(o, typeof t > 'u' ? 0 : t), + i.updateActiveIndex(), + i.updateSlidesClasses(); + } + emitContainerClasses() { + const e = this; + if (!e.params._emitClasses || !e.el) return; + const t = e.el.className + .split(' ') + .filter( + (i) => + i.indexOf('swiper') === 0 || + i.indexOf(e.params.containerModifierClass) === 0, + ); + e.emit('_containerClasses', t.join(' ')); + } + getSlideClasses(e) { + const t = this; + return t.destroyed + ? '' + : e.className + .split(' ') + .filter( + (i) => + i.indexOf('swiper-slide') === 0 || + i.indexOf(t.params.slideClass) === 0, + ) + .join(' '); + } + emitSlidesClasses() { + const e = this; + if (!e.params._emitClasses || !e.el) return; + const t = []; + e.slides.forEach((i) => { + const n = e.getSlideClasses(i); + t.push({ slideEl: i, classNames: n }), e.emit('_slideClass', i, n); + }), + e.emit('_slideClasses', t); + } + slidesPerViewDynamic(e, t) { + e === void 0 && (e = 'current'), t === void 0 && (t = !1); + const i = this, + { + params: n, + slides: r, + slidesGrid: o, + slidesSizesGrid: l, + size: a, + activeIndex: u, + } = i; + let f = 1; + if (typeof n.slidesPerView == 'number') return n.slidesPerView; + if (n.centeredSlides) { + let p = r[u] ? Math.ceil(r[u].swiperSlideSize) : 0, + g; + for (let m = u + 1; m < r.length; m += 1) + r[m] && + !g && + ((p += Math.ceil(r[m].swiperSlideSize)), (f += 1), p > a && (g = !0)); + for (let m = u - 1; m >= 0; m -= 1) + r[m] && + !g && + ((p += r[m].swiperSlideSize), (f += 1), p > a && (g = !0)); + } else if (e === 'current') + for (let p = u + 1; p < r.length; p += 1) + (t ? o[p] + l[p] - o[u] < a : o[p] - o[u] < a) && (f += 1); + else for (let p = u - 1; p >= 0; p -= 1) o[u] - o[p] < a && (f += 1); + return f; + } + update() { + const e = this; + if (!e || e.destroyed) return; + const { snapGrid: t, params: i } = e; + i.breakpoints && e.setBreakpoint(), + [...e.el.querySelectorAll('[loading="lazy"]')].forEach((o) => { + o.complete && X(e, o); + }), + e.updateSize(), + e.updateSlides(), + e.updateProgress(), + e.updateSlidesClasses(); + function n() { + const o = e.rtlTranslate ? e.translate * -1 : e.translate, + l = Math.min(Math.max(o, e.maxTranslate()), e.minTranslate()); + e.setTranslate(l), e.updateActiveIndex(), e.updateSlidesClasses(); + } + let r; + if (i.freeMode && i.freeMode.enabled && !i.cssMode) + n(), i.autoHeight && e.updateAutoHeight(); + else { + if ( + (i.slidesPerView === 'auto' || i.slidesPerView > 1) && + e.isEnd && + !i.centeredSlides + ) { + const o = e.virtual && i.virtual.enabled ? e.virtual.slides : e.slides; + r = e.slideTo(o.length - 1, 0, !1, !0); + } else r = e.slideTo(e.activeIndex, 0, !1, !0); + r || n(); + } + i.watchOverflow && t !== e.snapGrid && e.checkOverflow(), e.emit('update'); + } + changeDirection(e, t) { + t === void 0 && (t = !0); + const i = this, + n = i.params.direction; + return ( + e || (e = n === 'horizontal' ? 'vertical' : 'horizontal'), + e === n || + (e !== 'horizontal' && e !== 'vertical') || + (i.el.classList.remove(`${i.params.containerModifierClass}${n}`), + i.el.classList.add(`${i.params.containerModifierClass}${e}`), + i.emitContainerClasses(), + (i.params.direction = e), + i.slides.forEach((r) => { + e === 'vertical' ? (r.style.width = '') : (r.style.height = ''); + }), + i.emit('changeDirection'), + t && i.update()), + i + ); + } + changeLanguageDirection(e) { + const t = this; + (t.rtl && e === 'rtl') || + (!t.rtl && e === 'ltr') || + ((t.rtl = e === 'rtl'), + (t.rtlTranslate = t.params.direction === 'horizontal' && t.rtl), + t.rtl + ? (t.el.classList.add(`${t.params.containerModifierClass}rtl`), + (t.el.dir = 'rtl')) + : (t.el.classList.remove(`${t.params.containerModifierClass}rtl`), + (t.el.dir = 'ltr')), + t.update()); + } + mount(e) { + const t = this; + if (t.mounted) return !0; + let i = e || t.params.el; + if ((typeof i == 'string' && (i = document.querySelector(i)), !i)) + return !1; + (i.swiper = t), + i.parentNode && + i.parentNode.host && + i.parentNode.host.nodeName === + t.params.swiperElementNodeName.toUpperCase() && + (t.isElement = !0); + const n = () => + `.${(t.params.wrapperClass || '').trim().split(' ').join('.')}`; + let o = (() => + i && i.shadowRoot && i.shadowRoot.querySelector + ? i.shadowRoot.querySelector(n()) + : H(i, n())[0])(); + return ( + !o && + t.params.createElements && + ((o = q('div', t.params.wrapperClass)), + i.append(o), + H(i, `.${t.params.slideClass}`).forEach((l) => { + o.append(l); + })), + Object.assign(t, { + el: i, + wrapperEl: o, + slidesEl: + t.isElement && !i.parentNode.host.slideSlots ? i.parentNode.host : o, + hostEl: t.isElement ? i.parentNode.host : i, + mounted: !0, + rtl: i.dir.toLowerCase() === 'rtl' || _(i, 'direction') === 'rtl', + rtlTranslate: + t.params.direction === 'horizontal' && + (i.dir.toLowerCase() === 'rtl' || _(i, 'direction') === 'rtl'), + wrongRTL: _(o, 'display') === '-webkit-box', + }), + !0 + ); + } + init(e) { + const t = this; + if (t.initialized || t.mount(e) === !1) return t; + t.emit('beforeInit'), + t.params.breakpoints && t.setBreakpoint(), + t.addClasses(), + t.updateSize(), + t.updateSlides(), + t.params.watchOverflow && t.checkOverflow(), + t.params.grabCursor && t.enabled && t.setGrabCursor(), + t.params.loop && t.virtual && t.params.virtual.enabled + ? t.slideTo( + t.params.initialSlide + t.virtual.slidesBefore, + 0, + t.params.runCallbacksOnInit, + !1, + !0, + ) + : t.slideTo( + t.params.initialSlide, + 0, + t.params.runCallbacksOnInit, + !1, + !0, + ), + t.params.loop && t.loopCreate(), + t.attachEvents(); + const n = [...t.el.querySelectorAll('[loading="lazy"]')]; + return ( + t.isElement && n.push(...t.hostEl.querySelectorAll('[loading="lazy"]')), + n.forEach((r) => { + r.complete + ? X(t, r) + : r.addEventListener('load', (o) => { + X(t, o.target); + }); + }), + le(t), + (t.initialized = !0), + le(t), + t.emit('init'), + t.emit('afterInit'), + t + ); + } + destroy(e, t) { + e === void 0 && (e = !0), t === void 0 && (t = !0); + const i = this, + { params: n, el: r, wrapperEl: o, slides: l } = i; + return ( + typeof i.params > 'u' || + i.destroyed || + (i.emit('beforeDestroy'), + (i.initialized = !1), + i.detachEvents(), + n.loop && i.loopDestroy(), + t && + (i.removeClasses(), + r && typeof r != 'string' && r.removeAttribute('style'), + o && o.removeAttribute('style'), + l && + l.length && + l.forEach((a) => { + a.classList.remove( + n.slideVisibleClass, + n.slideFullyVisibleClass, + n.slideActiveClass, + n.slideNextClass, + n.slidePrevClass, + ), + a.removeAttribute('style'), + a.removeAttribute('data-swiper-slide-index'); + })), + i.emit('destroy'), + Object.keys(i.eventsListeners).forEach((a) => { + i.off(a); + }), + e !== !1 && + (i.el && typeof i.el != 'string' && (i.el.swiper = null), ze(i)), + (i.destroyed = !0)), + null + ); + } + static extendDefaults(e) { + $(ne, e); + } + static get extendedDefaults() { + return ne; + } + static get defaults() { + return be; + } + static installModule(e) { + G.prototype.__modules__ || (G.prototype.__modules__ = []); + const t = G.prototype.__modules__; + typeof e == 'function' && t.indexOf(e) < 0 && t.push(e); + } + static use(e) { + return Array.isArray(e) + ? (e.forEach((t) => G.installModule(t)), G) + : (G.installModule(e), G); + } +} +Object.keys(re).forEach((s) => { + Object.keys(re[s]).forEach((e) => { + G.prototype[e] = re[s][e]; + }); +}); +G.use([_e, Re]); +function ue(s, e, t, i) { + return ( + s.params.createElements && + Object.keys(i).forEach((n) => { + if (!t[n] && t.auto === !0) { + let r = H(s.el, `.${i[n]}`)[0]; + r || ((r = q('div', i[n])), (r.className = i[n]), s.el.append(r)), + (t[n] = r), + (e[n] = r); + } + }), + t + ); +} +function oe(s) { + let { swiper: e, extendParams: t, on: i, emit: n } = s; + t({ + navigation: { + nextEl: null, + prevEl: null, + hideOnClick: !1, + disabledClass: 'swiper-button-disabled', + hiddenClass: 'swiper-button-hidden', + lockClass: 'swiper-button-lock', + navigationDisabledClass: 'swiper-navigation-disabled', + }, + }), + (e.navigation = { nextEl: null, prevEl: null }); + function r(h) { + let v; + return h && + typeof h == 'string' && + e.isElement && + ((v = e.el.querySelector(h) || e.hostEl.querySelector(h)), v) + ? v + : (h && + (typeof h == 'string' && (v = [...document.querySelectorAll(h)]), + e.params.uniqueNavElements && + typeof h == 'string' && + v && + v.length > 1 && + e.el.querySelectorAll(h).length === 1 + ? (v = e.el.querySelector(h)) + : v && v.length === 1 && (v = v[0])), + h && !v ? h : v); + } + function o(h, v) { + const E = e.params.navigation; + (h = k(h)), + h.forEach((y) => { + y && + (y.classList[v ? 'add' : 'remove'](...E.disabledClass.split(' ')), + y.tagName === 'BUTTON' && (y.disabled = v), + e.params.watchOverflow && + e.enabled && + y.classList[e.isLocked ? 'add' : 'remove'](E.lockClass)); + }); + } + function l() { + const { nextEl: h, prevEl: v } = e.navigation; + if (e.params.loop) { + o(v, !1), o(h, !1); + return; + } + o(v, e.isBeginning && !e.params.rewind), o(h, e.isEnd && !e.params.rewind); + } + function a(h) { + h.preventDefault(), + !(e.isBeginning && !e.params.loop && !e.params.rewind) && + (e.slidePrev(), n('navigationPrev')); + } + function u(h) { + h.preventDefault(), + !(e.isEnd && !e.params.loop && !e.params.rewind) && + (e.slideNext(), n('navigationNext')); + } + function f() { + const h = e.params.navigation; + if ( + ((e.params.navigation = ue( + e, + e.originalParams.navigation, + e.params.navigation, + { nextEl: 'swiper-button-next', prevEl: 'swiper-button-prev' }, + )), + !(h.nextEl || h.prevEl)) + ) + return; + let v = r(h.nextEl), + E = r(h.prevEl); + Object.assign(e.navigation, { nextEl: v, prevEl: E }), + (v = k(v)), + (E = k(E)); + const y = (d, c) => { + d && d.addEventListener('click', c === 'next' ? u : a), + !e.enabled && d && d.classList.add(...h.lockClass.split(' ')); + }; + v.forEach((d) => y(d, 'next')), E.forEach((d) => y(d, 'prev')); + } + function p() { + let { nextEl: h, prevEl: v } = e.navigation; + (h = k(h)), (v = k(v)); + const E = (y, d) => { + y.removeEventListener('click', d === 'next' ? u : a), + y.classList.remove(...e.params.navigation.disabledClass.split(' ')); + }; + h.forEach((y) => E(y, 'next')), v.forEach((y) => E(y, 'prev')); + } + i('init', () => { + e.params.navigation.enabled === !1 ? m() : (f(), l()); + }), + i('toEdge fromEdge lock unlock', () => { + l(); + }), + i('destroy', () => { + p(); + }), + i('enable disable', () => { + let { nextEl: h, prevEl: v } = e.navigation; + if (((h = k(h)), (v = k(v)), e.enabled)) { + l(); + return; + } + [...h, ...v] + .filter((E) => !!E) + .forEach((E) => E.classList.add(e.params.navigation.lockClass)); + }), + i('click', (h, v) => { + let { nextEl: E, prevEl: y } = e.navigation; + (E = k(E)), (y = k(y)); + const d = v.target; + let c = y.includes(d) || E.includes(d); + if (e.isElement && !c) { + const w = v.path || (v.composedPath && v.composedPath()); + w && (c = w.find((b) => E.includes(b) || y.includes(b))); + } + if (e.params.navigation.hideOnClick && !c) { + if ( + e.pagination && + e.params.pagination && + e.params.pagination.clickable && + (e.pagination.el === d || e.pagination.el.contains(d)) + ) + return; + let w; + E.length + ? (w = E[0].classList.contains(e.params.navigation.hiddenClass)) + : y.length && + (w = y[0].classList.contains(e.params.navigation.hiddenClass)), + n(w === !0 ? 'navigationShow' : 'navigationHide'), + [...E, ...y] + .filter((b) => !!b) + .forEach((b) => + b.classList.toggle(e.params.navigation.hiddenClass), + ); + } + }); + const g = () => { + e.el.classList.remove( + ...e.params.navigation.navigationDisabledClass.split(' '), + ), + f(), + l(); + }, + m = () => { + e.el.classList.add( + ...e.params.navigation.navigationDisabledClass.split(' '), + ), + p(); + }; + Object.assign(e.navigation, { + enable: g, + disable: m, + update: l, + init: f, + destroy: p, + }); +} +function W(s) { + return ( + s === void 0 && (s = ''), + `.${s + .trim() + .replace(/([\.:!+\/])/g, '\\$1') + .replace(/ /g, '.')}` + ); +} +function de(s) { + let { swiper: e, extendParams: t, on: i, emit: n } = s; + const r = 'swiper-pagination'; + t({ + 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: (d) => d, + formatFractionTotal: (d) => d, + 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`, + }, + }), + (e.pagination = { el: null, bullets: [] }); + let o, + l = 0; + function a() { + return ( + !e.params.pagination.el || + !e.pagination.el || + (Array.isArray(e.pagination.el) && e.pagination.el.length === 0) + ); + } + function u(d, c) { + const { bulletActiveClass: w } = e.params.pagination; + d && + ((d = d[`${c === 'prev' ? 'previous' : 'next'}ElementSibling`]), + d && + (d.classList.add(`${w}-${c}`), + (d = d[`${c === 'prev' ? 'previous' : 'next'}ElementSibling`]), + d && d.classList.add(`${w}-${c}-${c}`))); + } + function f(d, c, w) { + if (((d = d % w), (c = c % w), c === d + 1)) return 'next'; + if (c === d - 1) return 'previous'; + } + function p(d) { + const c = d.target.closest(W(e.params.pagination.bulletClass)); + if (!c) return; + d.preventDefault(); + const w = Q(c) * e.params.slidesPerGroup; + if (e.params.loop) { + if (e.realIndex === w) return; + const b = f(e.realIndex, w, e.slides.length); + b === 'next' + ? e.slideNext() + : b === 'previous' + ? e.slidePrev() + : e.slideToLoop(w); + } else e.slideTo(w); + } + function g() { + const d = e.rtl, + c = e.params.pagination; + if (a()) return; + let w = e.pagination.el; + w = k(w); + let b, L; + const A = + e.virtual && e.params.virtual.enabled + ? e.virtual.slides.length + : e.slides.length, + z = e.params.loop + ? Math.ceil(A / e.params.slidesPerGroup) + : e.snapGrid.length; + if ( + (e.params.loop + ? ((L = e.previousRealIndex || 0), + (b = + e.params.slidesPerGroup > 1 + ? Math.floor(e.realIndex / e.params.slidesPerGroup) + : e.realIndex)) + : typeof e.snapIndex < 'u' + ? ((b = e.snapIndex), (L = e.previousSnapIndex)) + : ((L = e.previousIndex || 0), (b = e.activeIndex || 0)), + c.type === 'bullets' && + e.pagination.bullets && + e.pagination.bullets.length > 0) + ) { + const O = e.pagination.bullets; + let C, P, T; + if ( + (c.dynamicBullets && + ((o = ae(O[0], e.isHorizontal() ? 'width' : 'height', !0)), + w.forEach((S) => { + S.style[e.isHorizontal() ? 'width' : 'height'] = `${ + o * (c.dynamicMainBullets + 4) + }px`; + }), + c.dynamicMainBullets > 1 && + L !== void 0 && + ((l += b - (L || 0)), + l > c.dynamicMainBullets - 1 + ? (l = c.dynamicMainBullets - 1) + : l < 0 && (l = 0)), + (C = Math.max(b - l, 0)), + (P = C + (Math.min(O.length, c.dynamicMainBullets) - 1)), + (T = (P + C) / 2)), + O.forEach((S) => { + const x = [ + ...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map( + (M) => `${c.bulletActiveClass}${M}`, + ), + ] + .map((M) => + typeof M == 'string' && M.includes(' ') ? M.split(' ') : M, + ) + .flat(); + S.classList.remove(...x); + }), + w.length > 1) + ) + O.forEach((S) => { + const x = Q(S); + x === b + ? S.classList.add(...c.bulletActiveClass.split(' ')) + : e.isElement && S.setAttribute('part', 'bullet'), + c.dynamicBullets && + (x >= C && + x <= P && + S.classList.add(...`${c.bulletActiveClass}-main`.split(' ')), + x === C && u(S, 'prev'), + x === P && u(S, 'next')); + }); + else { + const S = O[b]; + if ( + (S && S.classList.add(...c.bulletActiveClass.split(' ')), + e.isElement && + O.forEach((x, M) => { + x.setAttribute('part', M === b ? 'bullet-active' : 'bullet'); + }), + c.dynamicBullets) + ) { + const x = O[C], + M = O[P]; + for (let I = C; I <= P; I += 1) + O[I] && + O[I].classList.add(...`${c.bulletActiveClass}-main`.split(' ')); + u(x, 'prev'), u(M, 'next'); + } + } + if (c.dynamicBullets) { + const S = Math.min(O.length, c.dynamicMainBullets + 4), + x = (o * S - o) / 2 - T * o, + M = d ? 'right' : 'left'; + O.forEach((I) => { + I.style[e.isHorizontal() ? M : 'top'] = `${x}px`; + }); + } + } + w.forEach((O, C) => { + if ( + (c.type === 'fraction' && + (O.querySelectorAll(W(c.currentClass)).forEach((P) => { + P.textContent = c.formatFractionCurrent(b + 1); + }), + O.querySelectorAll(W(c.totalClass)).forEach((P) => { + P.textContent = c.formatFractionTotal(z); + })), + c.type === 'progressbar') + ) { + let P; + c.progressbarOpposite + ? (P = e.isHorizontal() ? 'vertical' : 'horizontal') + : (P = e.isHorizontal() ? 'horizontal' : 'vertical'); + const T = (b + 1) / z; + let S = 1, + x = 1; + P === 'horizontal' ? (S = T) : (x = T), + O.querySelectorAll(W(c.progressbarFillClass)).forEach((M) => { + (M.style.transform = `translate3d(0,0,0) scaleX(${S}) scaleY(${x})`), + (M.style.transitionDuration = `${e.params.speed}ms`); + }); + } + c.type === 'custom' && c.renderCustom + ? ((O.innerHTML = c.renderCustom(e, b + 1, z)), + C === 0 && n('paginationRender', O)) + : (C === 0 && n('paginationRender', O), n('paginationUpdate', O)), + e.params.watchOverflow && + e.enabled && + O.classList[e.isLocked ? 'add' : 'remove'](c.lockClass); + }); + } + function m() { + const d = e.params.pagination; + if (a()) return; + const c = + e.virtual && e.params.virtual.enabled + ? e.virtual.slides.length + : e.grid && e.params.grid.rows > 1 + ? e.slides.length / Math.ceil(e.params.grid.rows) + : e.slides.length; + let w = e.pagination.el; + w = k(w); + let b = ''; + if (d.type === 'bullets') { + let L = e.params.loop + ? Math.ceil(c / e.params.slidesPerGroup) + : e.snapGrid.length; + e.params.freeMode && e.params.freeMode.enabled && L > c && (L = c); + for (let A = 0; A < L; A += 1) + d.renderBullet + ? (b += d.renderBullet.call(e, A, d.bulletClass)) + : (b += `<${d.bulletElement} ${ + e.isElement ? 'part="bullet"' : '' + } class="${d.bulletClass}">`); + } + d.type === 'fraction' && + (d.renderFraction + ? (b = d.renderFraction.call(e, d.currentClass, d.totalClass)) + : (b = ` / `)), + d.type === 'progressbar' && + (d.renderProgressbar + ? (b = d.renderProgressbar.call(e, d.progressbarFillClass)) + : (b = ``)), + (e.pagination.bullets = []), + w.forEach((L) => { + d.type !== 'custom' && (L.innerHTML = b || ''), + d.type === 'bullets' && + e.pagination.bullets.push(...L.querySelectorAll(W(d.bulletClass))); + }), + d.type !== 'custom' && n('paginationRender', w[0]); + } + function h() { + e.params.pagination = ue( + e, + e.originalParams.pagination, + e.params.pagination, + { el: 'swiper-pagination' }, + ); + const d = e.params.pagination; + if (!d.el) return; + let c; + typeof d.el == 'string' && e.isElement && (c = e.el.querySelector(d.el)), + !c && + typeof d.el == 'string' && + (c = [...document.querySelectorAll(d.el)]), + c || (c = d.el), + !(!c || c.length === 0) && + (e.params.uniqueNavElements && + typeof d.el == 'string' && + Array.isArray(c) && + c.length > 1 && + ((c = [...e.el.querySelectorAll(d.el)]), + c.length > 1 && + (c = c.filter((w) => Te(w, '.swiper')[0] === e.el)[0])), + Array.isArray(c) && c.length === 1 && (c = c[0]), + Object.assign(e.pagination, { el: c }), + (c = k(c)), + c.forEach((w) => { + d.type === 'bullets' && + d.clickable && + w.classList.add(...(d.clickableClass || '').split(' ')), + w.classList.add(d.modifierClass + d.type), + w.classList.add( + e.isHorizontal() ? d.horizontalClass : d.verticalClass, + ), + d.type === 'bullets' && + d.dynamicBullets && + (w.classList.add(`${d.modifierClass}${d.type}-dynamic`), + (l = 0), + d.dynamicMainBullets < 1 && (d.dynamicMainBullets = 1)), + d.type === 'progressbar' && + d.progressbarOpposite && + w.classList.add(d.progressbarOppositeClass), + d.clickable && w.addEventListener('click', p), + e.enabled || w.classList.add(d.lockClass); + })); + } + function v() { + const d = e.params.pagination; + if (a()) return; + let c = e.pagination.el; + c && + ((c = k(c)), + c.forEach((w) => { + w.classList.remove(d.hiddenClass), + w.classList.remove(d.modifierClass + d.type), + w.classList.remove( + e.isHorizontal() ? d.horizontalClass : d.verticalClass, + ), + d.clickable && + (w.classList.remove(...(d.clickableClass || '').split(' ')), + w.removeEventListener('click', p)); + })), + e.pagination.bullets && + e.pagination.bullets.forEach((w) => + w.classList.remove(...d.bulletActiveClass.split(' ')), + ); + } + i('changeDirection', () => { + if (!e.pagination || !e.pagination.el) return; + const d = e.params.pagination; + let { el: c } = e.pagination; + (c = k(c)), + c.forEach((w) => { + w.classList.remove(d.horizontalClass, d.verticalClass), + w.classList.add( + e.isHorizontal() ? d.horizontalClass : d.verticalClass, + ); + }); + }), + i('init', () => { + e.params.pagination.enabled === !1 ? y() : (h(), m(), g()); + }), + i('activeIndexChange', () => { + typeof e.snapIndex > 'u' && g(); + }), + i('snapIndexChange', () => { + g(); + }), + i('snapGridLengthChange', () => { + m(), g(); + }), + i('destroy', () => { + v(); + }), + i('enable disable', () => { + let { el: d } = e.pagination; + d && + ((d = k(d)), + d.forEach((c) => + c.classList[e.enabled ? 'remove' : 'add']( + e.params.pagination.lockClass, + ), + )); + }), + i('lock unlock', () => { + g(); + }), + i('click', (d, c) => { + const w = c.target, + b = k(e.pagination.el); + if ( + e.params.pagination.el && + e.params.pagination.hideOnClick && + b && + b.length > 0 && + !w.classList.contains(e.params.pagination.bulletClass) + ) { + if ( + e.navigation && + ((e.navigation.nextEl && w === e.navigation.nextEl) || + (e.navigation.prevEl && w === e.navigation.prevEl)) + ) + return; + const L = b[0].classList.contains(e.params.pagination.hiddenClass); + n(L === !0 ? 'paginationShow' : 'paginationHide'), + b.forEach((A) => A.classList.toggle(e.params.pagination.hiddenClass)); + } + }); + const E = () => { + e.el.classList.remove(e.params.pagination.paginationDisabledClass); + let { el: d } = e.pagination; + d && + ((d = k(d)), + d.forEach((c) => + c.classList.remove(e.params.pagination.paginationDisabledClass), + )), + h(), + m(), + g(); + }, + y = () => { + e.el.classList.add(e.params.pagination.paginationDisabledClass); + let { el: d } = e.pagination; + d && + ((d = k(d)), + d.forEach((c) => + c.classList.add(e.params.pagination.paginationDisabledClass), + )), + v(); + }; + Object.assign(e.pagination, { + enable: E, + disable: y, + render: m, + update: g, + init: h, + destroy: v, + }); +} +function ce(s) { + let { swiper: e, extendParams: t, on: i, emit: n } = s; + const r = R(); + let o = !1, + l = null, + a = null, + u, + f, + p, + g; + t({ + 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', + }, + }), + (e.scrollbar = { el: null, dragEl: null }); + function m() { + if (!e.params.scrollbar.el || !e.scrollbar.el) return; + const { scrollbar: T, rtlTranslate: S } = e, + { dragEl: x, el: M } = T, + I = e.params.scrollbar, + V = e.params.loop ? e.progressLoop : e.progress; + let F = f, + D = (p - f) * V; + S + ? ((D = -D), D > 0 ? ((F = f - D), (D = 0)) : -D + f > p && (F = p + D)) + : D < 0 + ? ((F = f + D), (D = 0)) + : D + f > p && (F = p - D), + e.isHorizontal() + ? ((x.style.transform = `translate3d(${D}px, 0, 0)`), + (x.style.width = `${F}px`)) + : ((x.style.transform = `translate3d(0px, ${D}px, 0)`), + (x.style.height = `${F}px`)), + I.hide && + (clearTimeout(l), + (M.style.opacity = 1), + (l = setTimeout(() => { + (M.style.opacity = 0), (M.style.transitionDuration = '400ms'); + }, 1e3))); + } + function h(T) { + !e.params.scrollbar.el || + !e.scrollbar.el || + (e.scrollbar.dragEl.style.transitionDuration = `${T}ms`); + } + function v() { + if (!e.params.scrollbar.el || !e.scrollbar.el) return; + const { scrollbar: T } = e, + { dragEl: S, el: x } = T; + (S.style.width = ''), + (S.style.height = ''), + (p = e.isHorizontal() ? x.offsetWidth : x.offsetHeight), + (g = + e.size / + (e.virtualSize + + e.params.slidesOffsetBefore - + (e.params.centeredSlides ? e.snapGrid[0] : 0))), + e.params.scrollbar.dragSize === 'auto' + ? (f = p * g) + : (f = parseInt(e.params.scrollbar.dragSize, 10)), + e.isHorizontal() + ? (S.style.width = `${f}px`) + : (S.style.height = `${f}px`), + g >= 1 ? (x.style.display = 'none') : (x.style.display = ''), + e.params.scrollbar.hide && (x.style.opacity = 0), + e.params.watchOverflow && + e.enabled && + T.el.classList[e.isLocked ? 'add' : 'remove']( + e.params.scrollbar.lockClass, + ); + } + function E(T) { + return e.isHorizontal() ? T.clientX : T.clientY; + } + function y(T) { + const { scrollbar: S, rtlTranslate: x } = e, + { el: M } = S; + let I; + (I = + (E(T) - + Ge(M)[e.isHorizontal() ? 'left' : 'top'] - + (u !== null ? u : f / 2)) / + (p - f)), + (I = Math.max(Math.min(I, 1), 0)), + x && (I = 1 - I); + const V = e.minTranslate() + (e.maxTranslate() - e.minTranslate()) * I; + e.updateProgress(V), + e.setTranslate(V), + e.updateActiveIndex(), + e.updateSlidesClasses(); + } + function d(T) { + const S = e.params.scrollbar, + { scrollbar: x, wrapperEl: M } = e, + { el: I, dragEl: V } = x; + (o = !0), + (u = + T.target === V + ? E(T) - + T.target.getBoundingClientRect()[e.isHorizontal() ? 'left' : 'top'] + : null), + T.preventDefault(), + T.stopPropagation(), + (M.style.transitionDuration = '100ms'), + (V.style.transitionDuration = '100ms'), + y(T), + clearTimeout(a), + (I.style.transitionDuration = '0ms'), + S.hide && (I.style.opacity = 1), + e.params.cssMode && (e.wrapperEl.style['scroll-snap-type'] = 'none'), + n('scrollbarDragStart', T); + } + function c(T) { + const { scrollbar: S, wrapperEl: x } = e, + { el: M, dragEl: I } = S; + o && + (T.preventDefault && T.cancelable + ? T.preventDefault() + : (T.returnValue = !1), + y(T), + (x.style.transitionDuration = '0ms'), + (M.style.transitionDuration = '0ms'), + (I.style.transitionDuration = '0ms'), + n('scrollbarDragMove', T)); + } + function w(T) { + const S = e.params.scrollbar, + { scrollbar: x, wrapperEl: M } = e, + { el: I } = x; + o && + ((o = !1), + e.params.cssMode && + ((e.wrapperEl.style['scroll-snap-type'] = ''), + (M.style.transitionDuration = '')), + S.hide && + (clearTimeout(a), + (a = U(() => { + (I.style.opacity = 0), (I.style.transitionDuration = '400ms'); + }, 1e3))), + n('scrollbarDragEnd', T), + S.snapOnRelease && e.slideToClosest()); + } + function b(T) { + const { scrollbar: S, params: x } = e, + M = S.el; + if (!M) return; + const I = M, + V = x.passiveListeners ? { passive: !1, capture: !1 } : !1, + F = x.passiveListeners ? { passive: !0, capture: !1 } : !1; + if (!I) return; + const D = T === 'on' ? 'addEventListener' : 'removeEventListener'; + I[D]('pointerdown', d, V), + r[D]('pointermove', c, V), + r[D]('pointerup', w, F); + } + function L() { + !e.params.scrollbar.el || !e.scrollbar.el || b('on'); + } + function A() { + !e.params.scrollbar.el || !e.scrollbar.el || b('off'); + } + function z() { + const { scrollbar: T, el: S } = e; + e.params.scrollbar = ue(e, e.originalParams.scrollbar, e.params.scrollbar, { + el: 'swiper-scrollbar', + }); + const x = e.params.scrollbar; + if (!x.el) return; + let M; + if ( + (typeof x.el == 'string' && e.isElement && (M = e.el.querySelector(x.el)), + !M && typeof x.el == 'string') + ) { + if (((M = r.querySelectorAll(x.el)), !M.length)) return; + } else M || (M = x.el); + e.params.uniqueNavElements && + typeof x.el == 'string' && + M.length > 1 && + S.querySelectorAll(x.el).length === 1 && + (M = S.querySelector(x.el)), + M.length > 0 && (M = M[0]), + M.classList.add(e.isHorizontal() ? x.horizontalClass : x.verticalClass); + let I; + M && + ((I = M.querySelector(W(e.params.scrollbar.dragClass))), + I || ((I = q('div', e.params.scrollbar.dragClass)), M.append(I))), + Object.assign(T, { el: M, dragEl: I }), + x.draggable && L(), + M && + M.classList[e.enabled ? 'remove' : 'add']( + ...N(e.params.scrollbar.lockClass), + ); + } + function O() { + const T = e.params.scrollbar, + S = e.scrollbar.el; + S && + S.classList.remove( + ...N(e.isHorizontal() ? T.horizontalClass : T.verticalClass), + ), + A(); + } + i('changeDirection', () => { + if (!e.scrollbar || !e.scrollbar.el) return; + const T = e.params.scrollbar; + let { el: S } = e.scrollbar; + (S = k(S)), + S.forEach((x) => { + x.classList.remove(T.horizontalClass, T.verticalClass), + x.classList.add( + e.isHorizontal() ? T.horizontalClass : T.verticalClass, + ); + }); + }), + i('init', () => { + e.params.scrollbar.enabled === !1 ? P() : (z(), v(), m()); + }), + i('update resize observerUpdate lock unlock changeDirection', () => { + v(); + }), + i('setTranslate', () => { + m(); + }), + i('setTransition', (T, S) => { + h(S); + }), + i('enable disable', () => { + const { el: T } = e.scrollbar; + T && + T.classList[e.enabled ? 'remove' : 'add']( + ...N(e.params.scrollbar.lockClass), + ); + }), + i('destroy', () => { + O(); + }); + const C = () => { + e.el.classList.remove(...N(e.params.scrollbar.scrollbarDisabledClass)), + e.scrollbar.el && + e.scrollbar.el.classList.remove( + ...N(e.params.scrollbar.scrollbarDisabledClass), + ), + z(), + v(), + m(); + }, + P = () => { + e.el.classList.add(...N(e.params.scrollbar.scrollbarDisabledClass)), + e.scrollbar.el && + e.scrollbar.el.classList.add( + ...N(e.params.scrollbar.scrollbarDisabledClass), + ), + O(); + }; + Object.assign(e.scrollbar, { + enable: C, + disable: P, + updateSize: v, + setTranslate: m, + init: z, + destroy: O, + }); +} +class Xt extends window.HTMLElement { + constructor() { + super(), + (this.slider = new G('.swiper', { + modules: [oe, de, ce], + slidesPerView: 4, + autoplay: !1, + Scrollbar: !0, + spaceBetween: 10, + })); + } +} +class Ut extends window.HTMLElement { + constructor() { + super(), + console.log('test'), + (this.slider = new G('.menu.swiper', { + modules: [oe, de, ce], + slidesPerView: 4, + autoplay: !1, + scrollbar: { draggable: !0 }, + spaceBetween: 10, + })), + (this.handleResize = this.handleResize.bind(this)); + } + connectedCallback() { + window.addEventListener('resize', this.handleResize), + window.innerWidth > 768 ? this.destroySlider() : this.initSlider(); + } + handleResize() { + window.innerWidth > 768 ? this.destroySlider() : this.initSlider(); + } + initSlider() { + (this.slider = new G('.menu.swiper', { + modules: [oe, de, ce], + slidesPerView: 4, + autoplay: !1, + scrollbar: { draggable: !0 }, + spaceBetween: 10, + })), + console.log('slider init', this.slider); + } + destroySlider() { + this.slider && + (this.slider.destroy(!0, !0), console.log('this slider', this.slider)); + } +} +window.customElements.define('swiper-slider', Xt); +window.customElements.define('menu-swiper', Ut); diff --git a/assets/mm-base-056c9d6d.css b/assets/mm-base-056c9d6d.css new file mode 100644 index 0000000000..3317135bf4 --- /dev/null +++ b/assets/mm-base-056c9d6d.css @@ -0,0 +1,112 @@ +:root { + font-family: var(--font-body-family); + line-height: 1.5; + font-weight: var(--font-body-weight); + font-size: var(--font-size-base); + color: hsla(var(--color-accent) / 1); + background-color: hsla(var(--color-surface) / 1); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} +.font-scale { + font-family: Rexlia, sans-serif; +} +body { + margin: 0; + padding: 0; + display: grid; + place-items: center; + min-height: 100vh; +} +.font-script { + font-family: var(--font-script-family); +} +main { + max-width: 100%; +} +a { + color: hsla(var(--color-accent) / 1); + text-decoration: none; +} +h1, +h2, +p { + margin: 0; + padding: 0; +} +h1 { + font-family: var(--font-heading-family); + font-size: calc(2.5 * var(--font-size-xl)); + line-height: 1.1; +} +button { + border-radius: 0.5rem; + border: 1px solid transparent; + padding: 0.75rem 1.5rem; + font-size: var(--font-size-base); + font-weight: 700; + font-family: var(--font-body-family); + background-color: hsla(var(--color-contrast) / 1); + color: hsla(var(--color-primary) / 1); + cursor: pointer; + margin: 2rem 0; +} +button:focus, +button:focus-visible { + outline: 4px auto hsla(var(--color-primary) / 1); +} +.container { + max-width: 800px; + margin: 0 auto; + padding: 0 2rem; +} +.mm-grid { + display: grid; +} +.swiper-scrollbar-drag { + display: block !important; + background: black; +} +.announcement-bar-section { + width: 100% !important; +} +.swiper-button-prev, +.swiper-button-next { + display: block !important; +} +.section-header { + width: 100% !important; +} +.justify-between { + justify-content: space-between; +} +.shopify-section.shopify-section-group-footer-group { + width: 100% !important; +} +.swiper-button-next:after, +.swiper-button-prev:after { + display: none; +} +.swiper-horizontal > .swiper-scrollbar, +.swiper-scrollbar.swiper-scrollbar-horizontal { + z-index: 1 !important; +} +.swiper-button-prev, +.swiper-button-next { + z-index: 1 !important; +} +.article-template__content .workshops .row { + display: flex; + flex-direction: column; + align-items: center; +} +.article-template .page-width { + padding-left: 16px; + padding-right: 16px; +} +.overflow-clip { + overflow: clip; +} diff --git a/assets/mm-index-b9f6c250.js b/assets/mm-index-b9f6c250.js new file mode 100644 index 0000000000..e53c522933 --- /dev/null +++ b/assets/mm-index-b9f6c250.js @@ -0,0 +1,10449 @@ +/* empty css */ var Yt = !1, + qt = !1, + we = [], + jt = -1; +function Er(t) { + Tr(t); +} +function Tr(t) { + we.includes(t) || we.push(t), _r(); +} +function Mr(t) { + let e = we.indexOf(t); + e !== -1 && e > jt && we.splice(e, 1); +} +function _r() { + !qt && !Yt && ((Yt = !0), queueMicrotask(Cr)); +} +function Cr() { + (Yt = !1), (qt = !0); + for (let t = 0; t < we.length; t++) we[t](), (jt = t); + (we.length = 0), (jt = -1), (qt = !1); +} +var Ie, + Me, + Oe, + ns, + Wt = !0; +function Pr(t) { + (Wt = !1), t(), (Wt = !0); +} +function Ar(t) { + (Ie = t.reactive), + (Oe = t.release), + (Me = (e) => + t.effect(e, { + scheduler: (i) => { + Wt ? Er(i) : i(); + }, + })), + (ns = t.raw); +} +function Hi(t) { + Me = t; +} +function Lr(t) { + let e = () => {}; + return [ + (s) => { + let r = Me(s); + return ( + t._x_effects || + ((t._x_effects = new Set()), + (t._x_runEffects = () => { + t._x_effects.forEach((n) => n()); + })), + t._x_effects.add(r), + (e = () => { + r !== void 0 && (t._x_effects.delete(r), Oe(r)); + }), + r + ); + }, + () => { + e(); + }, + ]; +} +function as(t, e) { + let i = !0, + s, + r = Me(() => { + let n = t(); + JSON.stringify(n), + i + ? (s = n) + : queueMicrotask(() => { + e(n, s), (s = n); + }), + (i = !1); + }); + return () => Oe(r); +} +var os = [], + ls = [], + ds = []; +function Ir(t) { + ds.push(t); +} +function ui(t, e) { + typeof e == 'function' + ? (t._x_cleanups || (t._x_cleanups = []), t._x_cleanups.push(e)) + : ((e = t), ls.push(e)); +} +function cs(t) { + os.push(t); +} +function us(t, e, i) { + t._x_attributeCleanups || (t._x_attributeCleanups = {}), + t._x_attributeCleanups[e] || (t._x_attributeCleanups[e] = []), + t._x_attributeCleanups[e].push(i); +} +function fs(t, e) { + t._x_attributeCleanups && + Object.entries(t._x_attributeCleanups).forEach(([i, s]) => { + (e === void 0 || e.includes(i)) && + (s.forEach((r) => r()), delete t._x_attributeCleanups[i]); + }); +} +function Or(t) { + var e, i; + for ( + (e = t._x_effects) == null || e.forEach(Mr); + (i = t._x_cleanups) != null && i.length; + + ) + t._x_cleanups.pop()(); +} +var fi = new MutationObserver(gi), + pi = !1; +function mi() { + fi.observe(document, { + subtree: !0, + childList: !0, + attributes: !0, + attributeOldValue: !0, + }), + (pi = !0); +} +function ps() { + zr(), fi.disconnect(), (pi = !1); +} +var Be = []; +function zr() { + let t = fi.takeRecords(); + Be.push(() => t.length > 0 && gi(t)); + let e = Be.length; + queueMicrotask(() => { + if (Be.length === e) for (; Be.length > 0; ) Be.shift()(); + }); +} +function Y(t) { + if (!pi) return t(); + ps(); + let e = t(); + return mi(), e; +} +var hi = !1, + ut = []; +function $r() { + hi = !0; +} +function Dr() { + (hi = !1), gi(ut), (ut = []); +} +function gi(t) { + if (hi) { + ut = ut.concat(t); + return; + } + let e = new Set(), + i = new Set(), + s = new Map(), + r = new Map(); + for (let n = 0; n < t.length; n++) + if ( + !t[n].target._x_ignoreMutationObserver && + (t[n].type === 'childList' && + (t[n].addedNodes.forEach((a) => a.nodeType === 1 && e.add(a)), + t[n].removedNodes.forEach((a) => a.nodeType === 1 && i.add(a))), + t[n].type === 'attributes') + ) { + let a = t[n].target, + l = t[n].attributeName, + o = t[n].oldValue, + f = () => { + s.has(a) || s.set(a, []), + s.get(a).push({ name: l, value: a.getAttribute(l) }); + }, + c = () => { + r.has(a) || r.set(a, []), r.get(a).push(l); + }; + a.hasAttribute(l) && o === null + ? f() + : a.hasAttribute(l) + ? (c(), f()) + : c(); + } + r.forEach((n, a) => { + fs(a, n); + }), + s.forEach((n, a) => { + os.forEach((l) => l(a, n)); + }); + for (let n of i) e.has(n) || ls.forEach((a) => a(n)); + e.forEach((n) => { + (n._x_ignoreSelf = !0), (n._x_ignore = !0); + }); + for (let n of e) + i.has(n) || + (n.isConnected && + (delete n._x_ignoreSelf, + delete n._x_ignore, + ds.forEach((a) => a(n)), + (n._x_ignore = !0), + (n._x_ignoreSelf = !0))); + e.forEach((n) => { + delete n._x_ignoreSelf, delete n._x_ignore; + }), + (e = null), + (i = null), + (s = null), + (r = null); +} +function ms(t) { + return Ue(Pe(t)); +} +function Ke(t, e, i) { + return ( + (t._x_dataStack = [e, ...Pe(i || t)]), + () => { + t._x_dataStack = t._x_dataStack.filter((s) => s !== e); + } + ); +} +function Pe(t) { + return t._x_dataStack + ? t._x_dataStack + : typeof ShadowRoot == 'function' && t instanceof ShadowRoot + ? Pe(t.host) + : t.parentNode + ? Pe(t.parentNode) + : []; +} +function Ue(t) { + return new Proxy({ objects: t }, kr); +} +var kr = { + ownKeys({ objects: t }) { + return Array.from(new Set(t.flatMap((e) => Object.keys(e)))); + }, + has({ objects: t }, e) { + return e == Symbol.unscopables + ? !1 + : t.some( + (i) => + Object.prototype.hasOwnProperty.call(i, e) || Reflect.has(i, e), + ); + }, + get({ objects: t }, e, i) { + return e == 'toJSON' + ? Rr + : Reflect.get(t.find((s) => Reflect.has(s, e)) || {}, e, i); + }, + set({ objects: t }, e, i, s) { + const r = + t.find((a) => Object.prototype.hasOwnProperty.call(a, e)) || + t[t.length - 1], + n = Object.getOwnPropertyDescriptor(r, e); + return n != null && n.set && n != null && n.get + ? n.set.call(s, i) || !0 + : Reflect.set(r, e, i); + }, +}; +function Rr() { + return Reflect.ownKeys(this).reduce( + (e, i) => ((e[i] = Reflect.get(this, i)), e), + {}, + ); +} +function hs(t) { + let e = (s) => typeof s == 'object' && !Array.isArray(s) && s !== null, + i = (s, r = '') => { + Object.entries(Object.getOwnPropertyDescriptors(s)).forEach( + ([n, { value: a, enumerable: l }]) => { + if ( + l === !1 || + a === void 0 || + (typeof a == 'object' && a !== null && a.__v_skip) + ) + return; + let o = r === '' ? n : `${r}.${n}`; + typeof a == 'object' && a !== null && a._x_interceptor + ? (s[n] = a.initialize(t, o, n)) + : e(a) && a !== s && !(a instanceof Element) && i(a, o); + }, + ); + }; + return i(t); +} +function gs(t, e = () => {}) { + let i = { + initialValue: void 0, + _x_interceptor: !0, + initialize(s, r, n) { + return t( + this.initialValue, + () => Br(s, r), + (a) => Kt(s, r, a), + r, + n, + ); + }, + }; + return ( + e(i), + (s) => { + if (typeof s == 'object' && s !== null && s._x_interceptor) { + let r = i.initialize.bind(i); + i.initialize = (n, a, l) => { + let o = s.initialize(n, a, l); + return (i.initialValue = o), r(n, a, l); + }; + } else i.initialValue = s; + return i; + } + ); +} +function Br(t, e) { + return e.split('.').reduce((i, s) => i[s], t); +} +function Kt(t, e, i) { + if ((typeof e == 'string' && (e = e.split('.')), e.length === 1)) t[e[0]] = i; + else { + if (e.length === 0) throw error; + return t[e[0]] || (t[e[0]] = {}), Kt(t[e[0]], e.slice(1), i); + } +} +var vs = {}; +function re(t, e) { + vs[t] = e; +} +function Ut(t, e) { + let i = Hr(e); + return ( + Object.entries(vs).forEach(([s, r]) => { + Object.defineProperty(t, `$${s}`, { + get() { + return r(e, i); + }, + enumerable: !1, + }); + }), + t + ); +} +function Hr(t) { + let [e, i] = Es(t), + s = { interceptor: gs, ...e }; + return ui(t, i), s; +} +function Nr(t, e, i, ...s) { + try { + return i(...s); + } catch (r) { + je(r, t, e); + } +} +function je(t, e, i = void 0) { + (t = Object.assign(t ?? { message: 'No error message given.' }, { + el: e, + expression: i, + })), + console.warn( + `Alpine Expression Error: ${t.message} + +${ + i + ? 'Expression: "' + + i + + `" + +` + : '' +}`, + e, + ), + setTimeout(() => { + throw t; + }, 0); +} +var lt = !0; +function ws(t) { + let e = lt; + lt = !1; + let i = t(); + return (lt = e), i; +} +function ye(t, e, i = {}) { + let s; + return Z(t, e)((r) => (s = r), i), s; +} +function Z(...t) { + return ys(...t); +} +var ys = bs; +function Gr(t) { + ys = t; +} +function bs(t, e) { + let i = {}; + Ut(i, t); + let s = [i, ...Pe(t)], + r = typeof e == 'function' ? Fr(s, e) : Xr(s, e, t); + return Nr.bind(null, t, e, r); +} +function Fr(t, e) { + return (i = () => {}, { scope: s = {}, params: r = [] } = {}) => { + let n = e.apply(Ue([s, ...t]), r); + ft(i, n); + }; +} +var zt = {}; +function Vr(t, e) { + if (zt[t]) return zt[t]; + let i = Object.getPrototypeOf(async function () {}).constructor, + s = + /^[\n\s]*if.*\(.*\)/.test(t.trim()) || /^(let|const)\s/.test(t.trim()) + ? `(async()=>{ ${t} })()` + : t, + n = (() => { + try { + let a = new i( + ['__self', 'scope'], + `with (scope) { __self.result = ${s} }; __self.finished = true; return __self.result;`, + ); + return Object.defineProperty(a, 'name', { value: `[Alpine] ${t}` }), a; + } catch (a) { + return je(a, e, t), Promise.resolve(); + } + })(); + return (zt[t] = n), n; +} +function Xr(t, e, i) { + let s = Vr(e, i); + return (r = () => {}, { scope: n = {}, params: a = [] } = {}) => { + (s.result = void 0), (s.finished = !1); + let l = Ue([n, ...t]); + if (typeof s == 'function') { + let o = s(s, l).catch((f) => je(f, i, e)); + s.finished + ? (ft(r, s.result, l, a, i), (s.result = void 0)) + : o + .then((f) => { + ft(r, f, l, a, i); + }) + .catch((f) => je(f, i, e)) + .finally(() => (s.result = void 0)); + } + }; +} +function ft(t, e, i, s, r) { + if (lt && typeof e == 'function') { + let n = e.apply(i, s); + n instanceof Promise + ? n.then((a) => ft(t, a, i, s)).catch((a) => je(a, r, e)) + : t(n); + } else + typeof e == 'object' && e instanceof Promise ? e.then((n) => t(n)) : t(e); +} +var vi = 'x-'; +function ze(t = '') { + return vi + t; +} +function Yr(t) { + vi = t; +} +var pt = {}; +function j(t, e) { + return ( + (pt[t] = e), + { + before(i) { + if (!pt[i]) { + console.warn( + String.raw`Cannot find directive \`${i}\`. \`${t}\` will use the default order of execution`, + ); + return; + } + const s = ve.indexOf(i); + ve.splice(s >= 0 ? s : ve.indexOf('DEFAULT'), 0, t); + }, + } + ); +} +function qr(t) { + return Object.keys(pt).includes(t); +} +function wi(t, e, i) { + if (((e = Array.from(e)), t._x_virtualDirectives)) { + let n = Object.entries(t._x_virtualDirectives).map(([l, o]) => ({ + name: l, + value: o, + })), + a = xs(n); + (n = n.map((l) => + a.find((o) => o.name === l.name) + ? { name: `x-bind:${l.name}`, value: `"${l.value}"` } + : l, + )), + (e = e.concat(n)); + } + let s = {}; + return e + .map(_s((n, a) => (s[n] = a))) + .filter(Ps) + .map(Kr(s, i)) + .sort(Ur) + .map((n) => Wr(t, n)); +} +function xs(t) { + return Array.from(t) + .map(_s()) + .filter((e) => !Ps(e)); +} +var Jt = !1, + Ge = new Map(), + Ss = Symbol(); +function jr(t) { + Jt = !0; + let e = Symbol(); + (Ss = e), Ge.set(e, []); + let i = () => { + for (; Ge.get(e).length; ) Ge.get(e).shift()(); + Ge.delete(e); + }, + s = () => { + (Jt = !1), i(); + }; + t(i), s(); +} +function Es(t) { + let e = [], + i = (l) => e.push(l), + [s, r] = Lr(t); + return ( + e.push(r), + [ + { + Alpine: Ze, + effect: s, + cleanup: i, + evaluateLater: Z.bind(Z, t), + evaluate: ye.bind(ye, t), + }, + () => e.forEach((l) => l()), + ] + ); +} +function Wr(t, e) { + let i = () => {}, + s = pt[e.type] || i, + [r, n] = Es(t); + us(t, e.original, n); + let a = () => { + t._x_ignore || + t._x_ignoreSelf || + (s.inline && s.inline(t, e, r), + (s = s.bind(s, t, e, r)), + Jt ? Ge.get(Ss).push(s) : s()); + }; + return (a.runCleanups = n), a; +} +var Ts = + (t, e) => + ({ name: i, value: s }) => ( + i.startsWith(t) && (i = i.replace(t, e)), { name: i, value: s } + ), + Ms = (t) => t; +function _s(t = () => {}) { + return ({ name: e, value: i }) => { + let { name: s, value: r } = Cs.reduce((n, a) => a(n), { + name: e, + value: i, + }); + return s !== e && t(s, e), { name: s, value: r }; + }; +} +var Cs = []; +function yi(t) { + Cs.push(t); +} +function Ps({ name: t }) { + return As().test(t); +} +var As = () => new RegExp(`^${vi}([^:^.]+)\\b`); +function Kr(t, e) { + return ({ name: i, value: s }) => { + let r = i.match(As()), + n = i.match(/:([a-zA-Z0-9\-_:]+)/), + a = i.match(/\.[^.\]]+(?=[^\]]*$)/g) || [], + l = e || t[i] || i; + return { + type: r ? r[1] : null, + value: n ? n[1] : null, + modifiers: a.map((o) => o.replace('.', '')), + expression: s, + original: l, + }; + }; +} +var Zt = 'DEFAULT', + ve = [ + 'ignore', + 'ref', + 'data', + 'id', + 'anchor', + 'bind', + 'init', + 'for', + 'model', + 'modelable', + 'transition', + 'show', + 'if', + Zt, + 'teleport', + ]; +function Ur(t, e) { + let i = ve.indexOf(t.type) === -1 ? Zt : t.type, + s = ve.indexOf(e.type) === -1 ? Zt : e.type; + return ve.indexOf(i) - ve.indexOf(s); +} +function Xe(t, e, i = {}) { + t.dispatchEvent( + new CustomEvent(e, { + detail: i, + bubbles: !0, + composed: !0, + cancelable: !0, + }), + ); +} +function Ee(t, e) { + if (typeof ShadowRoot == 'function' && t instanceof ShadowRoot) { + Array.from(t.children).forEach((r) => Ee(r, e)); + return; + } + let i = !1; + if ((e(t, () => (i = !0)), i)) return; + let s = t.firstElementChild; + for (; s; ) Ee(s, e), (s = s.nextElementSibling); +} +function ie(t, ...e) { + console.warn(`Alpine Warning: ${t}`, ...e); +} +var Ni = !1; +function Jr() { + Ni && + ie( + 'Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.', + ), + (Ni = !0), + document.body || + ie( + "Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` {%- endif -%} + {% liquid + render 'colors' + render 'typography' + %} + {{ content_for_header }} + {% liquid + # Always add entrypoint below content_for_header + render 'adastra' with 'base.css' + render 'adastra' with 'index.js' + %} + {%- liquid assign body_font_bold = settings.type_body_font | font_modify: 'weight', 'bold' assign body_font_italic = settings.type_body_font | font_modify: 'style', 'italic' @@ -57,6 +68,7 @@ {{ body_font_italic | font_face: font_display: 'swap' }} {{ body_font_bold_italic | font_face: font_display: 'swap' }} {{ settings.type_header_font | font_face: font_display: 'swap' }} + {{ settings.type_script_font | font_face: font_display: 'swap' }} {% for scheme in settings.color_schemes -%} {% assign scheme_classes = scheme_classes | append: ', .color-' | append: scheme.id %} @@ -112,6 +124,7 @@ --font-heading-family: {{ settings.type_header_font.family }}, {{ settings.type_header_font.fallback_families }}; --font-heading-style: {{ settings.type_header_font.style }}; --font-heading-weight: {{ settings.type_header_font.weight }}; + --font-script-family: {{ settings.type_script_font.family }}, {{ settings.type_script_font.fallback_families }}; --font-body-scale: {{ settings.body_scale | divided_by: 100.0 }}; --font-heading-scale: {{ settings.heading_scale | times: 1.0 | divided_by: settings.body_scale }}; @@ -259,6 +272,18 @@ } {% endstyle %} + + {{ 'app.css' | asset_url | stylesheet_tag }} {{ 'base.css' | asset_url | stylesheet_tag }} @@ -314,7 +339,7 @@ {% sections 'header-group' %} -
+
{{ content_for_layout }}
diff --git a/package.json b/package.json index fd4e232a41..af47e133ed 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,13 @@ "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "prepare": "husky install" + "prepare": "husky install", + "dev": "vite", + "build": "vite build", + "dev:shopify": "shopify theme dev --store='https://model-motorcars.myshopify.com'", + "dev:css": "npx tailwindcss -i assets/app-tailwind.css -o ./assets/app.css --watch", + "preview": "shopify theme open -d", + "check": "shopify theme check" }, "repository": { "type": "git", @@ -18,15 +24,22 @@ }, "homepage": "https://github.com/TrellisCommerce/shopify-dawn-tailwind-starter-base#readme", "devDependencies": { + "@shopify/cli": "latest", + "@shopify/theme": "latest", + "adastra-plugin": "latest", "autoprefixer": "^10.4.4", "husky": "^7.0.4", "lint-staged": "^12.3.3", - "postcss": "^8.4.12", + "postcss": "^8.4.47", "prettier": "^2.5.1", - "tailwindcss": "^3.4.1" + "tailwindcss": "^3.4.14", + "vite": "^4.5.5" }, "dependencies": { - "@trelliscommerce/prettier-config": "^1.0.0" + "@trelliscommerce/prettier-config": "^1.0.0", + "@vitejs/plugin-basic-ssl": "^1.1.0", + "alpinejs": "^3.14.3", + "swiper": "^11.1.14" }, "prettier": "@trelliscommerce/prettier-config", "lint-staged": { diff --git a/sections/announcement-bar.liquid b/sections/announcement-bar.liquid index b40c7a95a6..df5b6e6d08 100644 --- a/sections/announcement-bar.liquid +++ b/sections/announcement-bar.liquid @@ -19,28 +19,28 @@ {% endif %}
-