diff --git a/.env b/.env index 2094bb9..3ecbc7f 100644 --- a/.env +++ b/.env @@ -15,7 +15,7 @@ PRESTASHOP_VERSION=1.7.3 # PRESTASHOP_COOKIE_NAME= PRESTASHOP_COOKIE_KEY=def00000cecd7a19e52c6ae0ca758f54dd6e682c8fe4c657b8441974a33c6d11a0fc238a02c0f2de4a46fed7a57e2db8d6f6c4c615a937a26af5163293ae6702bc5d18f4 PRESTASHOP_COOKIE_IV=vfRFMV42 -DOMAIN_COOKIE=localhost:8080 +DOMAIN_COOKIE=marek.ma-al.pl # PrestaShop DB PRESTASHOP_DB_DIALECT=mariadb DB_USER=presta diff --git a/templates/cart.templ b/templates/cart.templ index 7bef0d2..dc7984e 100644 --- a/templates/cart.templ +++ b/templates/cart.templ @@ -8,46 +8,43 @@ import ( templ CartPage(data viewmodel.CartPageData, cssPath string, jsPath string) { @Layout("Cart", cssPath, jsPath, data.Menu, data.Locale, data.Cart.TotalItems) { -
-
-
-
-
-
-
-
-

Cart overview

-

Everything ready for checkout.

-

Review quantities, adjust variants, and keep the final order state visible before handing off checkout to PrestaShop.

+
+
+
+
+
+

Cart overview

+

Everything ready for checkout.

+

Review quantities, adjust line items, and confirm the final order state before checkout continues in PrestaShop.

-
+

Line items

-

{ fmt.Sprintf("%d", len(data.Cart.Items)) }

+

{ fmt.Sprintf("%d", len(data.Cart.Items)) }

-
-

Units total

-

{ fmt.Sprintf("%d", data.Cart.TotalItems) }

+
+

Units total

+

{ fmt.Sprintf("%d", data.Cart.TotalItems) }

-
+
if data.Customer != nil { - { fmt.Sprintf("%s %s", data.Customer.FirstName, data.Customer.LastName) } + { fmt.Sprintf("%s %s", data.Customer.FirstName, data.Customer.LastName) } } else { - Guest session + Guest session } - { "Subtotal " + moneyWithCurrency(data.Cart.SubtotalTaxIncl, cartCurrencySign(data), cartCurrencyCode(data)) } + { "Subtotal " + moneyWithCurrency(data.Cart.SubtotalTaxIncl, cartCurrencySign(data), cartCurrencyCode(data)) }
-
+
if len(data.Cart.Items) == 0 { -
-

Empty

-

Your cart is empty.

-

Browse categories or return to a product page to add items and build a full order before checkout.

+
+

Empty

+

Your cart is empty.

+

Browse categories or return to a product page to add items and build a full order before checkout.

} else {
for _, item := range data.Cart.Items { -
+
if item.ImageURL != "" { -
- { +
+ {
}
-

Product

+

Product

if cartItemAttributeLabel(item) != "" { - { cartItemAttributeLabel(item) } + { cartItemAttributeLabel(item) } }
if item.URL != "" { - { item.Name } + { item.Name } } else { -

{ item.Name }

+

{ item.Name }

} -
- { fmt.Sprintf("Qty %d", item.Quantity) } - { "Net " + moneyWithCurrency(item.UnitPrice, item.CurrencySign, item.CurrencyCode) } - { taxLabel(item.TaxRate) } +
+ { fmt.Sprintf("Qty %d", item.Quantity) } + { "Net " + moneyWithCurrency(item.UnitPrice, item.CurrencySign, item.CurrencyCode) } + { taxLabel(item.TaxRate) }
- if cartItemAttributeLabel(item) != "" { -

{ cartItemAttributeLabel(item) }

- }
-
+

Line total

-

{ moneyWithCurrency(item.LineTotalTaxIncl, item.CurrencySign, item.CurrencyCode) }

+

{ moneyWithCurrency(item.LineTotalTaxIncl, item.CurrencySign, item.CurrencyCode) }

{ conversionRateLabel(item.ConversionRate, item.CurrencyCode) }

-
+
-
- +
+
- @@ -109,7 +103,7 @@ templ CartPage(data viewmodel.CartPageData, cssPath string, jsPath string) { - @@ -120,32 +114,32 @@ templ CartPage(data viewmodel.CartPageData, cssPath string, jsPath string) { }
-
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if len(data.Cart.Items) == 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "

Empty

Your cart is empty.

Browse categories or return to a product page to add items and build a full order before checkout.

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "

Empty

Your cart is empty.

Browse categories or return to a product page to add items and build a full order before checkout.

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -129,19 +129,19 @@ func CartPage(data viewmodel.CartPageData, cssPath string, jsPath string) templ. return templ_7745c5c3_Err } for _, item := range data.Cart.Items { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if item.ImageURL != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "

Product

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "

Product

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if cartItemAttributeLabel(item) != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(cartItemAttributeLabel(item)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 70, Col: 187} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 67, Col: 165} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -193,14 +193,14 @@ func CartPage(data viewmodel.CartPageData, cssPath string, jsPath string) templ. return templ_7745c5c3_Err } if item.URL != "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(item.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 76, Col: 78} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 73, Col: 79} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -242,313 +242,290 @@ func CartPage(data viewmodel.CartPageData, cssPath string, jsPath string) templ. return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var13 string templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("Qty %d", item.Quantity)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 79, Col: 125} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 76, Col: 110} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var14 string templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs("Net " + moneyWithCurrency(item.UnitPrice, item.CurrencySign, item.CurrencyCode)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 80, Col: 169} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 77, Col: 154} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var15 string templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(taxLabel(item.TaxRate)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 81, Col: 111} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/cart.templ`, Line: 78, Col: 96} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "\">
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "\">Checkout in PrestaShop Continue browsing") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/templates/category.templ b/templates/category.templ index c3829c4..b664894 100644 --- a/templates/category.templ +++ b/templates/category.templ @@ -8,61 +8,113 @@ import ( templ CategoryPage(data viewmodel.CategoryPageData, cssPath string, jsPath string) { @Layout(data.Category.Name, cssPath, jsPath, data.Menu, data.Locale, layoutCartItems(data.CartSummary)) { -
-
-
-

Category

-

{ data.Category.Name }

-
-

{ fmt.Sprintf("Products %d-%d of %d", categoryPageStart(data.Pagination), categoryPageEnd(data.Pagination, len(data.Category.Products)), data.Pagination.TotalItems) }

+
+
+ + +
+
+
+

Category

+

{ data.Category.Name }

+ if data.Category.Description != "" { +
+ @templ.Raw(data.Category.Description) +
+ } +
if data.Customer != nil { -

{ fmt.Sprintf("%s %s", data.Customer.FirstName, data.Customer.LastName) }

- } else { -

Guest session

+
+ { fmt.Sprintf("%s %s", data.Customer.FirstName, data.Customer.LastName) } +
}
- if data.Category.Description != "" { -
- @templ.Raw(data.Category.Description) -
- }
-
- for _, product := range data.Category.Products { -
- if product.ImageURL != "" { - - { +
+
+
+ +

+ { fmt.Sprintf("Showing %d-%d of %d products", categoryPageStart(data.Pagination), categoryPageEnd(data.Pagination, len(data.Category.Products)), data.Pagination.TotalItems) } +

+
+
+ if data.Category.Description != "" { + + More } -

Product

-

{ product.Name }

-

{ truncatedPlainTextHTML(product.ShortDescription, 220) }

-
-
-

{ moneyWithCurrency(product.PriceTaxIncl, product.CurrencySign, product.CurrencyCode) }

-

{ taxLabel(product.TaxRate) } · { conversionRateLabel(product.ConversionRate, product.CurrencyCode) }

+ +
+
+
+ +
+ for _, product := range data.Category.Products { +
+

{ conversionRateLabel(product.ConversionRate, product.CurrencyCode) }

+ } - if data.Pagination.TotalPages > 1 { - ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/templates/layout.templ b/templates/layout.templ index 4442792..0facc30 100644 --- a/templates/layout.templ +++ b/templates/layout.templ @@ -9,7 +9,12 @@ templ Layout(title string, cssPath string, jsPath string, menu []pscatalog.MenuI { title } + + + + + @@ -21,9 +26,9 @@ templ Layout(title string, cssPath string, jsPath string, menu []pscatalog.MenuI info@9b-plus.com - + - +420 533 312 341 + +48 221 532 426 if hasHeaderLocale(locale) { diff --git a/templates/layout_templ.go b/templates/layout_templ.go index b955d1f..5d480c0 100644 --- a/templates/layout_templ.go +++ b/templates/layout_templ.go @@ -57,33 +57,33 @@ func Layout(title string, cssPath string, jsPath string, menu []pscatalog.MenuIt if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\" defer>
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -138,7 +138,7 @@ func Layout(title string, cssPath string, jsPath string, menu []pscatalog.MenuIt var templ_7745c5c3_Var6 templ.SafeURL templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinURLErrs(localizedCartPath(locale)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 60, Col: 68} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 65, Col: 68} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -156,7 +156,7 @@ func Layout(title string, cssPath string, jsPath string, menu []pscatalog.MenuIt var templ_7745c5c3_Var7 string templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(cartItems) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 63, Col: 205} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 68, Col: 205} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) if templ_7745c5c3_Err != nil { @@ -212,7 +212,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(current.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 80, Col: 20} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 85, Col: 20} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -222,7 +222,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var10 string templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 82, Col: 12} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 87, Col: 12} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -241,7 +241,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(current.Code) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 86, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 91, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { @@ -264,7 +264,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 92, Col: 43} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 97, Col: 43} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -305,7 +305,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var15 templ.SafeURL templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinURLErrs(option.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 97, Col: 73} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 102, Col: 73} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { @@ -318,7 +318,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var16 string templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(option.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 98, Col: 29} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 103, Col: 29} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { @@ -336,7 +336,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var17 string templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(option.Meta) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 100, Col: 62} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 105, Col: 62} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) if templ_7745c5c3_Err != nil { @@ -354,7 +354,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var18 string templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(option.Code) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 102, Col: 62} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 107, Col: 62} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { @@ -395,7 +395,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var21 string templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(option.Label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 107, Col: 29} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 112, Col: 29} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21)) if templ_7745c5c3_Err != nil { @@ -413,7 +413,7 @@ func LocalePicker(title string, current pscatalog.LocaleOption, options []pscata var templ_7745c5c3_Var22 string templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(option.Meta) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 109, Col: 62} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 114, Col: 62} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22)) if templ_7745c5c3_Err != nil { @@ -538,7 +538,7 @@ func MenuTree(items []pscatalog.MenuItem, depth int) templ.Component { var templ_7745c5c3_Var30 templ.SafeURL templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(item.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 125, Col: 53} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 130, Col: 53} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30)) if templ_7745c5c3_Err != nil { @@ -551,7 +551,7 @@ func MenuTree(items []pscatalog.MenuItem, depth int) templ.Component { var templ_7745c5c3_Var31 string templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(item.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 126, Col: 16} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 131, Col: 16} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31)) if templ_7745c5c3_Err != nil { @@ -668,7 +668,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var37 templ.SafeURL templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinURLErrs(item.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 147, Col: 22} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 152, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37)) if templ_7745c5c3_Err != nil { @@ -681,7 +681,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var38 string templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs("Open " + item.Name + " submenu") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 148, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 153, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38)) if templ_7745c5c3_Err != nil { @@ -694,7 +694,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var39 string templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(menuPanelID(item.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 150, Col: 43} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 155, Col: 43} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39)) if templ_7745c5c3_Err != nil { @@ -707,7 +707,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var40 string templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(menuPanelID(item.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 152, Col: 46} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 157, Col: 46} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40)) if templ_7745c5c3_Err != nil { @@ -720,7 +720,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var41 string templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(item.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 152, Col: 60} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 157, Col: 60} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41)) if templ_7745c5c3_Err != nil { @@ -733,7 +733,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var42 string templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs("Open " + item.Name + " submenu") if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 156, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 161, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42)) if templ_7745c5c3_Err != nil { @@ -746,7 +746,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var43 string templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(menuPanelID(item.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 158, Col: 43} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 163, Col: 43} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43)) if templ_7745c5c3_Err != nil { @@ -759,7 +759,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var44 string templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(menuPanelID(item.ID)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 160, Col: 46} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 165, Col: 46} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44)) if templ_7745c5c3_Err != nil { @@ -795,7 +795,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var47 templ.SafeURL templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinURLErrs(item.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 165, Col: 55} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 170, Col: 55} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47)) if templ_7745c5c3_Err != nil { @@ -808,7 +808,7 @@ func MegaMenuBar(items []pscatalog.MenuItem) templ.Component { var templ_7745c5c3_Var48 string templ_7745c5c3_Var48, templ_7745c5c3_Err = templ.JoinStringErrs(item.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 165, Col: 69} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 170, Col: 69} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var48)) if templ_7745c5c3_Err != nil { @@ -866,7 +866,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var50 string templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(menuPanelID(id)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 176, Col: 51} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 181, Col: 51} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50)) if templ_7745c5c3_Err != nil { @@ -884,7 +884,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var51 templ.SafeURL templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinURLErrs(column.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 180, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 185, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51)) if templ_7745c5c3_Err != nil { @@ -897,7 +897,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var52 string templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(column.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 180, Col: 68} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 185, Col: 68} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52)) if templ_7745c5c3_Err != nil { @@ -920,7 +920,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var53 templ.SafeURL templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinURLErrs(child.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 185, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 190, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53)) if templ_7745c5c3_Err != nil { @@ -933,7 +933,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var54 string templ_7745c5c3_Var54, templ_7745c5c3_Err = templ.JoinStringErrs(child.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 185, Col: 67} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 190, Col: 67} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var54)) if templ_7745c5c3_Err != nil { @@ -956,7 +956,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var55 templ.SafeURL templ_7745c5c3_Var55, templ_7745c5c3_Err = templ.JoinURLErrs(column.URL) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 190, Col: 50} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 195, Col: 50} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var55)) if templ_7745c5c3_Err != nil { @@ -979,7 +979,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var56 templ.SafeURL templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinURLErrs(href) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 195, Col: 46} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 200, Col: 46} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56)) if templ_7745c5c3_Err != nil { @@ -992,7 +992,7 @@ func MegaMenu(id int64, href string, label string, columns []pscatalog.MenuItem) var templ_7745c5c3_Var57 string templ_7745c5c3_Var57, templ_7745c5c3_Err = templ.JoinStringErrs(label) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 195, Col: 56} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/layout.templ`, Line: 200, Col: 56} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57)) if templ_7745c5c3_Err != nil { diff --git a/templates/product.templ b/templates/product.templ index 79bc3ae..48cc40a 100644 --- a/templates/product.templ +++ b/templates/product.templ @@ -8,11 +8,29 @@ import ( templ ProductPage(data viewmodel.ProductPageData, cssPath string, jsPath string) { @Layout(data.Product.Name, cssPath, jsPath, data.Menu, data.Locale, layoutCartItems(data.CartSummary)) { -
-
-
- Prestashop Proxy -
+
+
+ + +
+
+

Product

+

{ data.Product.Name }

+ if data.Product.CategoryName != "" { +

{ data.Product.CategoryName }

+ } +
+
if data.Customer != nil {

{ fmt.Sprintf("%s %s", data.Customer.FirstName, data.Customer.LastName) }

} else { @@ -24,57 +42,68 @@ templ ProductPage(data viewmodel.ProductPageData, cssPath string, jsPath string)
-
-
-

Product

- if data.Product.ImageURL != "" { - - } +
+
if len(data.Product.GalleryImages) > 1 { -
-
- -
-
- for i, image := range data.Product.GalleryImages { - if image.ThumbURL != "" && image.URL != "" { - - } + } -
-
- + } +
+
+ +
+
+
+
    + for _, image := range data.Product.GalleryImages { + if image.ThumbURL != "" && image.URL != "" { +
  • + { +
  • + } + } +
+
+
+
+ +
+ } else if data.Product.ImageURL != "" { + } - if data.CategoryURL != "" && data.Product.CategoryName != "" { - { data.Product.CategoryName } - } -

{ data.Product.Name }

-
if data.Product.ShortDescription != "" { -
-
-

Summary

-

At a glance

+
+
+

Summary

+

At a glance

-

{ plainTextHTML(data.Product.ShortDescription) }

+

{ plainTextHTML(data.Product.ShortDescription) }

} if data.Product.Description != "" { -
-
-

Description

-

About this product

+
+
+

Description

+

About this product

-
+
@templ.Raw(data.Product.Description)
} if len(data.Product.Features) > 0 { -
-
-

Features

-

Product details

+
+
+

Features

+

Product details

for _, feature := range data.Product.Features { -
+

{ feature.Name }

-

{ plainTextHTML(feature.Value) }

+

{ plainTextHTML(feature.Value) }

}
} if len(data.Product.Accessories) > 0 { -
-
-

Related products

-

Accessories

+
+
+

Related products

+

Accessories

-
+
for _, product := range data.Product.Accessories { -
- if product.ImageURL != "" { - - { - - } -

Accessory

-

{ product.Name }

-

{ truncatedPlainTextHTML(product.ShortDescription, 180) }

-
-
-

{ moneyWithCurrency(product.PriceTaxIncl, product.CurrencySign, product.CurrencyCode) }

-

{ taxLabel(product.TaxRate) } · { conversionRateLabel(product.ConversionRate, product.CurrencyCode) }

-
- - View Product - -
+ }
} if len(data.Product.GalleryImages) > 0 { -
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/web/dist/app.css b/web/dist/app.css index 7c81222..ac25d1c 100644 --- a/web/dist/app.css +++ b/web/dist/app.css @@ -1 +1 @@ -*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--cta-glow:0 0 0 0 transparent}body{font-family:IBM Plex Sans,Avenir Next,Segoe UI,sans-serif;background:radial-gradient(circle at top left,hsla(39,82%,69%,.24),transparent 28%),radial-gradient(circle at top right,rgba(157,217,210,.16),transparent 34%),linear-gradient(180deg,#fbfaf6,#f5efe3 55%,#f7f3ea);--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}h1,h2,h3{font-family:Cormorant Garamond,IBM Plex Sans,serif}.site-container{margin-left:auto;margin-right:auto;width:100%;max-width:104rem;padding-left:1rem;padding-right:1rem}@media (min-width:640px){.site-container{padding-left:1.25rem;padding-right:1.25rem}}@media (min-width:1024px){.site-container{padding-left:2rem;padding-right:2rem}}.site-header{position:sticky;top:0;z-index:40;--tw-backdrop-blur:blur(8px);-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)}.utility-bar{background:linear-gradient(90deg,rgba(20,33,61,.98),rgba(37,58,89,.94));border-bottom-width:1px;border-color:hsla(0,0%,100%,.1)}.header-locale,.utility-bar{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity,1))}.header-locale{display:flex;width:100%;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.5rem;font-size:.875rem;line-height:1.25rem}@media (min-width:640px){.header-locale{width:auto;justify-content:flex-end}}.locale-picker{position:relative;width:100%}@media (min-width:640px){.locale-picker{width:auto}}.locale-picker__summary{display:flex;width:100%;cursor:pointer;list-style-type:none;align-items:center;justify-content:space-between;gap:.5rem;border-radius:9999px;border-width:1px;border-color:hsla(0,0%,100%,0);padding:.375rem .75rem;--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.locale-picker__summary:hover{border-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.1);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}@media (min-width:640px){.locale-picker__summary{width:auto;justify-content:flex-start}}.locale-picker[open] .locale-picker__summary{border-color:hsla(0,0%,100%,.2);background-color:hsla(0,0%,100%,.1);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.locale-picker__summary::-webkit-details-marker{display:none}.locale-picker__value{font-weight:500}.locale-picker__chevron,.locale-picker__code,.locale-picker__item-meta{font-size:.74rem;text-transform:uppercase;letter-spacing:.16em;color:hsla(24,6%,83%,.8)}.locale-picker__panel{left:0;right:0;z-index:50;margin-top:.75rem;min-width:13rem;border-radius:1.5rem;border-width:1px;border-color:hsla(0,0%,100%,.7);background-color:hsla(0,0%,100%,.95);padding:.75rem;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1));--tw-shadow:0 22px 48px rgba(20,33,61,.18);--tw-shadow-colored:0 22px 48px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-backdrop-blur:blur(8px);-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)}@media (min-width:640px){.locale-picker__panel{position:absolute;left:auto;right:0}}.locale-picker__title{margin-bottom:.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.2em;--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1))}.main-nav{background:rgba(255,251,245,.82);border-bottom-width:1px;border-color:hsla(0,0%,100%,.6);--tw-shadow:0 10px 30px rgba(20,33,61,.08);--tw-shadow-colored:0 10px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.header-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding-top:.75rem;padding-bottom:.75rem}@media (min-width:640px){.header-bar{gap:1.25rem;padding-top:1.25rem;padding-bottom:1.25rem}}@media (min-width:1024px){.header-bar{flex-wrap:nowrap}}.brand-mark{display:inline-flex;align-items:flex-end;gap:.125rem;font-size:2.25rem;line-height:2.5rem;font-weight:900;line-height:1;letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.brand-mark:hover{--tw-translate-y:-0.125rem;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))}@media (min-width:640px){.brand-mark{font-size:3rem;line-height:1}}.brand-mark__accent{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.menu-toggle{display:inline-flex;height:2.75rem;align-items:center;justify-content:center;border-radius:9999px;border-width:1px;border-color:hsla(24,6%,83%,.7);background-color:hsla(0,0%,100%,.9);padding-left:1.25rem;padding-right:1.25rem;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.28em;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1));--tw-shadow:0 10px 24px rgba(20,33,61,.08);--tw-shadow-colored:0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);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(.4,0,.2,1);transition-duration:.15s}.menu-toggle:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.menu-panel{order:9999;margin-top:.5rem;width:100%;border-radius:1.75rem;border-width:1px;border-color:hsla(0,0%,100%,.7);background-color:hsla(0,0%,100%,.95);padding:1rem;--tw-shadow:0 16px 34px rgba(20,33,61,.12);--tw-shadow-colored:0 16px 34px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-backdrop-blur:blur(8px);-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)}@media (min-width:1024px){.menu-panel{order:0;margin-top:0;border-radius:0;border-width:0;background-color:transparent;padding:0;--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)}}.desktop-nav{display:flex;align-items:center;justify-content:center;gap:2rem}@media (min-width:1280px){.desktop-nav{gap:3rem}}.desktop-nav__toggle{display:inline-flex;height:2rem;width:1.25rem;align-items:center;justify-content:center;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.desktop-nav__entry--open .desktop-nav__link,.desktop-nav__entry--open .desktop-nav__toggle,.desktop-nav__toggle:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.mega-menu{background:linear-gradient(180deg,rgba(255,252,247,.98),hsla(40,67%,96%,.98));position:absolute;left:0;right:0;top:100%;z-index:50;border-top-width:1px;border-color:hsla(0,0%,100%,.7);--tw-shadow:0 28px 60px rgba(20,33,61,.16);--tw-shadow-colored:0 28px 60px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-backdrop-blur:blur(8px);-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)}.mega-menu__grid{margin-left:auto;margin-right:auto;width:100%;max-width:104rem;padding-left:1rem;padding-right:1rem}@media (min-width:640px){.mega-menu__grid{padding-left:1.25rem;padding-right:1.25rem}}@media (min-width:1024px){.mega-menu__grid{padding-left:2rem;padding-right:2rem}}@media (max-width:1023px){.utility-bar .mega-menu__grid{gap:.5rem;padding-top:.625rem;padding-bottom:.625rem}}.mega-menu__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));-moz-column-gap:3rem;column-gap:3rem;row-gap:2.5rem;padding-top:2.5rem;padding-bottom:2.5rem}@media (min-width:1024px){.mega-menu__grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1280px){.mega-menu__grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.mega-menu__heading{margin-bottom:1rem;display:inline-flex;font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.mega-menu__heading:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.mega-menu__link{display:inline-flex;font-size:1.02rem;line-height:1.75rem;--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.mega-menu__link:hover{--tw-translate-x:0.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));--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.mega-menu__all{grid-column:1/-1;display:flex;align-items:flex-start;justify-content:flex-end;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));padding-top:1.25rem}.mega-menu__all-link{display:inline-flex;font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.18em;--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.mega-menu__all-link:hover{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.header-actions{order:2;margin-left:auto;display:flex;align-items:center;gap:.5rem;font-size:1.5rem;line-height:2rem;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}@media (min-width:1024px){.header-actions{margin-left:auto;gap:1rem}}.nav-icon{display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:9999px;background-color:hsla(0,0%,100%,.8);font-size:1.2rem;--tw-shadow:0 10px 24px rgba(20,33,61,.08);--tw-shadow-colored:0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);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(.4,0,.2,1);transition-duration:.15s}.nav-icon:hover{--tw-translate-y:-0.125rem;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));--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}@media (min-width:640px){.nav-icon{font-size:1.35rem}}@media (max-width:1023px){.desktop-nav,.mega-menu{display:none}.utility-bar .site-container{gap:.5rem;padding-top:.625rem;padding-bottom:.625rem}.utility-bar a[href^="mailto:"]{display:none}.header-locale{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.header-locale,.locale-picker,.locale-picker__summary{width:100%}.brand-mark{font-size:2.2rem}.header-bar{row-gap:.75rem}.menu-panel{max-height:70vh;overflow-y:auto;padding:.75rem}}@media (max-width:639px){.header-actions .nav-icon:first-child{display:none}.menu-toggle{padding-left:1rem;padding-right:1rem}}button[type=submit]{box-shadow:var(--cta-glow)}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.inset-x-0{left:0;right:0}.-right-14{right:-3.5rem}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.bottom-\[-4rem\]{bottom:-4rem}.left-0{left:0}.left-4{left:1rem}.left-\[-2rem\]{left:-2rem}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-\[-3\.5rem\]{top:-3.5rem}.top-full{top:100%}.z-20{z-index:20}.z-\[70\]{z-index:70}.mx-auto{margin-left:auto;margin-right:auto}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-11{height:2.75rem}.h-20{height:5rem}.h-32{height:8rem}.h-40{height:10rem}.h-44{height:11rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-72{height:18rem}.h-80{height:20rem}.h-full{height:100%}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-5{min-height:1.25rem}.min-h-screen{min-height:100vh}.w-11{width:2.75rem}.w-20{width:5rem}.w-24{width:6rem}.w-40{width:10rem}.w-44{width:11rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0}.min-w-5{min-width:1.25rem}.max-w-2xl{max-width:42rem}.max-w-\[104rem\]{max-width:104rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.-translate-y-1\/2{--tw-translate-y:-50%;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))}.grid-cols-\[minmax\(0\2c 1fr\)_11rem\]{grid-template-columns:minmax(0,1fr) 11rem}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[1\.1rem\]{border-radius:1.1rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[1\.35rem\]{border-radius:1.35rem}.rounded-\[1\.4rem\]{border-radius:1.4rem}.rounded-\[1\.5rem\]{border-radius:1.5rem}.rounded-\[1\.6rem\]{border-radius:1.6rem}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-\[1\.7rem\]{border-radius:1.7rem}.rounded-\[2\.2rem\]{border-radius:2.2rem}.rounded-\[2rem\]{border-radius:2rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-300\/20{border-color:rgba(252,211,77,.2)}.border-amber-300\/40{border-color:rgba(252,211,77,.4)}.border-amber-400\/20{border-color:rgba(251,191,36,.2)}.border-amber-400\/30{border-color:rgba(251,191,36,.3)}.border-amber-400\/40{border-color:rgba(251,191,36,.4)}.border-amber-500\/20{border-color:rgba(245,158,11,.2)}.border-amber-500\/30{border-color:rgba(245,158,11,.3)}.border-emerald-400\/40{border-color:rgba(52,211,153,.4)}.border-emerald-500\/20{border-color:rgba(16,185,129,.2)}.border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1))}.border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity,1))}.border-stone-700{--tw-border-opacity:1;border-color:rgb(68 64 60/var(--tw-border-opacity,1))}.border-stone-800{--tw-border-opacity:1;border-color:rgb(41 37 36/var(--tw-border-opacity,1))}.border-stone-900\/80{border-color:rgba(28,25,23,.8)}.border-white\/10{border-color:hsla(0,0%,100%,.1)}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity,1))}.bg-amber-300\/10{background-color:rgba(252,211,77,.1)}.bg-amber-400\/10{background-color:rgba(251,191,36,.1)}.bg-black\/15{background-color:rgba(0,0,0,.15)}.bg-black\/20{background-color:rgba(0,0,0,.2)}.bg-black\/80{background-color:rgba(0,0,0,.8)}.bg-orange-500\/10{background-color:rgba(249,115,22,.1)}.bg-slate-900\/70{background-color:rgba(15,23,42,.7)}.bg-slate-950\/50{background-color:rgba(2,6,23,.5)}.bg-slate-950\/70{background-color:rgba(2,6,23,.7)}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity,1))}.bg-stone-50{--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity,1))}.bg-stone-900\/70{background-color:rgba(28,25,23,.7)}.bg-stone-950{--tw-bg-opacity:1;background-color:rgb(12 10 9/var(--tw-bg-opacity,1))}.bg-stone-950\/55{background-color:rgba(12,10,9,.55)}.bg-stone-950\/60{background-color:rgba(12,10,9,.6)}.bg-stone-950\/70{background-color:rgba(12,10,9,.7)}.bg-stone-950\/75{background-color:rgba(12,10,9,.75)}.bg-stone-950\/80{background-color:rgba(12,10,9,.8)}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/5{background-color:hsla(0,0%,100%,.05)}.bg-\[linear-gradient\(135deg\2c rgba\(28\2c 25\2c 23\2c 0\.96\)\2c rgba\(120\2c 53\2c 15\2c 0\.34\)\)\]{background-image:linear-gradient(135deg,rgba(28,25,23,.96),rgba(120,53,15,.34))}.bg-\[linear-gradient\(145deg\2c rgba\(251\2c 191\2c 36\2c 0\.12\)\2c transparent_58\%\)\]{background-image:linear-gradient(145deg,rgba(251,191,36,.12),transparent 58%)}.bg-\[linear-gradient\(180deg\2c rgba\(245\2c 158\2c 11\2c 0\.08\)\2c rgba\(28\2c 25\2c 23\2c 0\.32\)\)\]{background-image:linear-gradient(180deg,rgba(245,158,11,.08),rgba(28,25,23,.32))}.bg-\[linear-gradient\(180deg\2c rgba\(245\2c 158\2c 11\2c 0\.12\)\2c rgba\(28\2c 25\2c 23\2c 0\.92\)_34\%\2c rgba\(28\2c 25\2c 23\2c 0\.98\)\)\]{background-image:linear-gradient(180deg,rgba(245,158,11,.12),rgba(28,25,23,.92) 34%,rgba(28,25,23,.98))}.bg-\[linear-gradient\(180deg\2c rgba\(28\2c 25\2c 23\2c 0\.98\)\2c rgba\(12\2c 10\2c 9\2c 0\.98\)\)\]{background-image:linear-gradient(180deg,rgba(28,25,23,.98),rgba(12,10,9,.98))}.bg-\[linear-gradient\(180deg\2c rgba\(41\2c 37\2c 36\2c 0\.88\)\2c rgba\(28\2c 25\2c 23\2c 0\.96\)\)\]{background-image:linear-gradient(180deg,rgba(41,37,36,.88),rgba(28,25,23,.96))}.bg-\[radial-gradient\(circle_at_top\2c _rgba\(245\2c 158\2c 11\2c 0\.22\)\2c _transparent_34\%\)\2c radial-gradient\(circle_at_bottom_left\2c _rgba\(120\2c 53\2c 15\2c 0\.22\)\2c _transparent_36\%\)\2c linear-gradient\(180deg\2c \#0c0a09\2c \#1c1917\)\]{background-image:radial-gradient(circle at top,rgba(245,158,11,.22),transparent 34%),radial-gradient(circle at bottom left,rgba(120,53,15,.22),transparent 36%),linear-gradient(180deg,#0c0a09,#1c1917)}.bg-\[radial-gradient\(circle_at_top\2c _rgba\(245\2c 158\2c 11\2c 0\.28\)\2c _transparent_40\%\)\2c linear-gradient\(180deg\2c \#0c0a09\2c \#1c1917\)\]{background-image:radial-gradient(circle at top,rgba(245,158,11,.28),transparent 40%),linear-gradient(180deg,#0c0a09,#1c1917)}.bg-\[radial-gradient\(circle_at_top_left\2c _rgba\(34\2c 197\2c 94\2c 0\.18\)\2c _transparent_35\%\)\2c linear-gradient\(180deg\2c \#0b1020\2c \#111827\)\]{background-image:radial-gradient(circle at top left,rgba(34,197,94,.18),transparent 35%),linear-gradient(180deg,#0b1020,#111827)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-serif{font-family:ui-serif,Georgia,Cambria,Times New Roman,Times,serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.92rem\]{font-size:.92rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-none{line-height:1}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-\[0\.26em\]{letter-spacing:.26em}.tracking-\[0\.28em\]{letter-spacing:.28em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.32em\]{letter-spacing:.32em}.tracking-\[0\.38em\]{letter-spacing:.38em}.tracking-\[0\.3em\]{letter-spacing:.3em}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.text-amber-100\/80{color:hsla(48,96%,89%,.8)}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.text-amber-300\/80{color:rgba(252,211,77,.8)}.text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity,1))}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-stone-100{--tw-text-opacity:1;color:rgb(245 245 244/var(--tw-text-opacity,1))}.text-stone-200{--tw-text-opacity:1;color:rgb(231 229 228/var(--tw-text-opacity,1))}.text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity,1))}.text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1))}.text-stone-50{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity,1))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity,1))}.text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1))}.text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}.text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-\[0_16px_40px_rgba\(0\2c 0\2c 0\2c 0\.24\)\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_16px_40px_rgba\(0\2c 0\2c 0\2c 0\.24\)\]{--tw-shadow:0 16px 40px rgba(0,0,0,.24);--tw-shadow-colored:0 16px 40px var(--tw-shadow-color)}.shadow-\[0_18px_40px_rgba\(0\2c 0\2c 0\2c 0\.12\)\]{--tw-shadow:0 18px 40px rgba(0,0,0,.12);--tw-shadow-colored:0 18px 40px 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-\[0_24px_60px_rgba\(0\2c 0\2c 0\2c 0\.18\)\]{--tw-shadow:0 24px 60px rgba(0,0,0,.18);--tw-shadow-colored:0 24px 60px 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-\[0_24px_60px_rgba\(0\2c 0\2c 0\2c 0\.28\)\]{--tw-shadow:0 24px 60px rgba(0,0,0,.28);--tw-shadow-colored:0 24px 60px 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-\[0_24px_80px_rgba\(0\2c 0\2c 0\2c 0\.28\)\]{--tw-shadow:0 24px 80px rgba(0,0,0,.28);--tw-shadow-colored:0 24px 80px 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-\[0_24px_80px_rgba\(0\2c 0\2c 0\2c 0\.35\)\]{--tw-shadow:0 24px 80px rgba(0,0,0,.35);--tw-shadow-colored:0 24px 80px 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-\[0_24px_80px_rgba\(41\2c 24\2c 10\2c 0\.4\)\]{--tw-shadow:0 24px 80px rgba(41,24,10,.4);--tw-shadow-colored:0 24px 80px 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-\[0_32px_120px_rgba\(0\2c 0\2c 0\2c 0\.55\)\]{--tw-shadow:0 32px 120px rgba(0,0,0,.55);--tw-shadow-colored:0 32px 120px 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-\[0_32px_120px_rgba\(41\2c 24\2c 10\2c 0\.48\)\]{--tw-shadow:0 32px 120px rgba(41,24,10,.48);--tw-shadow-colored:0 32px 120px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_1px_0_rgba\(255\2c 255\2c 255\2c 0\.04\)\]{--tw-shadow:inset 0 1px 0 hsla(0,0%,100%,.04);--tw-shadow-colored:inset 0 1px 0 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-amber-950\/10{--tw-shadow-color:rgba(69,26,3,.1);--tw-shadow:var(--tw-shadow-colored)}.shadow-amber-950\/20{--tw-shadow-color:rgba(69,26,3,.2);--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur-3xl{--tw-blur:blur(64px);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)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-sm{-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)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.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(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.hover\:-translate-y-1:hover{--tw-translate-y:-0.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))}.hover\:border-amber-300\/40:hover{border-color:rgba(252,211,77,.4)}.hover\:border-amber-400\/30:hover{border-color:rgba(251,191,36,.3)}.hover\:border-amber-400\/40:hover{border-color:rgba(251,191,36,.4)}.hover\:border-emerald-400\/40:hover{border-color:rgba(52,211,153,.4)}.hover\:border-rose-300\/30:hover{border-color:rgba(253,164,175,.3)}.hover\:bg-amber-200:hover{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity,1))}.hover\:bg-amber-300:hover{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity,1))}.hover\:bg-emerald-300:hover{--tw-bg-opacity:1;background-color:rgb(110 231 183/var(--tw-bg-opacity,1))}.hover\:bg-rose-300:hover{--tw-bg-opacity:1;background-color:rgb(253 164 175/var(--tw-bg-opacity,1))}.hover\:bg-\[linear-gradient\(180deg\2c rgba\(120\2c 53\2c 15\2c 0\.22\)\2c rgba\(28\2c 25\2c 23\2c 0\.98\)\)\]:hover{background-image:linear-gradient(180deg,rgba(120,53,15,.22),rgba(28,25,23,.98))}.hover\:text-amber-200:hover{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.hover\:text-slate-950:hover{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.hover\:text-stone-50:hover{--tw-text-opacity:1;color:rgb(250 250 249/var(--tw-text-opacity,1))}.hover\:text-stone-700:hover{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1))}.hover\:text-stone-950:hover{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.group:hover .group-hover\:scale-\[1\.03\],.group\/thumb:hover .group-hover\/thumb\:scale-\[1\.03\]{--tw-scale-x:1.03;--tw-scale-y:1.03;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\:text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:768px){.md\:grid{display:grid}.md\:h-\[28rem\]{height:28rem}.md\:w-32{width:8rem}.md\:min-w-\[11rem\]{min-width:11rem}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:text-right{text-align:right}}@media (min-width:1024px){.lg\:ml-10{margin-left:2.5rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-full{height:100%}.lg\:w-44{width:11rem}.lg\:w-full{width:100%}.lg\:min-w-0{min-width:0}.lg\:min-w-\[20rem\]{min-width:20rem}.lg\:flex-1{flex:1 1 0%}.lg\:basis-auto{flex-basis:auto}.lg\:grid-cols-\[1fr_1fr\]{grid-template-columns:1fr 1fr}.lg\:flex-row{flex-direction:row}.lg\:flex-col{flex-direction:column}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:justify-center{justify-content:center}.lg\:justify-between{justify-content:space-between}.lg\:p-10{padding:2.5rem}.lg\:p-6{padding:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:text-5xl{font-size:3rem;line-height:1}.lg\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1280px){.xl\:sticky{position:sticky}.xl\:top-8{top:2rem}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\2c 1\.55fr\)_24rem\]{grid-template-columns:minmax(0,1.55fr) 24rem}.xl\:self-start{align-self:flex-start}}@media (min-width:1536px){.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}} \ No newline at end of file +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--cta-glow:0 0 0 0 transparent}body{background:radial-gradient(circle at top left,rgba(245,158,11,.12),transparent 24%),linear-gradient(180deg,#fffdfa,#faf7f1);--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}body,h1,h2,h3{font-family:Poppins,Avenir Next,Segoe UI,sans-serif}.site-container{margin-left:auto;margin-right:auto;width:100%;max-width:104rem;padding-left:1rem;padding-right:1rem}@media (min-width:640px){.site-container{padding-left:1.25rem;padding-right:1.25rem}}@media (min-width:1024px){.site-container{padding-left:2rem;padding-right:2rem}}.site-header{position:sticky;top:0;z-index:40;background-color:hsla(0,0%,100%,.95);--tw-backdrop-blur:blur(8px);-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)}.utility-bar{border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.header-locale,.utility-bar{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1))}.header-locale{display:flex;width:100%;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.5rem;font-size:.875rem;line-height:1.25rem}@media (min-width:640px){.header-locale{width:auto;justify-content:flex-end}}.locale-picker{position:relative;width:100%}@media (min-width:640px){.locale-picker{width:auto}}.locale-picker__summary{display:flex;width:100%;cursor:pointer;list-style-type:none;align-items:center;justify-content:space-between;gap:.5rem;border-radius:9999px;border-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));padding:.375rem .75rem;--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.locale-picker__summary:hover{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}@media (min-width:640px){.locale-picker__summary{width:auto;justify-content:flex-start}}.locale-picker[open] .locale-picker__summary{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(250 250 249/var(--tw-bg-opacity,1));--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}.locale-picker__summary::-webkit-details-marker{display:none}.locale-picker__value{font-weight:500}.locale-picker__chevron,.locale-picker__code,.locale-picker__item-meta{font-size:.74rem;text-transform:uppercase;letter-spacing:.16em;--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1))}.locale-picker__panel{left:0;right:0;z-index:50;margin-top:.75rem;min-width:13rem;border-radius:1.5rem;border-width:1px;border-color:hsla(0,0%,100%,.7);background-color:hsla(0,0%,100%,.95);padding:.75rem;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1));--tw-shadow:0 22px 48px rgba(20,33,61,.18);--tw-shadow-colored:0 22px 48px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-backdrop-blur:blur(8px);-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)}@media (min-width:640px){.locale-picker__panel{position:absolute;left:auto;right:0}}.locale-picker__title{margin-bottom:.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.2em;--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1))}.main-nav{border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));--tw-shadow:0 8px 24px rgba(20,33,61,.05);--tw-shadow-colored:0 8px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.header-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding-top:.75rem;padding-bottom:.75rem}@media (min-width:640px){.header-bar{gap:1.25rem;padding-top:1.25rem;padding-bottom:1.25rem}}@media (min-width:1024px){.header-bar{flex-wrap:nowrap}}.brand-mark{display:inline-flex;align-items:flex-end;gap:.125rem;font-size:2.25rem;line-height:2.5rem;font-weight:900;line-height:1;letter-spacing:-.025em;--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.brand-mark:hover{--tw-translate-y:-0.125rem;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))}@media (min-width:640px){.brand-mark{font-size:3.2rem}}.brand-mark__accent{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.menu-toggle{display:inline-flex;height:2.75rem;align-items:center;justify-content:center;border-width:1px;--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding-left:1.25rem;padding-right:1.25rem;font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.28em;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1));--tw-shadow:0 8px 18px rgba(20,33,61,.05);--tw-shadow-colored:0 8px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);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(.4,0,.2,1);transition-duration:.15s}.menu-toggle:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.menu-panel{order:9999;margin-top:.5rem;width:100%;border-radius:1.75rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));padding:1rem;--tw-shadow:0 16px 34px rgba(20,33,61,.08);--tw-shadow-colored:0 16px 34px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-backdrop-blur:blur(8px);-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)}@media (min-width:1024px){.menu-panel{order:0;margin-top:0;border-radius:0;border-width:0;background-color:transparent;padding:0;--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)}}.desktop-nav{display:flex;align-items:center;justify-content:center;gap:2rem}@media (min-width:1280px){.desktop-nav{gap:3rem}}.desktop-nav__toggle{display:inline-flex;height:2rem;width:1.25rem;align-items:center;justify-content:center;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.desktop-nav__entry--open .desktop-nav__link,.desktop-nav__entry--open .desktop-nav__toggle,.desktop-nav__toggle:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.mega-menu{background:linear-gradient(180deg,rgba(255,253,250,.98),hsla(40,47%,96%,.98));position:absolute;left:0;right:0;top:100%;z-index:50;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));--tw-shadow:0 24px 54px rgba(20,33,61,.1);--tw-shadow-colored:0 24px 54px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-backdrop-blur:blur(8px);-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)}.mega-menu__grid{margin-left:auto;margin-right:auto;width:100%;max-width:104rem;padding-left:1rem;padding-right:1rem}@media (min-width:640px){.mega-menu__grid{padding-left:1.25rem;padding-right:1.25rem}}@media (min-width:1024px){.mega-menu__grid{padding-left:2rem;padding-right:2rem}}@media (max-width:1023px){.utility-bar .mega-menu__grid{gap:.5rem;padding-top:.625rem;padding-bottom:.625rem}}.mega-menu__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));-moz-column-gap:3rem;column-gap:3rem;row-gap:2.5rem;padding-top:2.5rem;padding-bottom:2.5rem}@media (min-width:1024px){.mega-menu__grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:1280px){.mega-menu__grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.mega-menu__heading{margin-bottom:1rem;display:inline-flex;font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.12em;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.mega-menu__heading:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.mega-menu__link{display:inline-flex;font-size:1.02rem;line-height:1.75rem;--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.mega-menu__link:hover{--tw-translate-x:0.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));--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.mega-menu__all{grid-column:1/-1;display:flex;align-items:flex-start;justify-content:flex-end;border-top-width:1px;--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));padding-top:1.25rem}.mega-menu__all-link{display:inline-flex;font-size:.875rem;line-height:1.25rem;font-weight:600;text-transform:uppercase;letter-spacing:.18em;--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1));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(.4,0,.2,1);transition-duration:.15s}.mega-menu__all-link:hover{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.header-actions{order:2;margin-left:auto;display:flex;align-items:center;gap:.5rem;font-size:1.5rem;line-height:2rem;--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}@media (min-width:1024px){.header-actions{margin-left:auto;gap:.75rem}}.nav-icon{display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:9999px;border-width:1px;border-color:transparent;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));font-size:1.2rem;--tw-shadow:0 8px 18px rgba(20,33,61,.05);--tw-shadow-colored:0 8px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);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(.4,0,.2,1);transition-duration:.15s}.nav-icon:hover{--tw-translate-y:-0.125rem;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));--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1));--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}@media (min-width:640px){.nav-icon{font-size:1.35rem}}[data-gallery-main-splide] .splide__track,[data-product-gallery-main] .splide__track{overflow:hidden}[data-gallery-thumb-splide] .splide__slide,[data-product-gallery-thumbs] .splide__slide{cursor:pointer;opacity:.7;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(.4,0,.2,1);transition-duration:.15s}[data-gallery-thumb-splide] .splide__slide.is-active,[data-product-gallery-thumbs] .splide__slide.is-active{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1));opacity:1}[data-gallery-thumb-splide] .splide__slide img,[data-product-gallery-thumbs] .splide__slide img{display:block;height:100%;width:100%}.category-description{max-width:none}.category-description p:first-child{margin-top:0}.category-description p:last-child{margin-bottom:0}.category-description p+p{margin-top:1rem}.category-description ol,.category-description ul{margin-top:1rem;margin-bottom:1rem;padding-left:1.25rem}.category-description li+li{margin-top:.5rem}.category-description a{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1));text-decoration-line:underline;text-underline-offset:4px}@media (max-width:1023px){.desktop-nav,.mega-menu{display:none}.utility-bar .site-container{gap:.5rem;padding-top:.625rem;padding-bottom:.625rem}.utility-bar a[href^="mailto:"]{display:none}.header-locale{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.header-locale,.locale-picker,.locale-picker__summary{width:100%}.brand-mark{font-size:2.2rem}.header-bar{row-gap:.75rem}.menu-panel{max-height:70vh;overflow-y:auto;padding:.75rem}}@media (max-width:639px){.header-actions .nav-icon:first-child{display:none}.menu-toggle{padding-left:1rem;padding-right:1rem}}button[type=submit]{box-shadow:var(--cta-glow)}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.left-0{left:0}.left-2{left:.5rem}.right-0{right:0}.right-2{right:.5rem}.top-1\/2{top:50%}.top-full{top:100%}.z-20{z-index:20}.z-\[70\]{z-index:70}.mx-auto{margin-left:auto;margin-right:auto}.mb-4{margin-bottom:1rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-32{height:8rem}.h-6{height:1.5rem}.h-\[16rem\]{height:16rem}.h-\[20rem\]{height:20rem}.h-full{height:100%}.max-h-\[12rem\]{max-height:12rem}.max-h-\[15\.5rem\]{max-height:15.5rem}.max-h-\[20rem\]{max-height:20rem}.max-h-\[65vh\]{max-height:65vh}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-11{min-height:2.75rem}.min-h-12{min-height:3rem}.min-h-5{min-height:1.25rem}.min-h-\[16rem\]{min-height:16rem}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-20{width:5rem}.w-8{width:2rem}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0}.min-w-5{min-width:1.25rem}.min-w-\[13rem\]{min-width:13rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-\[104rem\]{max-width:104rem}.max-w-\[17rem\]{max-width:17rem}.max-w-\[82\%\]{max-width:82%}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.basis-full{flex-basis:100%}.-translate-y-1\/2{--tw-translate-y:-50%;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))}.grid-cols-\[minmax\(0\2c 1fr\)_11rem\]{grid-template-columns:minmax(0,1fr) 11rem}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-10{row-gap:2.5rem}.gap-y-12{row-gap:3rem}.gap-y-2{row-gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-0{border-width:0}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-stone-200{--tw-border-opacity:1;border-color:rgb(231 229 228/var(--tw-border-opacity,1))}.border-stone-300{--tw-border-opacity:1;border-color:rgb(214 211 209/var(--tw-border-opacity,1))}.bg-\[\#eceae7\]{--tw-bg-opacity:1;background-color:rgb(236 234 231/var(--tw-bg-opacity,1))}.bg-\[\#fcfbf8\]{--tw-bg-opacity:1;background-color:rgb(252 251 248/var(--tw-bg-opacity,1))}.bg-\[\#fdfbf7\]{--tw-bg-opacity:1;background-color:rgb(253 251 247/var(--tw-bg-opacity,1))}.bg-\[\#fff7e7\]{--tw-bg-opacity:1;background-color:rgb(255 247 231/var(--tw-bg-opacity,1))}.bg-\[\#fffdfa\]{--tw-bg-opacity:1;background-color:rgb(255 253 250/var(--tw-bg-opacity,1))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-black\/55{background-color:rgba(0,0,0,.55)}.bg-stone-100{--tw-bg-opacity:1;background-color:rgb(245 245 244/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-12{padding:3rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pt-2{padding-top:.5rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.64rem\]{font-size:.64rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.82rem\]{font-size:.82rem}.text-\[0\.92rem\]{font-size:.92rem}.text-\[1\.02rem\]{font-size:1.02rem}.text-\[1\.5rem\]{font-size:1.5rem}.text-\[2rem\]{font-size:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-none{line-height:1}.tracking-\[0\.06em\]{letter-spacing:.06em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-\[0\.26em\]{letter-spacing:.26em}.tracking-\[0\.28em\]{letter-spacing:.28em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.3em\]{letter-spacing:.3em}.tracking-normal{letter-spacing:0}.text-amber-300\/80{color:rgba(252,211,77,.8)}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-stone-300{--tw-text-opacity:1;color:rgb(214 211 209/var(--tw-text-opacity,1))}.text-stone-400{--tw-text-opacity:1;color:rgb(168 162 158/var(--tw-text-opacity,1))}.text-stone-500{--tw-text-opacity:1;color:rgb(120 113 108/var(--tw-text-opacity,1))}.text-stone-600{--tw-text-opacity:1;color:rgb(87 83 78/var(--tw-text-opacity,1))}.text-stone-700{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1))}.text-stone-800{--tw-text-opacity:1;color:rgb(41 37 36/var(--tw-text-opacity,1))}.text-stone-900{--tw-text-opacity:1;color:rgb(28 25 23/var(--tw-text-opacity,1))}.text-stone-950{--tw-text-opacity:1;color:rgb(12 10 9/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-\[0_12px_30px_rgba\(20\2c 33\2c 61\2c 0\.05\)\]{--tw-shadow:0 12px 30px rgba(20,33,61,.05);--tw-shadow-colored:0 12px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_42px_rgba\(20\2c 33\2c 61\2c 0\.06\)\]{--tw-shadow:0 18px 42px rgba(20,33,61,.06);--tw-shadow-colored:0 18px 42px 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-\[0_24px_60px_rgba\(0\2c 0\2c 0\2c 0\.12\)\]{--tw-shadow:0 24px 60px rgba(0,0,0,.12);--tw-shadow-colored:0 24px 60px 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-\[0_32px_120px_rgba\(0\2c 0\2c 0\2c 0\.28\)\]{--tw-shadow:0 32px 120px rgba(0,0,0,.28);--tw-shadow-colored:0 32px 120px 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-\[0_8px_18px_rgba\(245\2c 158\2c 11\2c 0\.22\)\]{--tw-shadow:0 8px 18px rgba(245,158,11,.22);--tw-shadow-colored:0 8px 18px 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-\[0_8px_18px_rgba\(245\2c 158\2c 11\2c 0\.28\)\]{--tw-shadow:0 8px 18px rgba(245,158,11,.28);--tw-shadow-colored:0 8px 18px 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-none{outline:2px solid transparent;outline-offset:2px}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-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)}.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(.4,0,.2,1);transition-duration:.15s}.duration-500{transition-duration:.5s}.hover\:-translate-y-1:hover{--tw-translate-y:-0.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))}.hover\:border-amber-400\/60:hover{border-color:rgba(251,191,36,.6)}.hover\:border-amber-500:hover{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.hover\:border-rose-300:hover{--tw-border-opacity:1;border-color:rgb(253 164 175/var(--tw-border-opacity,1))}.hover\:bg-amber-600:hover{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.hover\:bg-rose-50:hover{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.hover\:text-amber-600:hover{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.hover\:text-rose-700:hover{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.hover\:text-stone-700:hover{--tw-text-opacity:1;color:rgb(68 64 60/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-amber-500:focus{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:scale-\[1\.04\]{--tw-scale-x:1.04;--tw-scale-y:1.04;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))}@media (min-width:640px){.sm\:left-4{left:1rem}.sm\:right-4{right:1rem}.sm\:inline-flex{display:inline-flex}.sm\:h-11{height:2.75rem}.sm\:h-20{height:5rem}.sm\:max-h-\[28rem\]{max-height:28rem}.sm\:min-h-\[22rem\]{min-height:22rem}.sm\:w-11{width:2.75rem}.sm\:w-20{width:5rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:justify-end{justify-content:flex-end}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:text-\[2\.1rem\]{font-size:2.1rem}.sm\:text-\[2\.5rem\]{font-size:2.5rem}.sm\:text-\[2\.6rem\]{font-size:2.6rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}}@media (min-width:768px){.md\:grid{display:grid}.md\:w-32{width:8rem}.md\:min-w-\[11rem\]{min-width:11rem}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:p-6{padding:1.5rem}.md\:text-right{text-align:right}}@media (min-width:1024px){.lg\:ml-10{margin-left:2.5rem}.lg\:mt-5{margin-top:1.25rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:max-h-\[34rem\]{max-height:34rem}.lg\:min-h-\[30rem\]{min-height:30rem}.lg\:w-24{width:6rem}.lg\:min-w-0{min-width:0}.lg\:min-w-\[20rem\]{min-width:20rem}.lg\:flex-1{flex:1 1 0%}.lg\:basis-auto{flex-basis:auto}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:items-center{align-items:center}.lg\:justify-center{justify-content:center}.lg\:justify-between{justify-content:space-between}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.lg\:pt-8{padding-top:2rem}.lg\:text-right{text-align:right}}@media (min-width:1280px){.xl\:sticky{position:sticky}.xl\:top-28{top:7rem}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\2c 1\.2fr\)_25rem\]{grid-template-columns:minmax(0,1.2fr) 25rem}.xl\:grid-cols-\[minmax\(0\2c 1\.55fr\)_24rem\]{grid-template-columns:minmax(0,1.55fr) 24rem}.xl\:flex-row{flex-direction:row}.xl\:items-center{align-items:center}.xl\:justify-between{justify-content:space-between}.xl\:self-start{align-self:flex-start}}@media (min-width:1536px){.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}} \ No newline at end of file diff --git a/web/dist/app.js b/web/dist/app.js index 2a8ccea..e1c652e 100644 --- a/web/dist/app.js +++ b/web/dist/app.js @@ -1 +1 @@ -var _=document.documentElement;_.dataset.js="ready";var L=document.querySelector("[data-menu-toggle]"),q=document.querySelector("[data-menu-panel]"),w=[...document.querySelectorAll("[data-mega-trigger]")],M=[...document.querySelectorAll("[data-mega-menu]")];if(L&&q){let d=()=>{q.classList.add("hidden"),L.setAttribute("aria-expanded","false")},b=()=>{q.classList.remove("hidden"),L.setAttribute("aria-expanded","true")};L.addEventListener("click",()=>{if(L.getAttribute("aria-expanded")==="true"){d();return}b()}),window.addEventListener("resize",()=>{if(window.innerWidth>=1024){q.classList.remove("hidden"),L.setAttribute("aria-expanded","true");return}d()})}if(w.length>0&&M.length>0){let d=()=>{w.forEach((o)=>{o.setAttribute("aria-expanded","false"),o.closest(".desktop-nav__entry")?.classList.remove("desktop-nav__entry--open")}),M.forEach((o)=>{o.classList.add("hidden")})},b=(o)=>{let s=o.dataset.megaTarget;if(!s)return;d(),o.setAttribute("aria-expanded","true"),o.closest(".desktop-nav__entry")?.classList.add("desktop-nav__entry--open"),document.getElementById(s)?.classList.remove("hidden")};w.forEach((o)=>{o.addEventListener("click",(s)=>{if(window.innerWidth<1024)return;let p=o.getAttribute("aria-expanded")==="true";if(o instanceof HTMLAnchorElement&&p)return;if(s.preventDefault(),p){d();return}b(o)})}),document.addEventListener("click",(o)=>{if(window.innerWidth<1024)return;let s=o.target;if(!(s instanceof Node))return;let p=w.some((a)=>a.contains(s)),f=M.some((a)=>a.contains(s));if(!p&&!f)d()}),document.addEventListener("keydown",(o)=>{if(o.key==="Escape")d()}),window.addEventListener("resize",()=>{if(window.innerWidth<1024)d()})}var N=document.querySelector("button[type='submit']");if(N)N.addEventListener("mouseenter",()=>{_.style.setProperty("--cta-glow","0 0 0 4px rgba(252, 211, 77, 0.12)")}),N.addEventListener("mouseleave",()=>{_.style.setProperty("--cta-glow","0 0 0 0 rgba(0,0,0,0)")});var g=document.querySelector("[data-product-main-image]"),O=g?.dataset.defaultImage||g?.getAttribute("src")||"",E=document.querySelector("[data-product-thumb-carousel]"),D=E?.querySelector("[data-product-thumb-viewport]"),X=E?.querySelector("[data-product-thumb-track]"),H=E?.querySelector("[data-product-thumb-prev]"),R=E?.querySelector("[data-product-thumb-next]"),h=[...document.querySelectorAll("[data-product-thumb-index]")];if(g&&E&&D&&X&&h.length>0){let d=0,b=()=>{h.forEach((a,r)=>{if(r===d){a.classList.remove("border-stone-800"),a.classList.add("border-amber-400/60","ring-1","ring-amber-300/40"),a.setAttribute("aria-current","true");return}a.classList.remove("border-amber-400/60","ring-1","ring-amber-300/40"),a.classList.add("border-stone-800"),a.removeAttribute("aria-current")})},o=(a)=>{h[a]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})},s=(a)=>{let r=(a+h.length)%h.length,l=h[r],y=l?.dataset.productThumbLarge||l?.dataset.productThumbLargeFallback||"";if(!l||!y)return;if(d=r,g.setAttribute("src",y),l.dataset.productThumbAlt)g.setAttribute("alt",l.dataset.productThumbAlt);b(),o(r)},p=(a)=>{s(d+a)};H?.addEventListener("click",()=>{p(-1)}),R?.addEventListener("click",()=>{p(1)}),h.forEach((a,r)=>{a.addEventListener("click",()=>{s(r)})});let f=h.findIndex((a)=>a.dataset.productThumbLarge===g.getAttribute("src"));s(f>=0?f:0),D.addEventListener("wheel",(a)=>{if(Math.abs(a.deltaY)<=Math.abs(a.deltaX))return;a.preventDefault(),D.scrollBy({left:a.deltaY,behavior:"smooth"})},{passive:!1})}var G=document.querySelector("[data-variant-picker]"),B=document.querySelector("[data-variant-combination]");if(G&&B){let d=[...G.querySelectorAll("[data-variant-group]")],b=document.querySelector("[data-variant-selection-summary]"),o=document.querySelector("[data-product-price-gross]"),s=document.querySelector("[data-product-price-net]"),p=o?.dataset.defaultPriceGross||o?.textContent||"",f=s?.dataset.defaultPriceNet||s?.textContent||"",a=[...document.querySelectorAll("[data-variant-combination-image]")],r=new Map(a.map((e)=>[e.dataset.variantCombinationImage,{imageLarge:e.dataset.imageLarge||"",priceGross:e.dataset.priceGross||"",priceNet:e.dataset.priceNet||""}])),l=(e)=>(e||"").split(",").map((t)=>Number.parseInt(t,10)).filter((t)=>Number.isInteger(t)&&t>0),y=(e,t,n)=>{if(e==="radio"){if(n)return"rounded-full border border-stone-200 bg-stone-100 px-4 py-2 text-sm font-medium text-stone-400 opacity-50 transition";if(t)return"rounded-full border border-stone-900 bg-stone-900 px-4 py-2 text-sm font-medium text-stone-50 transition";return"rounded-full border border-stone-300 bg-white px-4 py-2 text-sm font-medium text-stone-900 transition hover:border-stone-700"}if(e==="select"){if(n)return"w-full rounded-2xl px-4 py-3 text-left text-sm font-medium text-stone-400 opacity-50 transition";if(t)return"w-full rounded-2xl bg-stone-900 px-4 py-3 text-left text-sm font-medium text-stone-50 transition";return"w-full rounded-2xl px-4 py-3 text-left text-sm font-medium text-stone-700 transition hover:bg-stone-100 hover:text-stone-950"}if(n)return"inline-flex min-h-10 min-w-10 items-center justify-center border border-stone-200 p-0.5 opacity-40 transition";if(t)return"inline-flex min-h-10 min-w-10 items-center justify-center border border-stone-900 p-0.5 ring-1 ring-stone-900 transition";return"inline-flex min-h-10 min-w-10 items-center justify-center border border-stone-300 p-0.5 transition hover:border-stone-700"},x=(e,t)=>e.filter((n)=>t.includes(n)),I=(e)=>{let t=null;return d.forEach((n)=>{if(n===e)return;let c=n.querySelector("[data-variant-option][data-selected='true']"),i=l(c?.dataset.combinationIds);if(i.length===0)return;if(t===null){t=i;return}t=x(t,i)}),t},j=(e)=>{if(e.dataset.variantSelect!==void 0)return e.querySelector("[data-variant-select-value]")?.textContent?.trim()||"";let t=e.querySelector("[data-variant-option][data-selected='true']");return t?.getAttribute("aria-label")?.trim()||t?.textContent?.trim()||""},z=()=>{let e=[];if(d.forEach((t)=>{let n=t.dataset.variantGroup,c=j(t),i=n?document.querySelector(`[data-variant-current="${n}"]`):null;if(i)i.textContent=c;let S=t.closest(".space-y-3")?.querySelector("p")?.textContent?.trim()||"";if(S&&c)e.push(`${S}: ${c}`)}),b)b.textContent=e.length>0?e.join(" • "):"Choose product options"},T=(e,t)=>{e.querySelectorAll("[data-variant-option]").forEach((n)=>{let c=n===t;n.dataset.selected=c?"true":"false";let i=n.dataset.disabled==="true";n.className=y(n.dataset.variantPresentation,c,i)})},W=(e)=>{if(e.dataset.variantSelect===void 0)return;let t=e.querySelector("[data-variant-select-value]"),n=e.querySelector("[data-variant-option][data-selected='true']");if(t&&n)t.textContent=n.textContent?.trim()||""},F=(e)=>{let t=I(e),n=[...e.querySelectorAll("[data-variant-option]")];n.forEach((u)=>{let S=l(u.dataset.combinationIds),P=t===null||x(S,t).length>0;u.dataset.disabled=P?"false":"true",u.disabled=!P,u.setAttribute("aria-disabled",P?"false":"true")});let c=e.querySelector("[data-variant-option][data-selected='true']");if(c?.dataset.disabled==="true")c.dataset.selected="false";let i=e.querySelector("[data-variant-option][data-selected='true'][data-disabled='false']");if(!i)i=e.querySelector("[data-variant-option][data-disabled='false']");if(i)T(e,i),W(e);else n.forEach((u)=>{u.dataset.selected="false",u.className=y(u.dataset.variantPresentation,!1,!0)})},$=()=>{for(let e=0;e<2;e+=1)d.forEach((t)=>{F(t)})},C=()=>{$();let e=null;if(d.forEach((t)=>{let n=t.querySelector("[data-variant-option][data-selected='true']"),c=l(n?.dataset.combinationIds);if(c.length===0){e=[];return}if(e===null){e=c;return}e=e.filter((i)=>c.includes(i))}),e&&e.length>0){let t=String(e[0]);B.value=t;let n=r.get(t);if(g){let c=n?.imageLarge||O;if(c){g.setAttribute("src",c);let i=h.findIndex((u)=>u.dataset.productThumbLarge===c);if(i>=0)h.forEach((u,S)=>{if(S===i)u.classList.remove("border-stone-800"),u.classList.add("border-amber-400/60","ring-1","ring-amber-300/40"),u.setAttribute("aria-current","true");else u.classList.remove("border-amber-400/60","ring-1","ring-amber-300/40"),u.classList.add("border-stone-800"),u.removeAttribute("aria-current")}),h[i]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})}}if(o)o.textContent=n?.priceGross||p;if(s)s.textContent=n?.priceNet||f}else{if(B.value="",o)o.textContent=p;if(s)s.textContent=f}z()},A=()=>{d.forEach((e)=>{if(e.dataset.variantSelect===void 0)return;e.querySelector("[data-variant-select-menu]")?.classList.add("hidden"),e.querySelector("[data-variant-select-trigger]")?.setAttribute("aria-expanded","false")})};d.forEach((e)=>{if(e.dataset.variantSelect!==void 0){let t=e.querySelector("[data-variant-select-trigger]"),n=e.querySelector("[data-variant-select-menu]"),c=e.querySelector("[data-variant-select-value]");t?.addEventListener("click",()=>{let i=t.getAttribute("aria-expanded")==="true";if(A(),i)return;n?.classList.remove("hidden"),t.setAttribute("aria-expanded","true")}),e.querySelectorAll("[data-variant-option]").forEach((i)=>{i.addEventListener("click",()=>{if(i.dataset.disabled==="true")return;if(T(e,i),c)c.textContent=i.textContent?.trim()||"";A(),C()})});return}e.querySelectorAll("[data-variant-option]").forEach((t)=>{t.addEventListener("click",()=>{if(t.dataset.disabled==="true")return;T(e,t),C()})})}),C(),document.addEventListener("click",(e)=>{let t=e.target;if(!(t instanceof Node))return;if(!G.contains(t))A()}),document.addEventListener("keydown",(e)=>{if(e.key==="Escape")A()})}var m=document.querySelector("[data-gallery-modal]"),k=m?.querySelector("[data-gallery-main]"),Y=[...document.querySelectorAll("[data-gallery-open]")],J=[...document.querySelectorAll("[data-gallery-close]")],v=[...document.querySelectorAll("[data-gallery-thumb]")],K=m?.querySelector("[data-gallery-prev]"),Q=m?.querySelector("[data-gallery-next]"),V=m?.querySelector("[data-gallery-thumb-viewport]"),U=m?.querySelector("[data-gallery-thumb-prev]"),Z=m?.querySelector("[data-gallery-thumb-next]");if(m&&k&&Y.length>0){let d=0,b=!1,o=()=>{let l=document.querySelector("[data-product-main-image]")?.getAttribute("src")||"";if(l){let y=v.findIndex((x)=>x.dataset.galleryThumb===l);if(y>=0)f(y)}m.classList.remove("hidden"),m.setAttribute("aria-hidden","false"),document.body.style.overflow="hidden"},s=()=>{m.classList.add("hidden"),m.setAttribute("aria-hidden","true"),document.body.style.overflow=""},p=(r)=>{if(v.forEach((l)=>{l.classList.remove("border-amber-400/60"),l.classList.add("border-stone-800")}),r)r.classList.remove("border-stone-800"),r.classList.add("border-amber-400/60"),r.scrollIntoView({block:"nearest",inline:"nearest"})},f=(r)=>{if(v.length===0)return;let l=(r+v.length)%v.length,y=v[l],x=y.dataset.galleryThumb,I=y.dataset.galleryAlt||k.getAttribute("alt")||"";if(!x)return;d=l,k.setAttribute("src",x),k.setAttribute("alt",I),p(y)},a=(r)=>{if(v.length<=1)return;f(d+r)};U?.addEventListener("click",()=>{a(-1)}),Z?.addEventListener("click",()=>{a(1)}),Y.forEach((r)=>{r.addEventListener("click",o)}),J.forEach((r)=>{r.addEventListener("click",s)}),v.forEach((r,l)=>{if(l===0)f(0);r.addEventListener("click",()=>{f(l)})}),K?.addEventListener("click",()=>{a(-1)}),Q?.addEventListener("click",()=>{a(1)}),V?.addEventListener("wheel",(r)=>{if(window.innerWidth>=1024){r.preventDefault(),V.scrollBy({top:r.deltaY,behavior:"smooth"});return}if(Math.abs(r.deltaY)<=Math.abs(r.deltaX))return;r.preventDefault(),V.scrollBy({left:r.deltaY,behavior:"smooth"})},{passive:!1}),m.addEventListener("click",(r)=>{if(r.target===m)s()}),m.addEventListener("wheel",(r)=>{if(m.getAttribute("aria-hidden")!=="false"||v.length<=1)return;if(Math.abs(r.deltaY)<10)return;if(r.preventDefault(),b)return;b=!0,a(r.deltaY>0?1:-1),window.setTimeout(()=>{b=!1},180)},{passive:!1}),document.addEventListener("keydown",(r)=>{if(m.getAttribute("aria-hidden")!=="false")return;if(r.key==="Escape"){s();return}if(r.key==="ArrowLeft"){r.preventDefault(),a(-1);return}if(r.key==="ArrowRight")r.preventDefault(),a(1)})} +var H=document.documentElement;H.dataset.js="ready";var x=document.querySelector("[data-menu-toggle]"),I=document.querySelector("[data-menu-panel]"),k=[...document.querySelectorAll("[data-mega-trigger]")],N=[...document.querySelectorAll("[data-mega-menu]")];if(x&&I){let s=()=>{I.classList.add("hidden"),x.setAttribute("aria-expanded","false")},u=()=>{I.classList.remove("hidden"),x.setAttribute("aria-expanded","true")};x.addEventListener("click",()=>{if(x.getAttribute("aria-expanded")==="true"){s();return}u()}),window.addEventListener("resize",()=>{if(window.innerWidth>=1024){I.classList.remove("hidden"),x.setAttribute("aria-expanded","true");return}s()})}if(k.length>0&&N.length>0){let s=()=>{k.forEach((r)=>{r.setAttribute("aria-expanded","false"),r.closest(".desktop-nav__entry")?.classList.remove("desktop-nav__entry--open")}),N.forEach((r)=>{r.classList.add("hidden")})},u=(r)=>{let d=r.dataset.megaTarget;if(!d)return;s(),r.setAttribute("aria-expanded","true"),r.closest(".desktop-nav__entry")?.classList.add("desktop-nav__entry--open"),document.getElementById(d)?.classList.remove("hidden")};k.forEach((r)=>{r.addEventListener("click",(d)=>{if(window.innerWidth<1024)return;let f=r.getAttribute("aria-expanded")==="true";if(r instanceof HTMLAnchorElement&&f)return;if(d.preventDefault(),f){s();return}u(r)})}),document.addEventListener("click",(r)=>{if(window.innerWidth<1024)return;let d=r.target;if(!(d instanceof Node))return;let f=k.some((n)=>n.contains(d)),m=N.some((n)=>n.contains(d));if(!f&&!m)s()}),document.addEventListener("keydown",(r)=>{if(r.key==="Escape")s()}),window.addEventListener("resize",()=>{if(window.innerWidth<1024)s()})}var T=document.querySelector("button[type='submit']");if(T)T.addEventListener("mouseenter",()=>{H.style.setProperty("--cta-glow","0 0 0 4px rgba(252, 211, 77, 0.12)")}),T.addEventListener("mouseleave",()=>{H.style.setProperty("--cta-glow","0 0 0 0 rgba(0,0,0,0)")});var b=window.Splide,w=document.querySelector("[data-product-main-image]"),R=document.querySelector("[data-product-gallery-main]"),V=document.querySelector("[data-product-gallery-thumbs]"),Z=document.querySelector("[data-product-thumb-prev]"),ee=document.querySelector("[data-product-thumb-next]"),S=[...document.querySelectorAll("[data-product-gallery-image]")],Y=w?.dataset.defaultImage||S[0]?.dataset.imageUrl||w?.getAttribute("src")||"",y=null,P=null,c=null,G=null,z=(s,u)=>s.findIndex((r)=>(r.dataset.imageUrl||r.getAttribute("src")||"")===u);if(b&&R&&V&&S.length>1)y=new b(R,{type:"slide",arrows:!1,pagination:!1,rewind:!0,drag:!0,speed:520}),P=new b(V,{fixedWidth:64,fixedHeight:64,gap:12,rewind:!0,pagination:!1,arrows:!1,isNavigation:!0,focus:"center",dragMinThreshold:{mouse:4,touch:8},breakpoints:{640:{fixedWidth:64,fixedHeight:64},1024:{fixedWidth:80,fixedHeight:80},1280:{fixedWidth:96,fixedHeight:96}}}),y.sync(P),y.mount(),P.mount(),Z?.addEventListener("click",()=>{y.go("<")}),ee?.addEventListener("click",()=>{y.go(">")});var D=document.querySelector("[data-variant-picker]"),W=document.querySelector("[data-variant-combination]");if(D&&W){let s=[...D.querySelectorAll("[data-variant-group]")],u=document.querySelector("[data-variant-selection-summary]"),r=document.querySelector("[data-product-price-gross]"),d=document.querySelector("[data-product-price-net]"),f=r?.dataset.defaultPriceGross||r?.textContent||"",m=d?.dataset.defaultPriceNet||d?.textContent||"",n=[...document.querySelectorAll("[data-variant-combination-image]")],g=new Map(n.map((e)=>[e.dataset.variantCombinationImage,{imageLarge:e.dataset.imageLarge||"",priceGross:e.dataset.priceGross||"",priceNet:e.dataset.priceNet||""}])),h=(e)=>(e||"").split(",").map((t)=>Number.parseInt(t,10)).filter((t)=>Number.isInteger(t)&&t>0),E=(e,t,a)=>{if(e==="radio"){if(a)return"rounded-full border border-stone-200 bg-stone-100 px-4 py-2 text-sm font-medium text-stone-400 opacity-50 transition";if(t)return"rounded-full border border-stone-900 bg-stone-900 px-4 py-2 text-sm font-medium text-stone-50 transition";return"rounded-full border border-stone-300 bg-white px-4 py-2 text-sm font-medium text-stone-900 transition hover:border-stone-700"}if(e==="select"){if(a)return"w-full rounded-2xl px-4 py-3 text-left text-sm font-medium text-stone-400 opacity-50 transition";if(t)return"w-full rounded-2xl bg-stone-900 px-4 py-3 text-left text-sm font-medium text-stone-50 transition";return"w-full rounded-2xl px-4 py-3 text-left text-sm font-medium text-stone-700 transition hover:bg-stone-100 hover:text-stone-950"}if(a)return"inline-flex min-h-10 min-w-10 items-center justify-center border border-stone-200 p-0.5 opacity-40 transition";if(t)return"inline-flex min-h-10 min-w-10 items-center justify-center border border-stone-900 p-0.5 ring-1 ring-stone-900 transition";return"inline-flex min-h-10 min-w-10 items-center justify-center border border-stone-300 p-0.5 transition hover:border-stone-700"},_=(e,t)=>e.filter((a)=>t.includes(a)),$=(e)=>{let t=null;return s.forEach((a)=>{if(a===e)return;let o=a.querySelector("[data-variant-option][data-selected='true']"),i=h(o?.dataset.combinationIds);if(i.length===0)return;if(t===null){t=i;return}t=_(t,i)}),t},F=(e)=>{if(e.dataset.variantSelect!==void 0)return e.querySelector("[data-variant-select-value]")?.textContent?.trim()||"";let t=e.querySelector("[data-variant-option][data-selected='true']");return t?.getAttribute("aria-label")?.trim()||t?.textContent?.trim()||""},O=()=>{let e=[];if(s.forEach((t)=>{let a=t.dataset.variantGroup,o=F(t),i=a?document.querySelector(`[data-variant-current="${a}"]`):null;if(i)i.textContent=o;let q=t.closest(".space-y-3")?.querySelector("p")?.textContent?.trim()||"";if(q&&o)e.push(`${q}: ${o}`)}),u)u.textContent=e.length>0?e.join(" • "):"Choose product options"},A=(e,t)=>{e.querySelectorAll("[data-variant-option]").forEach((a)=>{let o=a===t;a.dataset.selected=o?"true":"false";let i=a.dataset.disabled==="true";a.className=E(a.dataset.variantPresentation,o,i)})},J=(e)=>{if(e.dataset.variantSelect===void 0)return;let t=e.querySelector("[data-variant-select-value]"),a=e.querySelector("[data-variant-option][data-selected='true']");if(t&&a)t.textContent=a.textContent?.trim()||""},K=(e)=>{let t=$(e),a=[...e.querySelectorAll("[data-variant-option]")];a.forEach((p)=>{let q=h(p.dataset.combinationIds),M=t===null||_(q,t).length>0;p.dataset.disabled=M?"false":"true",p.disabled=!M,p.setAttribute("aria-disabled",M?"false":"true")});let o=e.querySelector("[data-variant-option][data-selected='true']");if(o?.dataset.disabled==="true")o.dataset.selected="false";let i=e.querySelector("[data-variant-option][data-selected='true'][data-disabled='false']");if(!i)i=e.querySelector("[data-variant-option][data-disabled='false']");if(i)A(e,i),J(e);else a.forEach((p)=>{p.dataset.selected="false",p.className=E(p.dataset.variantPresentation,!1,!0)})},Q=()=>{for(let e=0;e<2;e+=1)s.forEach((t)=>{K(t)})},C=()=>{Q();let e=null;if(s.forEach((t)=>{let a=t.querySelector("[data-variant-option][data-selected='true']"),o=h(a?.dataset.combinationIds);if(o.length===0){e=[];return}if(e===null){e=o;return}e=e.filter((i)=>o.includes(i))}),e&&e.length>0){let t=String(e[0]);W.value=t;let a=g.get(t),o=a?.imageLarge||Y;if(o){if(y&&S.length>0){let i=z(S,o);if(i>=0)y.go(i)}else if(w)w.setAttribute("src",o)}if(r)r.textContent=a?.priceGross||f;if(d)d.textContent=a?.priceNet||m}else{if(W.value="",r)r.textContent=f;if(d)d.textContent=m}O()},L=()=>{s.forEach((e)=>{if(e.dataset.variantSelect===void 0)return;e.querySelector("[data-variant-select-menu]")?.classList.add("hidden"),e.querySelector("[data-variant-select-trigger]")?.setAttribute("aria-expanded","false")})};s.forEach((e)=>{if(e.dataset.variantSelect!==void 0){let t=e.querySelector("[data-variant-select-trigger]"),a=e.querySelector("[data-variant-select-menu]"),o=e.querySelector("[data-variant-select-value]");t?.addEventListener("click",()=>{let i=t.getAttribute("aria-expanded")==="true";if(L(),i)return;a?.classList.remove("hidden"),t.setAttribute("aria-expanded","true")}),e.querySelectorAll("[data-variant-option]").forEach((i)=>{i.addEventListener("click",()=>{if(i.dataset.disabled==="true")return;if(A(e,i),o)o.textContent=i.textContent?.trim()||"";L(),C()})});return}e.querySelectorAll("[data-variant-option]").forEach((t)=>{t.addEventListener("click",()=>{if(t.dataset.disabled==="true")return;A(e,t),C()})})}),C(),document.addEventListener("click",(e)=>{let t=e.target;if(!(t instanceof Node))return;if(!D.contains(t))L()}),document.addEventListener("keydown",(e)=>{if(e.key==="Escape")L()})}var l=document.querySelector("[data-gallery-modal]"),B=l?.querySelector("[data-gallery-main]"),X=[...document.querySelectorAll("[data-gallery-open]")],te=[...document.querySelectorAll("[data-gallery-close]")],j=l?.querySelector("[data-gallery-main-splide]"),U=l?.querySelector("[data-gallery-thumb-splide]"),v=[...document.querySelectorAll("[data-gallery-image]")],ae=l?.querySelector("[data-gallery-prev]"),re=l?.querySelector("[data-gallery-next]"),ne=l?.querySelector("[data-gallery-thumb-prev]"),ie=l?.querySelector("[data-gallery-thumb-next]");if(b&&j&&U&&v.length>1)c=new b(j,{type:"slide",arrows:!1,pagination:!1,rewind:!0,drag:!0,speed:520}),G=new b(U,{fixedWidth:64,fixedHeight:64,gap:12,rewind:!0,pagination:!1,arrows:!1,isNavigation:!0,focus:"center",dragMinThreshold:{mouse:4,touch:8},breakpoints:{640:{fixedWidth:64,fixedHeight:64},1024:{fixedWidth:80,fixedHeight:80},1280:{fixedWidth:96,fixedHeight:96}}}),c.sync(G),c.mount(),G.mount();if(l&&(B||c)&&X.length>0){let s=!1,u=()=>{if(y&&S.length>0)return S[y.index]?.dataset.imageUrl||Y;return w?.getAttribute("src")||Y},r=(n)=>{if(c&&v.length>0){let E=(n+v.length)%v.length;c.go(E);return}if(!B)return;let h=v[n]?.dataset.imageUrl||"";if(!h)return;B.setAttribute("src",h)},d=(n)=>{if(c){c.go(n>0?">":"<");return}r(0)},f=(n)=>{let g=Number.isInteger(n)?n:z(v,u());if(g>=0)r(g);l.classList.remove("hidden"),l.setAttribute("aria-hidden","false"),document.body.style.overflow="hidden"},m=()=>{l.classList.add("hidden"),l.setAttribute("aria-hidden","true"),document.body.style.overflow=""};X.forEach((n)=>{n.addEventListener("click",()=>{let g=Number.parseInt(n.dataset.galleryIndex||"",10);f(Number.isInteger(g)?g:void 0)})}),te.forEach((n)=>{n.addEventListener("click",m)}),ae?.addEventListener("click",()=>{d(-1)}),re?.addEventListener("click",()=>{d(1)}),ne?.addEventListener("click",()=>{c?.go("<")}),ie?.addEventListener("click",()=>{c?.go(">")}),l.addEventListener("click",(n)=>{if(n.target===l)m()}),l.addEventListener("wheel",(n)=>{if(l.getAttribute("aria-hidden")!=="false"||!c)return;if(Math.abs(n.deltaY)<10)return;if(n.preventDefault(),s)return;s=!0,d(n.deltaY>0?1:-1),window.setTimeout(()=>{s=!1},180)},{passive:!1}),document.addEventListener("keydown",(n)=>{if(l.getAttribute("aria-hidden")!=="false")return;if(n.key==="Escape"){m();return}if(n.key==="ArrowLeft"){n.preventDefault(),d(-1);return}if(n.key==="ArrowRight")n.preventDefault(),d(1)})} diff --git a/web/src/app.css b/web/src/app.css index 3333062..bae755f 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -9,14 +9,13 @@ body { font-family: - "IBM Plex Sans", + "Poppins", "Avenir Next", "Segoe UI", sans-serif; background: - radial-gradient(circle at top left, rgba(241, 196, 110, 0.24), transparent 28%), - radial-gradient(circle at top right, rgba(157, 217, 210, 0.16), transparent 34%), - linear-gradient(180deg, #fbfaf6 0%, #f5efe3 55%, #f7f3ea 100%); + radial-gradient(circle at top left, rgba(245, 158, 11, 0.12), transparent 24%), + linear-gradient(180deg, #fffdfa 0%, #faf7f1 100%); @apply text-stone-900; } @@ -24,9 +23,10 @@ h2, h3 { font-family: - "Cormorant Garamond", - "IBM Plex Sans", - serif; + "Poppins", + "Avenir Next", + "Segoe UI", + sans-serif; } } @@ -36,16 +36,15 @@ } .site-header { - @apply sticky top-0 z-40 backdrop-blur; + @apply sticky top-0 z-40 bg-white/95 backdrop-blur; } .utility-bar { - background: linear-gradient(90deg, rgba(20, 33, 61, 0.98), rgba(37, 58, 89, 0.94)); - @apply border-b border-white/10 text-stone-100; + @apply border-b border-stone-200 bg-white text-stone-700; } .header-locale { - @apply flex w-full flex-wrap items-center justify-start gap-2 text-sm text-stone-100 sm:w-auto sm:justify-end; + @apply flex w-full flex-wrap items-center justify-start gap-2 text-sm text-stone-700 sm:w-auto sm:justify-end; } .locale-picker { @@ -53,11 +52,11 @@ } .locale-picker__summary { - @apply flex w-full cursor-pointer list-none items-center justify-between gap-2 rounded-full border border-white/0 px-3 py-1.5 text-stone-100 transition hover:border-white/20 hover:bg-white/10 hover:text-white sm:w-auto sm:justify-start; + @apply flex w-full cursor-pointer list-none items-center justify-between gap-2 rounded-full border border-stone-200 px-3 py-1.5 text-stone-700 transition hover:border-stone-300 hover:bg-stone-50 hover:text-stone-900 sm:w-auto sm:justify-start; } .locale-picker[open] .locale-picker__summary { - @apply border-white/20 bg-white/10 text-white; + @apply border-stone-300 bg-stone-50 text-stone-900; } .locale-picker__summary::-webkit-details-marker { @@ -71,7 +70,7 @@ .locale-picker__code, .locale-picker__item-meta, .locale-picker__chevron { - @apply text-[0.74rem] uppercase tracking-[0.16em] text-stone-300/80; + @apply text-[0.74rem] uppercase tracking-[0.16em] text-stone-400; } .locale-picker__panel { @@ -91,8 +90,7 @@ } .main-nav { - background: rgba(255, 251, 245, 0.82); - @apply border-b border-white/60 shadow-[0_10px_30px_rgba(20,33,61,0.08)]; + @apply border-b border-stone-200 bg-white shadow-[0_8px_24px_rgba(20,33,61,0.05)]; } .header-bar { @@ -100,7 +98,7 @@ } .brand-mark { - @apply inline-flex items-end gap-0.5 text-4xl font-black leading-none tracking-tight text-black transition-transform duration-300 hover:-translate-y-0.5 sm:text-5xl; + @apply inline-flex items-end gap-0.5 text-4xl font-black leading-none tracking-tight text-black transition-transform duration-300 hover:-translate-y-0.5 sm:text-[3.2rem]; } .brand-mark__accent { @@ -108,11 +106,11 @@ } .menu-toggle { - @apply inline-flex h-11 items-center justify-center rounded-full border border-stone-300/70 bg-white/90 px-5 text-[0.68rem] font-semibold uppercase tracking-[0.28em] text-stone-900 shadow-[0_10px_24px_rgba(20,33,61,0.08)] transition hover:border-amber-500 hover:text-amber-600; + @apply inline-flex h-11 items-center justify-center border border-stone-300 bg-white px-5 text-[0.68rem] font-semibold uppercase tracking-[0.28em] text-stone-900 shadow-[0_8px_18px_rgba(20,33,61,0.05)] transition hover:border-amber-500 hover:text-amber-600; } .menu-panel { - @apply order-last mt-2 w-full rounded-[1.75rem] border border-white/70 bg-white/95 p-4 shadow-[0_16px_34px_rgba(20,33,61,0.12)] backdrop-blur lg:order-none lg:mt-0 lg:rounded-none lg:border-0 lg:bg-transparent lg:p-0 lg:shadow-none; + @apply order-last mt-2 w-full rounded-[1.75rem] border border-stone-200 bg-white p-4 shadow-[0_16px_34px_rgba(20,33,61,0.08)] backdrop-blur lg:order-none lg:mt-0 lg:rounded-none lg:border-0 lg:bg-transparent lg:p-0 lg:shadow-none; } .desktop-nav { @@ -120,7 +118,7 @@ } .desktop-nav__link { - @apply inline-flex items-center py-4 text-[1.04rem] font-medium text-stone-800 transition hover:text-amber-600; + @apply inline-flex items-center py-4 text-[1rem] font-medium text-stone-800 transition hover:text-amber-600; } .desktop-nav__toggle { @@ -133,8 +131,8 @@ } .mega-menu { - background: linear-gradient(180deg, rgba(255, 252, 247, 0.98), rgba(252, 248, 240, 0.98)); - @apply absolute inset-x-0 top-full z-50 border-t border-white/70 shadow-[0_28px_60px_rgba(20,33,61,0.16)] backdrop-blur; + background: linear-gradient(180deg, rgba(255, 253, 250, 0.98), rgba(250, 247, 241, 0.98)); + @apply absolute inset-x-0 top-full z-50 border-t border-stone-200 shadow-[0_24px_54px_rgba(20,33,61,0.1)] backdrop-blur; } .mega-menu__grid { @@ -158,11 +156,60 @@ } .header-actions { - @apply order-2 ml-auto flex items-center gap-2 text-2xl text-stone-900 lg:ml-auto lg:gap-4; + @apply order-2 ml-auto flex items-center gap-2 text-2xl text-stone-900 lg:ml-auto lg:gap-3; } .nav-icon { - @apply flex h-11 w-11 items-center justify-center rounded-full bg-white/80 text-[1.2rem] shadow-[0_10px_24px_rgba(20,33,61,0.08)] transition hover:-translate-y-0.5 hover:text-amber-600 sm:text-[1.35rem]; + @apply flex h-11 w-11 items-center justify-center rounded-full border border-transparent bg-white text-[1.2rem] shadow-[0_8px_18px_rgba(20,33,61,0.05)] transition hover:-translate-y-0.5 hover:border-stone-200 hover:text-amber-600 sm:text-[1.35rem]; + } + + [data-product-gallery-main] .splide__track, + [data-gallery-main-splide] .splide__track { + @apply overflow-hidden; + } + + [data-product-gallery-thumbs] .splide__slide, + [data-gallery-thumb-splide] .splide__slide { + @apply cursor-pointer opacity-70 transition; + } + + [data-product-gallery-thumbs] .splide__slide.is-active, + [data-gallery-thumb-splide] .splide__slide.is-active { + @apply border-amber-500 opacity-100; + } + + [data-product-gallery-thumbs] .splide__slide img, + [data-gallery-thumb-splide] .splide__slide img { + @apply block h-full w-full; + } + + .category-description { + @apply max-w-none; + } + + .category-description p:first-child { + @apply mt-0; + } + + .category-description p:last-child { + @apply mb-0; + } + + .category-description p + p { + @apply mt-4; + } + + .category-description ul, + .category-description ol { + @apply my-4 pl-5; + } + + .category-description li + li { + @apply mt-2; + } + + .category-description a { + @apply text-amber-600 underline underline-offset-4; } @media (max-width: 1023px) { diff --git a/web/src/app.js b/web/src/app.js index b493e03..696fe33 100644 --- a/web/src/app.js +++ b/web/src/app.js @@ -107,85 +107,221 @@ if (cartButton) { }); } -const productMainImage = document.querySelector("[data-product-main-image]"); -const defaultProductImage = productMainImage?.dataset.defaultImage || productMainImage?.getAttribute("src") || ""; -const productThumbCarousel = document.querySelector("[data-product-thumb-carousel]"); -const productThumbViewport = productThumbCarousel?.querySelector("[data-product-thumb-viewport]"); -const productThumbTrack = productThumbCarousel?.querySelector("[data-product-thumb-track]"); -const productThumbPrev = productThumbCarousel?.querySelector("[data-product-thumb-prev]"); -const productThumbNext = productThumbCarousel?.querySelector("[data-product-thumb-next]"); -const productThumbs = [...document.querySelectorAll("[data-product-thumb-index]")]; +const attachSwipeNavigation = (element, onPrev, onNext, options = {}) => { + if (!element) { + return; + } -if (productMainImage && productThumbCarousel && productThumbViewport && productThumbTrack && productThumbs.length > 0) { - let activeProductThumbIndex = 0; + const threshold = options.threshold ?? 48; + const getAxis = () => (typeof options.axis === "function" ? options.axis() : options.axis ?? "x"); + const allowMouse = options.allowMouse ?? true; + const suppressClickAfterSwipe = options.suppressClickAfterSwipe ?? false; + let pointerId = null; + let startX = 0; + let startY = 0; + let deltaX = 0; + let deltaY = 0; + let moved = false; + let swallowClick = false; - const updateProductThumbState = () => { - productThumbs.forEach((thumb, index) => { - if (index === activeProductThumbIndex) { - thumb.classList.remove("border-stone-800"); - thumb.classList.add("border-amber-400/60", "ring-1", "ring-amber-300/40"); - thumb.setAttribute("aria-current", "true"); - return; - } - thumb.classList.remove("border-amber-400/60", "ring-1", "ring-amber-300/40"); - thumb.classList.add("border-stone-800"); - thumb.removeAttribute("aria-current"); - }); + const reset = () => { + pointerId = null; + startX = 0; + startY = 0; + deltaX = 0; + deltaY = 0; + moved = false; }; - const scrollProductThumbIntoView = (index) => { - const thumb = productThumbs[index]; - thumb?.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" }); - }; - - const showProductThumb = (index) => { - const normalizedIndex = (index + productThumbs.length) % productThumbs.length; - const thumb = productThumbs[normalizedIndex]; - const nextSrc = thumb?.dataset.productThumbLarge || thumb?.dataset.productThumbLargeFallback || ""; - if (!thumb || !nextSrc) { + element.addEventListener("pointerdown", (event) => { + if (!allowMouse && event.pointerType === "mouse") { return; } - activeProductThumbIndex = normalizedIndex; - productMainImage.setAttribute("src", nextSrc); - if (thumb.dataset.productThumbAlt) { - productMainImage.setAttribute("alt", thumb.dataset.productThumbAlt); + if (event.pointerType === "mouse" && event.button !== 0) { + return; } - updateProductThumbState(); - scrollProductThumbIntoView(normalizedIndex); + pointerId = event.pointerId; + startX = event.clientX; + startY = event.clientY; + deltaX = 0; + deltaY = 0; + moved = false; + }); + + element.addEventListener("pointermove", (event) => { + if (event.pointerId !== pointerId) { + return; + } + deltaX = event.clientX - startX; + deltaY = event.clientY - startY; + if (Math.abs(deltaX) > 6 || Math.abs(deltaY) > 6) { + moved = true; + } + }); + + const finish = (event) => { + if (event.pointerId !== pointerId) { + return; + } + + const axis = getAxis(); + const primaryDelta = axis === "y" ? deltaY : deltaX; + const crossDelta = axis === "y" ? deltaX : deltaY; + + if (moved && Math.abs(primaryDelta) >= threshold && Math.abs(primaryDelta) > Math.abs(crossDelta)) { + swallowClick = suppressClickAfterSwipe; + if (primaryDelta > 0) { + onPrev(); + } else { + onNext(); + } + } + + reset(); }; - const stepProductThumbs = (direction) => { - showProductThumb(activeProductThumbIndex + direction); + element.addEventListener("pointerup", finish); + element.addEventListener("pointercancel", reset); + element.addEventListener("pointerleave", (event) => { + if (event.pointerId === pointerId && event.pointerType !== "touch") { + finish(event); + } + }); + + if (suppressClickAfterSwipe) { + element.addEventListener( + "click", + (event) => { + if (!swallowClick) { + return; + } + swallowClick = false; + event.preventDefault(); + event.stopPropagation(); + }, + true, + ); + } +}; + +const attachDragScroll = (element, options = {}) => { + if (!element) { + return; + } + + const getAxis = () => (typeof options.axis === "function" ? options.axis() : options.axis ?? "x"); + let pointerId = null; + let startPosition = 0; + let startScroll = 0; + let dragging = false; + + element.addEventListener("pointerdown", (event) => { + if (event.pointerType === "mouse" && event.button !== 0) { + return; + } + const axis = getAxis(); + pointerId = event.pointerId; + startPosition = axis === "y" ? event.clientY : event.clientX; + startScroll = axis === "y" ? element.scrollTop : element.scrollLeft; + dragging = true; + element.setPointerCapture?.(event.pointerId); + }); + + element.addEventListener("pointermove", (event) => { + if (!dragging || event.pointerId !== pointerId) { + return; + } + const axis = getAxis(); + const currentPosition = axis === "y" ? event.clientY : event.clientX; + const delta = currentPosition - startPosition; + if (axis === "y") { + element.scrollTop = startScroll - delta; + } else { + element.scrollLeft = startScroll - delta; + } + }); + + const stopDragging = (event) => { + if (event.pointerId !== pointerId) { + return; + } + dragging = false; + pointerId = null; }; + element.addEventListener("pointerup", stopDragging); + element.addEventListener("pointercancel", stopDragging); +}; + +const SplideCtor = window.Splide; +const productMainImage = document.querySelector("[data-product-main-image]"); +const productGalleryRoot = document.querySelector("[data-product-gallery-main]"); +const productGalleryThumbRoot = document.querySelector("[data-product-gallery-thumbs]"); +const productThumbPrev = document.querySelector("[data-product-thumb-prev]"); +const productThumbNext = document.querySelector("[data-product-thumb-next]"); +const productGalleryImages = [...document.querySelectorAll("[data-product-gallery-image]")]; +const defaultProductImage = productMainImage?.dataset.defaultImage + || productGalleryImages[0]?.dataset.imageUrl + || productMainImage?.getAttribute("src") + || ""; + +let productMainSplide = null; +let productThumbSplide = null; +let galleryMainSplide = null; +let galleryThumbSplide = null; + +const findImageIndex = (nodes, url) => nodes.findIndex((node) => (node.dataset.imageUrl || node.getAttribute("src") || "") === url); + +if (SplideCtor && productGalleryRoot && productGalleryThumbRoot && productGalleryImages.length > 1) { + productMainSplide = new SplideCtor(productGalleryRoot, { + type: "slide", + arrows: false, + pagination: false, + rewind: true, + drag: true, + speed: 520, + }); + + productThumbSplide = new SplideCtor(productGalleryThumbRoot, { + fixedWidth: 64, + fixedHeight: 64, + gap: 12, + rewind: true, + pagination: false, + arrows: false, + isNavigation: true, + focus: "center", + dragMinThreshold: { + mouse: 4, + touch: 8, + }, + breakpoints: { + 640: { + fixedWidth: 64, + fixedHeight: 64, + }, + 1024: { + fixedWidth: 80, + fixedHeight: 80, + }, + 1280: { + fixedWidth: 96, + fixedHeight: 96, + }, + }, + }); + + productMainSplide.sync(productThumbSplide); + productMainSplide.mount(); + productThumbSplide.mount(); + productThumbPrev?.addEventListener("click", () => { - stepProductThumbs(-1); + productMainSplide.go("<"); }); productThumbNext?.addEventListener("click", () => { - stepProductThumbs(1); + productMainSplide.go(">"); }); - - productThumbs.forEach((thumb, index) => { - thumb.addEventListener("click", () => { - showProductThumb(index); - }); - }); - - const initialIndex = productThumbs.findIndex((thumb) => thumb.dataset.productThumbLarge === productMainImage.getAttribute("src")); - showProductThumb(initialIndex >= 0 ? initialIndex : 0); - - productThumbViewport.addEventListener( - "wheel", - (event) => { - if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) { - return; - } - event.preventDefault(); - productThumbViewport.scrollBy({ left: event.deltaY, behavior: "smooth" }); - }, - { passive: false }, - ); } const variantPicker = document.querySelector("[data-variant-picker]"); @@ -390,25 +526,15 @@ if (variantPicker && variantCombinationInput) { const combinationID = String(matched[0]); variantCombinationInput.value = combinationID; const combinationData = combinationImageByID.get(combinationID); - if (productMainImage) { - const nextImage = combinationData?.imageLarge || defaultProductImage; - if (nextImage) { - productMainImage.setAttribute("src", nextImage); - const matchingThumbIndex = productThumbs.findIndex((thumb) => thumb.dataset.productThumbLarge === nextImage); - if (matchingThumbIndex >= 0) { - productThumbs.forEach((thumb, index) => { - if (index === matchingThumbIndex) { - thumb.classList.remove("border-stone-800"); - thumb.classList.add("border-amber-400/60", "ring-1", "ring-amber-300/40"); - thumb.setAttribute("aria-current", "true"); - } else { - thumb.classList.remove("border-amber-400/60", "ring-1", "ring-amber-300/40"); - thumb.classList.add("border-stone-800"); - thumb.removeAttribute("aria-current"); - } - }); - productThumbs[matchingThumbIndex]?.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" }); + const nextImage = combinationData?.imageLarge || defaultProductImage; + if (nextImage) { + if (productMainSplide && productGalleryImages.length > 0) { + const matchingIndex = findImageIndex(productGalleryImages, nextImage); + if (matchingIndex >= 0) { + productMainSplide.go(matchingIndex); } + } else if (productMainImage) { + productMainImage.setAttribute("src", nextImage); } } if (productPriceGross) { @@ -504,25 +630,99 @@ const galleryModal = document.querySelector("[data-gallery-modal]"); const galleryMain = galleryModal?.querySelector("[data-gallery-main]"); const galleryOpeners = [...document.querySelectorAll("[data-gallery-open]")]; const galleryClosers = [...document.querySelectorAll("[data-gallery-close]")]; -const galleryThumbs = [...document.querySelectorAll("[data-gallery-thumb]")]; +const galleryMainRoot = galleryModal?.querySelector("[data-gallery-main-splide]"); +const galleryThumbRoot = galleryModal?.querySelector("[data-gallery-thumb-splide]"); +const galleryImages = [...document.querySelectorAll("[data-gallery-image]")]; const galleryPrev = galleryModal?.querySelector("[data-gallery-prev]"); const galleryNext = galleryModal?.querySelector("[data-gallery-next]"); -const galleryThumbViewport = galleryModal?.querySelector("[data-gallery-thumb-viewport]"); const galleryThumbPrev = galleryModal?.querySelector("[data-gallery-thumb-prev]"); const galleryThumbNext = galleryModal?.querySelector("[data-gallery-thumb-next]"); -if (galleryModal && galleryMain && galleryOpeners.length > 0) { - let activeIndex = 0; +if (SplideCtor && galleryMainRoot && galleryThumbRoot && galleryImages.length > 1) { + galleryMainSplide = new SplideCtor(galleryMainRoot, { + type: "slide", + arrows: false, + pagination: false, + rewind: true, + drag: true, + speed: 520, + }); + + galleryThumbSplide = new SplideCtor(galleryThumbRoot, { + fixedWidth: 64, + fixedHeight: 64, + gap: 12, + rewind: true, + pagination: false, + arrows: false, + isNavigation: true, + focus: "center", + dragMinThreshold: { + mouse: 4, + touch: 8, + }, + breakpoints: { + 640: { + fixedWidth: 64, + fixedHeight: 64, + }, + 1024: { + fixedWidth: 80, + fixedHeight: 80, + }, + 1280: { + fixedWidth: 96, + fixedHeight: 96, + }, + }, + }); + + galleryMainSplide.sync(galleryThumbSplide); + galleryMainSplide.mount(); + galleryThumbSplide.mount(); +} + +if (galleryModal && (galleryMain || galleryMainSplide) && galleryOpeners.length > 0) { let wheelLocked = false; - const openGallery = () => { - const productMainImage = document.querySelector("[data-product-main-image]"); - const currentMainSrc = productMainImage?.getAttribute("src") || ""; - if (currentMainSrc) { - const matchingIndex = galleryThumbs.findIndex((thumb) => thumb.dataset.galleryThumb === currentMainSrc); - if (matchingIndex >= 0) { - showGalleryImage(matchingIndex); - } + const currentProductImageURL = () => { + if (productMainSplide && productGalleryImages.length > 0) { + return productGalleryImages[productMainSplide.index]?.dataset.imageUrl || defaultProductImage; + } + return productMainImage?.getAttribute("src") || defaultProductImage; + }; + + const showGalleryImage = (index) => { + if (galleryMainSplide && galleryImages.length > 0) { + const normalizedIndex = (index + galleryImages.length) % galleryImages.length; + galleryMainSplide.go(normalizedIndex); + return; + } + + if (!galleryMain) { + return; + } + + const nextImage = galleryImages[index]; + const nextSrc = nextImage?.dataset.imageUrl || ""; + if (!nextSrc) { + return; + } + galleryMain.setAttribute("src", nextSrc); + }; + + const stepGallery = (direction) => { + if (galleryMainSplide) { + galleryMainSplide.go(direction > 0 ? ">" : "<"); + return; + } + showGalleryImage(0); + }; + + const openGallery = (index) => { + const nextIndex = Number.isInteger(index) ? index : findImageIndex(galleryImages, currentProductImageURL()); + if (nextIndex >= 0) { + showGalleryImage(nextIndex); } galleryModal.classList.remove("hidden"); galleryModal.setAttribute("aria-hidden", "false"); @@ -535,61 +735,17 @@ if (galleryModal && galleryMain && galleryOpeners.length > 0) { document.body.style.overflow = ""; }; - const setActiveThumb = (activeThumb) => { - galleryThumbs.forEach((thumb) => { - thumb.classList.remove("border-amber-400/60"); - thumb.classList.add("border-stone-800"); - }); - if (activeThumb) { - activeThumb.classList.remove("border-stone-800"); - activeThumb.classList.add("border-amber-400/60"); - activeThumb.scrollIntoView({ block: "nearest", inline: "nearest" }); - } - }; - - const showGalleryImage = (index) => { - if (galleryThumbs.length === 0) return; - const normalizedIndex = (index + galleryThumbs.length) % galleryThumbs.length; - const thumb = galleryThumbs[normalizedIndex]; - const nextSrc = thumb.dataset.galleryThumb; - const nextAlt = thumb.dataset.galleryAlt || galleryMain.getAttribute("alt") || ""; - if (!nextSrc) return; - activeIndex = normalizedIndex; - galleryMain.setAttribute("src", nextSrc); - galleryMain.setAttribute("alt", nextAlt); - setActiveThumb(thumb); - }; - - const stepGallery = (direction) => { - if (galleryThumbs.length <= 1) return; - showGalleryImage(activeIndex + direction); - }; - - galleryThumbPrev?.addEventListener("click", () => { - stepGallery(-1); - }); - - galleryThumbNext?.addEventListener("click", () => { - stepGallery(1); - }); - galleryOpeners.forEach((trigger) => { - trigger.addEventListener("click", openGallery); + trigger.addEventListener("click", () => { + const index = Number.parseInt(trigger.dataset.galleryIndex || "", 10); + openGallery(Number.isInteger(index) ? index : undefined); + }); }); galleryClosers.forEach((trigger) => { trigger.addEventListener("click", closeGallery); }); - galleryThumbs.forEach((thumb, index) => { - if (index === 0) { - showGalleryImage(0); - } - thumb.addEventListener("click", () => { - showGalleryImage(index); - }); - }); - galleryPrev?.addEventListener("click", () => { stepGallery(-1); }); @@ -598,22 +754,13 @@ if (galleryModal && galleryMain && galleryOpeners.length > 0) { stepGallery(1); }); - galleryThumbViewport?.addEventListener( - "wheel", - (event) => { - if (window.innerWidth >= 1024) { - event.preventDefault(); - galleryThumbViewport.scrollBy({ top: event.deltaY, behavior: "smooth" }); - return; - } - if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) { - return; - } - event.preventDefault(); - galleryThumbViewport.scrollBy({ left: event.deltaY, behavior: "smooth" }); - }, - { passive: false }, - ); + galleryThumbPrev?.addEventListener("click", () => { + galleryMainSplide?.go("<"); + }); + + galleryThumbNext?.addEventListener("click", () => { + galleryMainSplide?.go(">"); + }); galleryModal.addEventListener("click", (event) => { if (event.target === galleryModal) { @@ -624,7 +771,7 @@ if (galleryModal && galleryMain && galleryOpeners.length > 0) { galleryModal.addEventListener( "wheel", (event) => { - if (galleryModal.getAttribute("aria-hidden") !== "false" || galleryThumbs.length <= 1) { + if (galleryModal.getAttribute("aria-hidden") !== "false" || !galleryMainSplide) { return; } if (Math.abs(event.deltaY) < 10) {