@cimplify/sdk 0.44.6 → 0.44.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mock/cli.mjs +6 -4
- package/dist/mock/library.js +6 -4
- package/dist/mock/library.mjs +6 -4
- package/dist/mock/msw.js +6 -4
- package/dist/mock/msw.mjs +6 -4
- package/dist/react.d.mts +26 -1
- package/dist/react.d.ts +26 -1
- package/dist/react.js +211 -24
- package/dist/react.mjs +209 -25
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/registry/cart-summary.json +1 -1
- package/templates/storefront-bakery/components/product-modal.tsx +0 -1
- package/templates/storefront-bakery/lib/cart.ts +6 -21
- package/templates/storefront-fashion/app/layout.tsx +2 -0
- package/templates/storefront-fashion/app/products/[slug]/product-detail.tsx +0 -3
- package/templates/storefront-fashion/components/cart-drawer.tsx +14 -0
- package/templates/storefront-fashion/components/cart-pill.tsx +11 -7
- package/templates/storefront-fashion/components/providers.tsx +6 -2
- package/templates/storefront-fashion/lib/cart.ts +6 -21
- package/templates/storefront-grocery/components/product-modal.tsx +0 -1
- package/templates/storefront-grocery/lib/cart.ts +6 -21
- package/templates/storefront-restaurant/components/product-modal.tsx +0 -1
- package/templates/storefront-restaurant/lib/cart.ts +6 -21
- package/templates/storefront-retail/app/products/[slug]/product-detail.tsx +0 -3
- package/templates/storefront-retail/lib/cart.ts +6 -21
- package/templates/storefront-services/components/product-modal.tsx +0 -1
- package/templates/storefront-services/lib/cart.ts +6 -21
package/dist/react.mjs
CHANGED
|
@@ -6448,12 +6448,22 @@ function CartLineItemRow({
|
|
|
6448
6448
|
{
|
|
6449
6449
|
"data-cimplify-cart-item": true,
|
|
6450
6450
|
"data-optimistic": isOptimistic ? "true" : void 0,
|
|
6451
|
-
className:
|
|
6451
|
+
className: cn(
|
|
6452
|
+
"flex items-start justify-between gap-4 py-4 border-b border-border last:border-b-0",
|
|
6453
|
+
classNames?.item
|
|
6454
|
+
),
|
|
6452
6455
|
children: [
|
|
6453
|
-
/* @__PURE__ */ jsxs("div", { "data-cimplify-cart-item-info": true, children: [
|
|
6454
|
-
/* @__PURE__ */ jsx(
|
|
6455
|
-
|
|
6456
|
-
|
|
6456
|
+
/* @__PURE__ */ jsxs("div", { "data-cimplify-cart-item-info": true, className: "flex-1 min-w-0 space-y-1", children: [
|
|
6457
|
+
/* @__PURE__ */ jsx(
|
|
6458
|
+
"span",
|
|
6459
|
+
{
|
|
6460
|
+
"data-cimplify-cart-item-name": true,
|
|
6461
|
+
className: cn("block font-medium", classNames?.itemName),
|
|
6462
|
+
children: item.product.name
|
|
6463
|
+
}
|
|
6464
|
+
),
|
|
6465
|
+
item.variant && /* @__PURE__ */ jsx("span", { "data-cimplify-cart-item-variant": true, className: "block text-xs text-muted-foreground", children: getVariantDisplayName(item.variant, item.product.name) }),
|
|
6466
|
+
item.addOnOptions && item.addOnOptions.length > 0 && /* @__PURE__ */ jsxs("span", { "data-cimplify-cart-item-addons": true, className: "block text-xs text-muted-foreground", children: [
|
|
6457
6467
|
"+ ",
|
|
6458
6468
|
item.addOnOptions.map((opt) => opt.name).join(", ")
|
|
6459
6469
|
] }),
|
|
@@ -6504,29 +6514,42 @@ function CartLineItemRow({
|
|
|
6504
6514
|
new Date(sel.scheduling.scheduled_start).toLocaleDateString()
|
|
6505
6515
|
] })
|
|
6506
6516
|
] }, sel.component_id)) }),
|
|
6507
|
-
/* @__PURE__ */ jsx(Price, { amount: unitPrice, className: classNames?.itemPrice })
|
|
6508
|
-
] }),
|
|
6509
|
-
/* @__PURE__ */ jsxs("div", { "data-cimplify-cart-item-controls": true, className: classNames?.quantity, children: [
|
|
6510
|
-
/* @__PURE__ */ jsx(
|
|
6511
|
-
QuantitySelector,
|
|
6512
|
-
{
|
|
6513
|
-
value: item.quantity,
|
|
6514
|
-
onChange: (qty) => onQuantityChange(item.id, qty),
|
|
6515
|
-
min: 0
|
|
6516
|
-
}
|
|
6517
|
-
),
|
|
6518
6517
|
/* @__PURE__ */ jsx(
|
|
6519
|
-
|
|
6518
|
+
Price,
|
|
6520
6519
|
{
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
"data-cimplify-cart-item-remove": true,
|
|
6524
|
-
className: classNames?.removeButton,
|
|
6525
|
-
"aria-label": `Remove ${item.product.name}`,
|
|
6526
|
-
children: "Remove"
|
|
6520
|
+
amount: unitPrice,
|
|
6521
|
+
className: cn("block pt-1 text-sm font-semibold", classNames?.itemPrice)
|
|
6527
6522
|
}
|
|
6528
6523
|
)
|
|
6529
|
-
] })
|
|
6524
|
+
] }),
|
|
6525
|
+
/* @__PURE__ */ jsxs(
|
|
6526
|
+
"div",
|
|
6527
|
+
{
|
|
6528
|
+
"data-cimplify-cart-item-controls": true,
|
|
6529
|
+
className: cn("flex flex-col items-end gap-2 shrink-0", classNames?.quantity),
|
|
6530
|
+
children: [
|
|
6531
|
+
/* @__PURE__ */ jsx(
|
|
6532
|
+
QuantitySelector,
|
|
6533
|
+
{
|
|
6534
|
+
value: item.quantity,
|
|
6535
|
+
onChange: (qty) => onQuantityChange(item.id, qty),
|
|
6536
|
+
min: 0
|
|
6537
|
+
}
|
|
6538
|
+
),
|
|
6539
|
+
/* @__PURE__ */ jsx(
|
|
6540
|
+
"button",
|
|
6541
|
+
{
|
|
6542
|
+
type: "button",
|
|
6543
|
+
onClick: () => onRemove(item.id),
|
|
6544
|
+
"data-cimplify-cart-item-remove": true,
|
|
6545
|
+
className: cn("text-xs text-muted-foreground hover:text-foreground hover:underline transition-colors", classNames?.removeButton),
|
|
6546
|
+
"aria-label": `Remove ${item.product.name}`,
|
|
6547
|
+
children: "Remove"
|
|
6548
|
+
}
|
|
6549
|
+
)
|
|
6550
|
+
]
|
|
6551
|
+
}
|
|
6552
|
+
)
|
|
6530
6553
|
]
|
|
6531
6554
|
}
|
|
6532
6555
|
);
|
|
@@ -10812,6 +10835,167 @@ function CartPage({
|
|
|
10812
10835
|
}
|
|
10813
10836
|
) });
|
|
10814
10837
|
}
|
|
10838
|
+
var CartDrawerContext = createContext(null);
|
|
10839
|
+
function useCartDrawer() {
|
|
10840
|
+
const ctx = useContext(CartDrawerContext);
|
|
10841
|
+
if (!ctx) {
|
|
10842
|
+
throw new Error("useCartDrawer must be used within <CartDrawerProvider>");
|
|
10843
|
+
}
|
|
10844
|
+
return ctx;
|
|
10845
|
+
}
|
|
10846
|
+
function CartDrawerProvider({ children, openOnAdd = true }) {
|
|
10847
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
10848
|
+
const cart = useCart();
|
|
10849
|
+
const [lastPending, setLastPending] = useState(0);
|
|
10850
|
+
const open = useCallback(() => setIsOpen(true), []);
|
|
10851
|
+
const close = useCallback(() => setIsOpen(false), []);
|
|
10852
|
+
const toggle = useCallback(() => setIsOpen((v) => !v), []);
|
|
10853
|
+
useEffect(() => {
|
|
10854
|
+
if (!openOnAdd) return;
|
|
10855
|
+
if (cart.pendingOpCount > lastPending && cart.pendingOpCount > 0) {
|
|
10856
|
+
setIsOpen(true);
|
|
10857
|
+
}
|
|
10858
|
+
setLastPending(cart.pendingOpCount);
|
|
10859
|
+
}, [cart.pendingOpCount, lastPending, openOnAdd]);
|
|
10860
|
+
const value = useMemo(() => ({ isOpen, open, close, toggle }), [isOpen, open, close, toggle]);
|
|
10861
|
+
return /* @__PURE__ */ jsx(CartDrawerContext.Provider, { value, children });
|
|
10862
|
+
}
|
|
10863
|
+
function CartDrawer({
|
|
10864
|
+
onCheckout,
|
|
10865
|
+
onContinueShopping,
|
|
10866
|
+
title = "Your cart",
|
|
10867
|
+
className
|
|
10868
|
+
}) {
|
|
10869
|
+
const { isOpen, close } = useCartDrawer();
|
|
10870
|
+
const cart = useCart();
|
|
10871
|
+
useEffect(() => {
|
|
10872
|
+
if (!isOpen) return;
|
|
10873
|
+
const original = document.body.style.overflow;
|
|
10874
|
+
document.body.style.overflow = "hidden";
|
|
10875
|
+
const onKey = (e) => {
|
|
10876
|
+
if (e.key === "Escape") close();
|
|
10877
|
+
};
|
|
10878
|
+
window.addEventListener("keydown", onKey);
|
|
10879
|
+
return () => {
|
|
10880
|
+
document.body.style.overflow = original;
|
|
10881
|
+
window.removeEventListener("keydown", onKey);
|
|
10882
|
+
};
|
|
10883
|
+
}, [isOpen, close]);
|
|
10884
|
+
const handleCheckout = () => {
|
|
10885
|
+
close();
|
|
10886
|
+
onCheckout?.();
|
|
10887
|
+
};
|
|
10888
|
+
const handleContinue = () => {
|
|
10889
|
+
if (onContinueShopping) {
|
|
10890
|
+
onContinueShopping();
|
|
10891
|
+
}
|
|
10892
|
+
close();
|
|
10893
|
+
};
|
|
10894
|
+
return /* @__PURE__ */ jsxs(
|
|
10895
|
+
"div",
|
|
10896
|
+
{
|
|
10897
|
+
"data-cimplify-cart-drawer": true,
|
|
10898
|
+
"data-open": isOpen ? "true" : "false",
|
|
10899
|
+
"aria-hidden": !isOpen,
|
|
10900
|
+
className: cn(
|
|
10901
|
+
"fixed inset-0 z-[200]",
|
|
10902
|
+
isOpen ? "pointer-events-auto" : "pointer-events-none"
|
|
10903
|
+
),
|
|
10904
|
+
children: [
|
|
10905
|
+
/* @__PURE__ */ jsx(
|
|
10906
|
+
"div",
|
|
10907
|
+
{
|
|
10908
|
+
onClick: close,
|
|
10909
|
+
className: cn(
|
|
10910
|
+
"absolute inset-0 bg-foreground/40 backdrop-blur-sm transition-opacity duration-200",
|
|
10911
|
+
isOpen ? "opacity-100" : "opacity-0"
|
|
10912
|
+
)
|
|
10913
|
+
}
|
|
10914
|
+
),
|
|
10915
|
+
/* @__PURE__ */ jsxs(
|
|
10916
|
+
"aside",
|
|
10917
|
+
{
|
|
10918
|
+
role: "dialog",
|
|
10919
|
+
"aria-modal": "true",
|
|
10920
|
+
"aria-label": title,
|
|
10921
|
+
className: cn(
|
|
10922
|
+
"absolute top-0 right-0 h-full w-full sm:max-w-md bg-background shadow-2xl flex flex-col transition-transform duration-300 ease-out",
|
|
10923
|
+
isOpen ? "translate-x-0" : "translate-x-full",
|
|
10924
|
+
className
|
|
10925
|
+
),
|
|
10926
|
+
children: [
|
|
10927
|
+
/* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-4 px-6 py-4 border-b border-border shrink-0", children: [
|
|
10928
|
+
/* @__PURE__ */ jsxs("h2", { className: "text-base font-semibold tracking-tight m-0", children: [
|
|
10929
|
+
title,
|
|
10930
|
+
cart.itemCount > 0 && /* @__PURE__ */ jsxs("span", { className: "ml-2 text-muted-foreground font-normal", children: [
|
|
10931
|
+
"(",
|
|
10932
|
+
cart.itemCount,
|
|
10933
|
+
" ",
|
|
10934
|
+
cart.itemCount === 1 ? "item" : "items",
|
|
10935
|
+
")"
|
|
10936
|
+
] })
|
|
10937
|
+
] }),
|
|
10938
|
+
/* @__PURE__ */ jsx(
|
|
10939
|
+
"button",
|
|
10940
|
+
{
|
|
10941
|
+
type: "button",
|
|
10942
|
+
onClick: close,
|
|
10943
|
+
"aria-label": "Close cart",
|
|
10944
|
+
className: "grid place-items-center w-8 h-8 rounded-full hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",
|
|
10945
|
+
children: "\u2715"
|
|
10946
|
+
}
|
|
10947
|
+
)
|
|
10948
|
+
] }),
|
|
10949
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-6 py-2", children: cart.isEmpty ? /* @__PURE__ */ jsx("div", { className: "h-full grid place-items-center text-center py-20", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
10950
|
+
/* @__PURE__ */ jsx(
|
|
10951
|
+
"svg",
|
|
10952
|
+
{
|
|
10953
|
+
className: "w-12 h-12 mx-auto text-muted-foreground/30",
|
|
10954
|
+
fill: "none",
|
|
10955
|
+
stroke: "currentColor",
|
|
10956
|
+
strokeWidth: "1",
|
|
10957
|
+
viewBox: "0 0 24 24",
|
|
10958
|
+
"aria-hidden": true,
|
|
10959
|
+
children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" })
|
|
10960
|
+
}
|
|
10961
|
+
),
|
|
10962
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium mt-3 mb-1", children: "Your cart is empty" }),
|
|
10963
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Add some items to get started" })
|
|
10964
|
+
] }) }) : /* @__PURE__ */ jsx(CartSummary, {}) }),
|
|
10965
|
+
!cart.isEmpty && /* @__PURE__ */ jsxs("footer", { className: "border-t border-border px-6 py-4 space-y-3 shrink-0", children: [
|
|
10966
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between text-sm", children: [
|
|
10967
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Subtotal" }),
|
|
10968
|
+
/* @__PURE__ */ jsx(Price, { amount: cart.subtotal, className: "font-semibold text-base" })
|
|
10969
|
+
] }),
|
|
10970
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Tax and delivery calculated at checkout." }),
|
|
10971
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 pt-1", children: [
|
|
10972
|
+
/* @__PURE__ */ jsx(
|
|
10973
|
+
"button",
|
|
10974
|
+
{
|
|
10975
|
+
type: "button",
|
|
10976
|
+
onClick: handleCheckout,
|
|
10977
|
+
className: "w-full h-11 rounded-md bg-foreground text-background font-medium text-sm hover:bg-foreground/90 transition-colors",
|
|
10978
|
+
children: "Checkout"
|
|
10979
|
+
}
|
|
10980
|
+
),
|
|
10981
|
+
/* @__PURE__ */ jsx(
|
|
10982
|
+
"button",
|
|
10983
|
+
{
|
|
10984
|
+
type: "button",
|
|
10985
|
+
onClick: handleContinue,
|
|
10986
|
+
className: "w-full h-10 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors",
|
|
10987
|
+
children: "Continue shopping"
|
|
10988
|
+
}
|
|
10989
|
+
)
|
|
10990
|
+
] })
|
|
10991
|
+
] })
|
|
10992
|
+
]
|
|
10993
|
+
}
|
|
10994
|
+
)
|
|
10995
|
+
]
|
|
10996
|
+
}
|
|
10997
|
+
);
|
|
10998
|
+
}
|
|
10815
10999
|
function CheckoutPage({
|
|
10816
11000
|
title = "Checkout",
|
|
10817
11001
|
onComplete,
|
|
@@ -12640,4 +12824,4 @@ function SparkleIcon({ className }) {
|
|
|
12640
12824
|
);
|
|
12641
12825
|
}
|
|
12642
12826
|
|
|
12643
|
-
export { AccommodationCard, Ad, AdProvider, AddOnSelector, AddressElement, AuthElement, AvailabilityBadge, BillingPlanSelector, BookingCard, BookingList, BundleProductCard, BundleProductLayout, BundleSelector, CardImage, CardShell, CardVariant, CartPage, CartSummary, CartTemplate, CatalogueCollectionLayout, CataloguePage, CatalogueTemplate, CategoryFilter, CategoryGrid, ChatWidget, CheckoutPage, CimplifyAccount, CimplifyCheckout, CimplifyProvider, CollectionPage, CollectionTemplate, CompactCartLayout, CompactCatalogueLayout, CompactSearchLayout, CompactServiceCard, CompositeProductCard, CompositeProductLayout, CompositeSelector, CurrencySelector, CustomAttributesTable, CustomerInputFields, DateSlotPicker, DealBanner, DealsPage, DefaultCartLayout, DefaultCatalogueLayout, DefaultCollectionLayout, DefaultProductLayout, DefaultSearchLayout, DeliveryEstimate, DigitalProductCard, DigitalProductLayout, DiscountInput, ElementsProvider, FeaturedCollectionLayout, FoodProductCard, FoodProductLayout, InventoryBadge, LeaseServiceCard, LocationPicker, MetadataStringList, OrderDetailPage, OrderHistory, OrderHistoryPage, OrderSummary, PaymentElement, Price, PriceRange, ProductCard, ProductCustomizer, ProductGrid, ProductImageGallery, ProductPage, ProductSheet, ProductTemplate, PropertiesTable, QuantitySelector, QuickAddButton, RecentlyViewed, RecommendationCarousel, RelatedProductsSection, RentalServiceCard, ResourcePicker, RetailProductCard, SaleBadge, ScheduleServiceCard, SearchInput, SearchPage, SearchTemplate, ServiceProductLayout, SessionMessageBanner, SlotPicker, SoldOutOverlay, StaffPicker, StandardServiceCard, StoreNav, SubscriptionCard, TagPills, TwoColumnGrid, VariantSelector, VolumePricing, WholesaleProductCard, WholesaleProductLayout, WishlistButton, cn, roomToResource, useActivityState, useAds, useAttributeDefinitions, useAvailableSlots, useBillingPlans, useBookings, useBootstrap, useBundles, useCart, useCategories, useChat, useCheckout, useCimplify, useCimplifyClient, useCollection, useCollections, useDeals, useDeliveryFee, useElements, useElementsReady, useFxRate, useLocations, useOptionalCimplify, useOrder, useOrders, useProduct, useProductAvailability, useProductDeals, useProductPrice, useProductSchedules, useProducts, useProductsOnSale, usePropertyFacets, useQuote, useRecommendations, useSearch, useServiceAvailability, useServices, useSubscription, useSubscriptions, useTaxonomies, useTaxonomy, useTaxonomyPath, useValidateDiscount, useVariantSelector };
|
|
12827
|
+
export { AccommodationCard, Ad, AdProvider, AddOnSelector, AddressElement, AuthElement, AvailabilityBadge, BillingPlanSelector, BookingCard, BookingList, BundleProductCard, BundleProductLayout, BundleSelector, CardImage, CardShell, CardVariant, CartDrawer, CartDrawerProvider, CartPage, CartSummary, CartTemplate, CatalogueCollectionLayout, CataloguePage, CatalogueTemplate, CategoryFilter, CategoryGrid, ChatWidget, CheckoutPage, CimplifyAccount, CimplifyCheckout, CimplifyProvider, CollectionPage, CollectionTemplate, CompactCartLayout, CompactCatalogueLayout, CompactSearchLayout, CompactServiceCard, CompositeProductCard, CompositeProductLayout, CompositeSelector, CurrencySelector, CustomAttributesTable, CustomerInputFields, DateSlotPicker, DealBanner, DealsPage, DefaultCartLayout, DefaultCatalogueLayout, DefaultCollectionLayout, DefaultProductLayout, DefaultSearchLayout, DeliveryEstimate, DigitalProductCard, DigitalProductLayout, DiscountInput, ElementsProvider, FeaturedCollectionLayout, FoodProductCard, FoodProductLayout, InventoryBadge, LeaseServiceCard, LocationPicker, MetadataStringList, OrderDetailPage, OrderHistory, OrderHistoryPage, OrderSummary, PaymentElement, Price, PriceRange, ProductCard, ProductCustomizer, ProductGrid, ProductImageGallery, ProductPage, ProductSheet, ProductTemplate, PropertiesTable, QuantitySelector, QuickAddButton, RecentlyViewed, RecommendationCarousel, RelatedProductsSection, RentalServiceCard, ResourcePicker, RetailProductCard, SaleBadge, ScheduleServiceCard, SearchInput, SearchPage, SearchTemplate, ServiceProductLayout, SessionMessageBanner, SlotPicker, SoldOutOverlay, StaffPicker, StandardServiceCard, StoreNav, SubscriptionCard, TagPills, TwoColumnGrid, VariantSelector, VolumePricing, WholesaleProductCard, WholesaleProductLayout, WishlistButton, cn, roomToResource, useActivityState, useAds, useAttributeDefinitions, useAvailableSlots, useBillingPlans, useBookings, useBootstrap, useBundles, useCart, useCartDrawer, useCategories, useChat, useCheckout, useCimplify, useCimplifyClient, useCollection, useCollections, useDeals, useDeliveryFee, useElements, useElementsReady, useFxRate, useLocations, useOptionalCimplify, useOrder, useOrders, useProduct, useProductAvailability, useProductDeals, useProductPrice, useProductSchedules, useProducts, useProductsOnSale, usePropertyFacets, useQuote, useRecommendations, useSearch, useServiceAvailability, useServices, useSubscription, useSubscriptions, useTaxonomies, useTaxonomy, useTaxonomyPath, useValidateDiscount, useVariantSelector };
|
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-1\/2{top:50%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[9999\]{z-index:9999}.col-span-full{grid-column:1/-1}.container{width:100%}.mx-auto{margin-inline:auto}.-mt-px{margin-top:-1px}.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-\[3\/4\]{aspect-ratio:3/4}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[5\/2\]{aspect-ratio:5/2}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-square{aspect-ratio:1}.h-\[6px\]{height:6px}.h-\[7px\]{height:7px}.h-\[11px\]{height:11px}.h-\[18px\]{height:18px}.h-\[72px\]{height:72px}.h-\[clamp\(560px\,80vh\,820px\)\]{height:clamp(560px,80vh,820px)}.h-\[min\(600px\,calc\(100vh-6rem\)\)\]{height:min(600px,100vh - 6rem)}.h-fit{height:fit-content}.h-full{height:100%}.max-h-\[85vh\]{max-height:85vh}.max-h-\[92vh\]{max-height:92vh}.max-h-\[100px\]{max-height:100px}.min-h-\[20px\]{min-height:20px}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-2\/5{width:40%}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-\[6px\]{width:6px}.w-\[7px\]{width:7px}.w-\[11px\]{width:11px}.w-\[18px\]{width:18px}.w-\[72px\]{width:72px}.w-\[400px\]{width:400px}.w-full{width:100%}.max-w-\[85\%\]{max-width:85%}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[calc\(100vw-3rem\)\]{max-width:calc(100vw - 3rem)}.max-w-none{max-width:none}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-bottom-left{transform-origin:0 100%}.origin-bottom-right{transform-origin:100% 100%}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-start{scroll-snap-align:start}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.\[appearance\:textfield\]{appearance:textfield}.auto-cols-\[minmax\(220px\,1fr\)\]{grid-auto-columns:minmax(220px,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border,oklch(90% 0 0))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:var(--radius,.5rem)}.rounded-\[10px\]{border-radius:10px}.rounded-\[14px\]{border-radius:14px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-tl{border-top-left-radius:var(--radius,.5rem)}.rounded-tr{border-top-right-radius:var(--radius,.5rem)}.rounded-br{border-bottom-right-radius:var(--radius,.5rem)}.rounded-bl{border-bottom-left-radius:var(--radius,.5rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-background\/10{border-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.border-background\/10{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.border-background\/15{border-color:#fcfcfc26}@supports (color:color-mix(in lab, red, red)){.border-background\/15{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 15%, transparent)}}.border-background\/20{border-color:#fcfcfc33}@supports (color:color-mix(in lab, red, red)){.border-background\/20{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 20%, transparent)}}.border-background\/25{border-color:#fcfcfc40}@supports (color:color-mix(in lab, red, red)){.border-background\/25{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 25%, transparent)}}.border-background\/30{border-color:#fcfcfc4d}@supports (color:color-mix(in lab, red, red)){.border-background\/30{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 30%, transparent)}}.border-background\/40{border-color:#fcfcfc66}@supports (color:color-mix(in lab, red, red)){.border-background\/40{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 40%, transparent)}}.border-border{border-color:var(--color-border,oklch(90% 0 0))}.border-input{border-color:var(--color-input,oklch(90% 0 0))}.border-muted-foreground\/30{border-color:#6363634d}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\/30{border-color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 30%, transparent)}}.border-primary{border-color:var(--color-primary,oklch(50% .1 35))}.border-primary\/30{border-color:#934c3a4d}@supports (color:color-mix(in lab, red, red)){.border-primary\/30{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 30%, transparent)}}.border-primary\/40{border-color:#934c3a66}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 40%, transparent)}}.border-transparent{border-color:#0000}.border-t-foreground{border-top-color:var(--color-foreground,oklch(15% 0 0))}.bg-background{background-color:var(--color-background,oklch(99% 0 0))}.bg-background\/5{background-color:#fcfcfc0d}@supports (color:color-mix(in lab, red, red)){.bg-background\/5{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 5%, transparent)}}.bg-background\/10{background-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.bg-background\/10{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.bg-background\/15{background-color:#fcfcfc26}@supports (color:color-mix(in lab, red, red)){.bg-background\/15{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 15%, transparent)}}.bg-background\/20{background-color:#fcfcfc33}@supports (color:color-mix(in lab, red, red)){.bg-background\/20{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 20%, transparent)}}.bg-background\/50{background-color:#fcfcfc80}@supports (color:color-mix(in lab, red, red)){.bg-background\/50{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 50%, transparent)}}.bg-background\/90{background-color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 90%, transparent)}}.bg-background\/92{background-color:#fcfcfceb}@supports (color:color-mix(in lab, red, red)){.bg-background\/92{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 92%, transparent)}}.bg-background\/95{background-color:#fcfcfcf2}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 95%, transparent)}}.bg-border{background-color:var(--color-border,oklch(90% 0 0))}.bg-destructive{background-color:var(--color-destructive,oklch(50% .2 25))}.bg-destructive\/10{background-color:#bb061e1a}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--color-destructive,oklch(50% .2 25)) 10%, transparent)}}.bg-foreground{background-color:var(--color-foreground,oklch(15% 0 0))}.bg-foreground\/30{background-color:#0b0b0b4d}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/30{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 30%, transparent)}}.bg-foreground\/50{background-color:#0b0b0b80}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/50{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 50%, transparent)}}.bg-foreground\/80{background-color:#0b0b0bcc}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/80{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 80%, transparent)}}.bg-muted{background-color:var(--color-muted,oklch(95% 0 0))}.bg-muted-foreground\/40{background-color:#63636366}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 40%, transparent)}}.bg-muted\/30{background-color:#eeeeee4d}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 30%, transparent)}}.bg-muted\/50{background-color:#eeeeee80}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 50%, transparent)}}.bg-primary{background-color:var(--color-primary,oklch(50% .1 35))}.bg-primary\/5{background-color:#934c3a0d}@supports (color:color-mix(in lab, red, red)){.bg-primary\/5{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 5%, transparent)}}.bg-primary\/10{background-color:#934c3a1a}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 10%, transparent)}}.bg-primary\/15{background-color:#934c3a26}@supports (color:color-mix(in lab, red, red)){.bg-primary\/15{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 15%, transparent)}}.bg-transparent{background-color:#0000}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tr{--tw-gradient-position:to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\[background-image\:linear-gradient\(135deg\,white_1px\,transparent_1px\)\]{background-image:linear-gradient(135deg,#fff 1px,#0000 1px)}.\[background-image\:radial-gradient\(circle_at_2px_2px\,white_1px\,transparent_0\)\]{background-image:radial-gradient(circle at 2px 2px,#fff 1px,#0000 0)}.from-foreground{--tw-gradient-from:var(--color-foreground,oklch(15% 0 0));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-foreground\/40{--tw-gradient-from:#0b0b0b66}@supports (color:color-mix(in lab, red, red)){.from-foreground\/40{--tw-gradient-from:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 40%, transparent)}}.from-foreground\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-primary{--tw-gradient-from:var(--color-primary,oklch(50% .1 35));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-foreground{--tw-gradient-via:var(--color-foreground,oklch(15% 0 0));--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-foreground\/40{--tw-gradient-via:#0b0b0b66}@supports (color:color-mix(in lab, red, red)){.via-foreground\/40{--tw-gradient-via:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 40%, transparent)}}.via-foreground\/40{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-primary{--tw-gradient-via:var(--color-primary,oklch(50% .1 35));--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-background{--tw-gradient-to:var(--color-background,oklch(99% 0 0));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-foreground{--tw-gradient-to:var(--color-foreground,oklch(15% 0 0));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-foreground\/0{--tw-gradient-to:#0000}@supports (color:color-mix(in lab, red, red)){.to-foreground\/0{--tw-gradient-to:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 0%, transparent)}}.to-foreground\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-primary{--tw-gradient-to:var(--color-primary,oklch(50% .1 35));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.\[background-size\:24px_24px\]{background-size:24px 24px}.\[background-size\:32px_32px\]{background-size:32px 32px}.\[background-size\:40px_40px\]{background-size:40px 40px}.object-cover{object-fit:cover}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-\[inherit\]{font-family:inherit}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14\.5px\]{font-size:14.5px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[18px\]{font-size:18px}.text-\[22px\]{font-size:22px}.text-\[26px\]{font-size:26px}.text-\[28px\]{font-size:28px}.text-\[clamp\(1\.5rem\,2\.5vw\,2rem\)\]{font-size:clamp(1.5rem,2.5vw,2rem)}.text-\[clamp\(1\.5rem\,3vw\,2rem\)\]{font-size:clamp(1.5rem,3vw,2rem)}.text-\[clamp\(1\.25rem\,2vw\,1\.75rem\)\]{font-size:clamp(1.25rem,2vw,1.75rem)}.text-\[clamp\(1\.75rem\,3\.5vw\,2\.5rem\)\]{font-size:clamp(1.75rem,3.5vw,2.5rem)}.text-\[clamp\(1\.75rem\,3\.5vw\,2\.75rem\)\]{font-size:clamp(1.75rem,3.5vw,2.75rem)}.text-\[clamp\(1\.75rem\,3vw\,2\.25rem\)\]{font-size:clamp(1.75rem,3vw,2.25rem)}.text-\[clamp\(2\.5rem\,5vw\,3\.5rem\)\]{font-size:clamp(2.5rem,5vw,3.5rem)}.text-\[clamp\(2\.5rem\,5vw\,4rem\)\]{font-size:clamp(2.5rem,5vw,4rem)}.text-\[clamp\(2\.5rem\,6vw\,4\.75rem\)\]{font-size:clamp(2.5rem,6vw,4.75rem)}.text-\[clamp\(2\.5rem\,6vw\,4rem\)\]{font-size:clamp(2.5rem,6vw,4rem)}.text-\[clamp\(2\.5rem\,7vw\,5rem\)\]{font-size:clamp(2.5rem,7vw,5rem)}.text-\[clamp\(2\.25rem\,5vw\,3\.5rem\)\]{font-size:clamp(2.25rem,5vw,3.5rem)}.text-\[clamp\(2rem\,4vw\,2\.75rem\)\]{font-size:clamp(2rem,4vw,2.75rem)}.text-\[clamp\(2rem\,4vw\,3rem\)\]{font-size:clamp(2rem,4vw,3rem)}.text-\[clamp\(2rem\,5vw\,3\.5rem\)\]{font-size:clamp(2rem,5vw,3.5rem)}.text-\[clamp\(2rem\,5vw\,3rem\)\]{font-size:clamp(2rem,5vw,3rem)}.text-\[clamp\(3\.5rem\,11vw\,9rem\)\]{font-size:clamp(3.5rem,11vw,9rem)}.text-\[clamp\(3rem\,9vw\,7rem\)\]{font-size:clamp(3rem,9vw,7rem)}.leading-\[0\.92\]{--tw-leading:.92;line-height:.92}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-none{--tw-leading:1;line-height:1}.-tracking-\[0\.02em\]{--tw-tracking:calc(.02em * -1);letter-spacing:-.02em}.-tracking-\[0\.03em\]{--tw-tracking:calc(.03em * -1);letter-spacing:-.03em}.-tracking-\[0\.04em\]{--tw-tracking:calc(.04em * -1);letter-spacing:-.04em}.-tracking-\[0\.015em\]{--tw-tracking:calc(.015em * -1);letter-spacing:-.015em}.-tracking-\[0\.025em\]{--tw-tracking:calc(.025em * -1);letter-spacing:-.025em}.-tracking-\[0\.035em\]{--tw-tracking:calc(.035em * -1);letter-spacing:-.035em}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[inherit\]{color:inherit}.text-background{color:var(--color-background,oklch(99% 0 0))}.text-background\/60{color:#fcfcfc99}@supports (color:color-mix(in lab, red, red)){.text-background\/60{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 60%, transparent)}}.text-background\/65{color:#fcfcfca6}@supports (color:color-mix(in lab, red, red)){.text-background\/65{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 65%, transparent)}}.text-background\/70{color:#fcfcfcb3}@supports (color:color-mix(in lab, red, red)){.text-background\/70{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 70%, transparent)}}.text-background\/75{color:#fcfcfcbf}@supports (color:color-mix(in lab, red, red)){.text-background\/75{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 75%, transparent)}}.text-background\/80{color:#fcfcfccc}@supports (color:color-mix(in lab, red, red)){.text-background\/80{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 80%, transparent)}}.text-background\/85{color:#fcfcfcd9}@supports (color:color-mix(in lab, red, red)){.text-background\/85{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 85%, transparent)}}.text-background\/90{color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.text-background\/90{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 90%, transparent)}}.text-border{color:var(--color-border,oklch(90% 0 0))}.text-destructive{color:var(--color-destructive,oklch(50% .2 25))}.text-destructive-foreground{color:var(--color-destructive-foreground,oklch(99% 0 0))}.text-foreground{color:var(--color-foreground,oklch(15% 0 0))}.text-foreground\/80{color:#0b0b0bcc}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 80%, transparent)}}.text-foreground\/90{color:#0b0b0be6}@supports (color:color-mix(in lab, red, red)){.text-foreground\/90{color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 90%, transparent)}}.text-muted-foreground{color:var(--color-muted-foreground,oklch(50% 0 0))}.text-muted-foreground\/30{color:#6363634d}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/30{color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 30%, transparent)}}.text-muted-foreground\/60{color:#63636399}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/60{color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 60%, transparent)}}.text-muted-foreground\/80{color:#636363cc}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 80%, transparent)}}.text-primary{color:var(--color-primary,oklch(50% .1 35))}.text-primary-foreground{color:var(--color-primary-foreground,oklch(99% 0 0))}.text-primary-foreground\/70{color:#fcfcfcb3}@supports (color:color-mix(in lab, red, red)){.text-primary-foreground\/70{color:color-mix(in oklab, var(--color-primary-foreground,oklch(99% 0 0)) 70%, transparent)}}.text-primary-foreground\/90{color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.text-primary-foreground\/90{color:color-mix(in oklab, var(--color-primary-foreground,oklch(99% 0 0)) 90%, transparent)}}.text-primary-foreground\/95{color:#fcfcfcf2}@supports (color:color-mix(in lab, red, red)){.text-primary-foreground\/95{color:color-mix(in oklab, var(--color-primary-foreground,oklch(99% 0 0)) 95%, transparent)}}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.accent-foreground{accent-color:var(--color-foreground,oklch(15% 0 0))}.accent-primary{accent-color:var(--color-primary,oklch(50% .1 35))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-\[0\.04\]{opacity:.04}.opacity-\[0\.06\]{opacity:.06}.shadow-\[0_1px_3px_rgba\(0\,0\,0\,0\.04\)\,0_6px_24px_rgba\(0\,0\,0\,0\.06\)\]{--tw-shadow:0 1px 3px var(--tw-shadow-color,#0000000a), 0 6px 24px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_4px_rgba\(0\,0\,0\,0\.10\)\,0_4px_12px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0 1px 4px var(--tw-shadow-color,#0000001a), 0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-background{--tw-ring-color:var(--color-background,oklch(99% 0 0))}.ring-background\/10{--tw-ring-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.ring-background\/10{--tw-ring-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.ease-\[cubic-bezier\(0\.19\,1\,0\.22\,1\)\]{--tw-ease:cubic-bezier(.19,1,.22,1);transition-timing-function:cubic-bezier(.19,1,.22,1)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[cimplify\:checkout\]{cimplify:checkout}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-\[1\.04\]:is(:where(.group):hover *){scale:1.04}.group-hover\:bg-primary:is(:where(.group):hover *){background-color:var(--color-primary,oklch(50% .1 35))}.group-hover\:text-foreground:is(:where(.group):hover *){color:var(--color-foreground,oklch(15% 0 0))}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--color-primary,oklch(50% .1 35))}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground,oklch(50% 0 0))}.focus-within\:border-foreground:focus-within{border-color:var(--color-foreground,oklch(15% 0 0))}.focus-within\:bg-background:focus-within{background-color:var(--color-background,oklch(99% 0 0))}@media (hover:hover){.hover\:-translate-y-\[1px\]:hover{--tw-translate-y:calc(1px * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:\!scale-110:hover{--tw-scale-x:110%!important;--tw-scale-y:110%!important;--tw-scale-z:110%!important;scale:var(--tw-scale-x) var(--tw-scale-y)!important}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-\[1\.04\]:hover{scale:1.04}.hover\:scale-\[1\.08\]:hover{scale:1.08}.hover\:border-foreground:hover{border-color:var(--color-foreground,oklch(15% 0 0))}.hover\:border-foreground\/30:hover{border-color:#0b0b0b4d}@supports (color:color-mix(in lab, red, red)){.hover\:border-foreground\/30:hover{border-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 30%, transparent)}}.hover\:border-primary:hover{border-color:var(--color-primary,oklch(50% .1 35))}.hover\:border-primary\/20:hover{border-color:#934c3a33}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/20:hover{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 20%, transparent)}}.hover\:border-primary\/40:hover{border-color:#934c3a66}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 40%, transparent)}}.hover\:border-primary\/50:hover{border-color:#934c3a80}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 50%, transparent)}}.hover\:\!bg-foreground:hover{background-color:var(--color-foreground,oklch(15% 0 0))!important}.hover\:bg-background:hover{background-color:var(--color-background,oklch(99% 0 0))}.hover\:bg-background\/10:hover{background-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-background\/10:hover{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.hover\:bg-background\/90:hover{background-color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-background\/90:hover{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 90%, transparent)}}.hover\:bg-destructive\/10:hover{background-color:#bb061e1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab, var(--color-destructive,oklch(50% .2 25)) 10%, transparent)}}.hover\:bg-foreground\/90:hover{background-color:#0b0b0be6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-foreground\/90:hover{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 90%, transparent)}}.hover\:bg-muted:hover{background-color:var(--color-muted,oklch(95% 0 0))}.hover\:bg-muted\/70:hover{background-color:#eeeeeeb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/70:hover{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 70%, transparent)}}.hover\:bg-muted\/80:hover{background-color:#eeec}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/80:hover{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 80%, transparent)}}.hover\:bg-primary:hover{background-color:var(--color-primary,oklch(50% .1 35))}.hover\:bg-primary\/90:hover{background-color:#934c3ae6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 90%, transparent)}}.hover\:\!text-background:hover{color:var(--color-background,oklch(99% 0 0))!important}.hover\:text-background:hover{color:var(--color-background,oklch(99% 0 0))}.hover\:text-destructive:hover{color:var(--color-destructive,oklch(50% .2 25))}.hover\:text-foreground:hover{color:var(--color-foreground,oklch(15% 0 0))}.hover\:text-primary:hover{color:var(--color-primary,oklch(50% .1 35))}.hover\:text-primary-foreground:hover{color:var(--color-primary-foreground,oklch(99% 0 0))}.hover\:text-primary\/80:hover{color:#934c3acc}@supports (color:color-mix(in lab, red, red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 80%, transparent)}}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_2px_6px_rgba\(0\,0\,0\,0\.04\)\,0_12px_40px_rgba\(0\,0\,0\,0\.10\)\]:hover{--tw-shadow:0 2px 6px var(--tw-shadow-color,#0000000a), 0 12px 40px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:border-primary:focus{border-color:var(--color-primary,oklch(50% .1 35))}.focus\:border-primary\/30:focus{border-color:#934c3a4d}@supports (color:color-mix(in lab, red, red)){.focus\:border-primary\/30:focus{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 30%, transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-primary\/10:focus{--tw-ring-color:#934c3a1a}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/10:focus{--tw-ring-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 10%, transparent)}}.focus\:ring-primary\/20:focus{--tw-ring-color:#934c3a33}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 20%, transparent)}}.focus\:ring-ring:focus{--tw-ring-color:var(--color-ring,oklch(50% .1 35))}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.data-\[checked\]\:border-primary[data-checked]{border-color:var(--color-primary,oklch(50% .1 35))}.data-\[checked\]\:bg-primary\/5[data-checked]{background-color:#934c3a0d}@supports (color:color-mix(in lab, red, red)){.data-\[checked\]\:bg-primary\/5[data-checked]{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 5%, transparent)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}[open]>.\[\[open\]\>\&\]\:rotate-180{rotate:180deg}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-1\/2{top:50%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[9999\]{z-index:9999}.col-span-full{grid-column:1/-1}.container{width:100%}.mx-auto{margin-inline:auto}.-mt-px{margin-top:-1px}.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-\[3\/4\]{aspect-ratio:3/4}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-\[5\/2\]{aspect-ratio:5/2}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-square{aspect-ratio:1}.h-\[6px\]{height:6px}.h-\[7px\]{height:7px}.h-\[11px\]{height:11px}.h-\[18px\]{height:18px}.h-\[72px\]{height:72px}.h-\[clamp\(560px\,80vh\,820px\)\]{height:clamp(560px,80vh,820px)}.h-\[min\(600px\,calc\(100vh-6rem\)\)\]{height:min(600px,100vh - 6rem)}.h-fit{height:fit-content}.h-full{height:100%}.max-h-\[85vh\]{max-height:85vh}.max-h-\[92vh\]{max-height:92vh}.max-h-\[100px\]{max-height:100px}.min-h-\[20px\]{min-height:20px}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-2\/5{width:40%}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-\[6px\]{width:6px}.w-\[7px\]{width:7px}.w-\[11px\]{width:11px}.w-\[18px\]{width:18px}.w-\[72px\]{width:72px}.w-\[400px\]{width:400px}.w-full{width:100%}.max-w-\[85\%\]{max-width:85%}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[calc\(100vw-3rem\)\]{max-width:calc(100vw - 3rem)}.max-w-none{max-width:none}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-bottom-left{transform-origin:0 100%}.origin-bottom-right{transform-origin:100% 100%}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-start{scroll-snap-align:start}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.\[appearance\:textfield\]{appearance:textfield}.auto-cols-\[minmax\(220px\,1fr\)\]{grid-auto-columns:minmax(220px,1fr)}.grid-flow-col{grid-auto-flow:column}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border,oklch(90% 0 0))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:var(--radius,.5rem)}.rounded-\[10px\]{border-radius:10px}.rounded-\[14px\]{border-radius:14px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-tl{border-top-left-radius:var(--radius,.5rem)}.rounded-tr{border-top-right-radius:var(--radius,.5rem)}.rounded-br{border-bottom-right-radius:var(--radius,.5rem)}.rounded-bl{border-bottom-left-radius:var(--radius,.5rem)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-background\/10{border-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.border-background\/10{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.border-background\/15{border-color:#fcfcfc26}@supports (color:color-mix(in lab, red, red)){.border-background\/15{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 15%, transparent)}}.border-background\/20{border-color:#fcfcfc33}@supports (color:color-mix(in lab, red, red)){.border-background\/20{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 20%, transparent)}}.border-background\/25{border-color:#fcfcfc40}@supports (color:color-mix(in lab, red, red)){.border-background\/25{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 25%, transparent)}}.border-background\/30{border-color:#fcfcfc4d}@supports (color:color-mix(in lab, red, red)){.border-background\/30{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 30%, transparent)}}.border-background\/40{border-color:#fcfcfc66}@supports (color:color-mix(in lab, red, red)){.border-background\/40{border-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 40%, transparent)}}.border-border{border-color:var(--color-border,oklch(90% 0 0))}.border-input{border-color:var(--color-input,oklch(90% 0 0))}.border-muted-foreground\/30{border-color:#6363634d}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\/30{border-color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 30%, transparent)}}.border-primary{border-color:var(--color-primary,oklch(50% .1 35))}.border-primary\/30{border-color:#934c3a4d}@supports (color:color-mix(in lab, red, red)){.border-primary\/30{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 30%, transparent)}}.border-primary\/40{border-color:#934c3a66}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 40%, transparent)}}.border-transparent{border-color:#0000}.border-t-foreground{border-top-color:var(--color-foreground,oklch(15% 0 0))}.bg-background{background-color:var(--color-background,oklch(99% 0 0))}.bg-background\/5{background-color:#fcfcfc0d}@supports (color:color-mix(in lab, red, red)){.bg-background\/5{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 5%, transparent)}}.bg-background\/10{background-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.bg-background\/10{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.bg-background\/15{background-color:#fcfcfc26}@supports (color:color-mix(in lab, red, red)){.bg-background\/15{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 15%, transparent)}}.bg-background\/20{background-color:#fcfcfc33}@supports (color:color-mix(in lab, red, red)){.bg-background\/20{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 20%, transparent)}}.bg-background\/50{background-color:#fcfcfc80}@supports (color:color-mix(in lab, red, red)){.bg-background\/50{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 50%, transparent)}}.bg-background\/90{background-color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 90%, transparent)}}.bg-background\/92{background-color:#fcfcfceb}@supports (color:color-mix(in lab, red, red)){.bg-background\/92{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 92%, transparent)}}.bg-background\/95{background-color:#fcfcfcf2}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 95%, transparent)}}.bg-border{background-color:var(--color-border,oklch(90% 0 0))}.bg-destructive{background-color:var(--color-destructive,oklch(50% .2 25))}.bg-destructive\/10{background-color:#bb061e1a}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--color-destructive,oklch(50% .2 25)) 10%, transparent)}}.bg-foreground{background-color:var(--color-foreground,oklch(15% 0 0))}.bg-foreground\/30{background-color:#0b0b0b4d}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/30{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 30%, transparent)}}.bg-foreground\/40{background-color:#0b0b0b66}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/40{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 40%, transparent)}}.bg-foreground\/50{background-color:#0b0b0b80}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/50{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 50%, transparent)}}.bg-foreground\/80{background-color:#0b0b0bcc}@supports (color:color-mix(in lab, red, red)){.bg-foreground\/80{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 80%, transparent)}}.bg-muted{background-color:var(--color-muted,oklch(95% 0 0))}.bg-muted-foreground\/40{background-color:#63636366}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 40%, transparent)}}.bg-muted\/30{background-color:#eeeeee4d}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 30%, transparent)}}.bg-muted\/50{background-color:#eeeeee80}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 50%, transparent)}}.bg-primary{background-color:var(--color-primary,oklch(50% .1 35))}.bg-primary\/5{background-color:#934c3a0d}@supports (color:color-mix(in lab, red, red)){.bg-primary\/5{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 5%, transparent)}}.bg-primary\/10{background-color:#934c3a1a}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 10%, transparent)}}.bg-primary\/15{background-color:#934c3a26}@supports (color:color-mix(in lab, red, red)){.bg-primary\/15{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 15%, transparent)}}.bg-transparent{background-color:#0000}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tr{--tw-gradient-position:to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.\[background-image\:linear-gradient\(135deg\,white_1px\,transparent_1px\)\]{background-image:linear-gradient(135deg,#fff 1px,#0000 1px)}.\[background-image\:radial-gradient\(circle_at_2px_2px\,white_1px\,transparent_0\)\]{background-image:radial-gradient(circle at 2px 2px,#fff 1px,#0000 0)}.from-foreground{--tw-gradient-from:var(--color-foreground,oklch(15% 0 0));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-foreground\/40{--tw-gradient-from:#0b0b0b66}@supports (color:color-mix(in lab, red, red)){.from-foreground\/40{--tw-gradient-from:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 40%, transparent)}}.from-foreground\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-primary{--tw-gradient-from:var(--color-primary,oklch(50% .1 35));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-foreground{--tw-gradient-via:var(--color-foreground,oklch(15% 0 0));--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-foreground\/40{--tw-gradient-via:#0b0b0b66}@supports (color:color-mix(in lab, red, red)){.via-foreground\/40{--tw-gradient-via:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 40%, transparent)}}.via-foreground\/40{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-primary{--tw-gradient-via:var(--color-primary,oklch(50% .1 35));--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-transparent{--tw-gradient-via:transparent;--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-background{--tw-gradient-to:var(--color-background,oklch(99% 0 0));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-foreground{--tw-gradient-to:var(--color-foreground,oklch(15% 0 0));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-foreground\/0{--tw-gradient-to:#0000}@supports (color:color-mix(in lab, red, red)){.to-foreground\/0{--tw-gradient-to:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 0%, transparent)}}.to-foreground\/0{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-primary{--tw-gradient-to:var(--color-primary,oklch(50% .1 35));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.\[background-size\:24px_24px\]{background-size:24px 24px}.\[background-size\:32px_32px\]{background-size:32px 32px}.\[background-size\:40px_40px\]{background-size:40px 40px}.object-cover{object-fit:cover}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-\[inherit\]{font-family:inherit}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14\.5px\]{font-size:14.5px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[18px\]{font-size:18px}.text-\[22px\]{font-size:22px}.text-\[26px\]{font-size:26px}.text-\[28px\]{font-size:28px}.text-\[clamp\(1\.5rem\,2\.5vw\,2rem\)\]{font-size:clamp(1.5rem,2.5vw,2rem)}.text-\[clamp\(1\.5rem\,3vw\,2rem\)\]{font-size:clamp(1.5rem,3vw,2rem)}.text-\[clamp\(1\.25rem\,2vw\,1\.75rem\)\]{font-size:clamp(1.25rem,2vw,1.75rem)}.text-\[clamp\(1\.75rem\,3\.5vw\,2\.5rem\)\]{font-size:clamp(1.75rem,3.5vw,2.5rem)}.text-\[clamp\(1\.75rem\,3\.5vw\,2\.75rem\)\]{font-size:clamp(1.75rem,3.5vw,2.75rem)}.text-\[clamp\(1\.75rem\,3vw\,2\.25rem\)\]{font-size:clamp(1.75rem,3vw,2.25rem)}.text-\[clamp\(2\.5rem\,5vw\,3\.5rem\)\]{font-size:clamp(2.5rem,5vw,3.5rem)}.text-\[clamp\(2\.5rem\,5vw\,4rem\)\]{font-size:clamp(2.5rem,5vw,4rem)}.text-\[clamp\(2\.5rem\,6vw\,4\.75rem\)\]{font-size:clamp(2.5rem,6vw,4.75rem)}.text-\[clamp\(2\.5rem\,6vw\,4rem\)\]{font-size:clamp(2.5rem,6vw,4rem)}.text-\[clamp\(2\.5rem\,7vw\,5rem\)\]{font-size:clamp(2.5rem,7vw,5rem)}.text-\[clamp\(2\.25rem\,5vw\,3\.5rem\)\]{font-size:clamp(2.25rem,5vw,3.5rem)}.text-\[clamp\(2rem\,4vw\,2\.75rem\)\]{font-size:clamp(2rem,4vw,2.75rem)}.text-\[clamp\(2rem\,4vw\,3rem\)\]{font-size:clamp(2rem,4vw,3rem)}.text-\[clamp\(2rem\,5vw\,3\.5rem\)\]{font-size:clamp(2rem,5vw,3.5rem)}.text-\[clamp\(2rem\,5vw\,3rem\)\]{font-size:clamp(2rem,5vw,3rem)}.text-\[clamp\(3\.5rem\,11vw\,9rem\)\]{font-size:clamp(3.5rem,11vw,9rem)}.text-\[clamp\(3rem\,9vw\,7rem\)\]{font-size:clamp(3rem,9vw,7rem)}.leading-\[0\.92\]{--tw-leading:.92;line-height:.92}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-none{--tw-leading:1;line-height:1}.-tracking-\[0\.02em\]{--tw-tracking:calc(.02em * -1);letter-spacing:-.02em}.-tracking-\[0\.03em\]{--tw-tracking:calc(.03em * -1);letter-spacing:-.03em}.-tracking-\[0\.04em\]{--tw-tracking:calc(.04em * -1);letter-spacing:-.04em}.-tracking-\[0\.015em\]{--tw-tracking:calc(.015em * -1);letter-spacing:-.015em}.-tracking-\[0\.025em\]{--tw-tracking:calc(.025em * -1);letter-spacing:-.025em}.-tracking-\[0\.035em\]{--tw-tracking:calc(.035em * -1);letter-spacing:-.035em}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[inherit\]{color:inherit}.text-background{color:var(--color-background,oklch(99% 0 0))}.text-background\/60{color:#fcfcfc99}@supports (color:color-mix(in lab, red, red)){.text-background\/60{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 60%, transparent)}}.text-background\/65{color:#fcfcfca6}@supports (color:color-mix(in lab, red, red)){.text-background\/65{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 65%, transparent)}}.text-background\/70{color:#fcfcfcb3}@supports (color:color-mix(in lab, red, red)){.text-background\/70{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 70%, transparent)}}.text-background\/75{color:#fcfcfcbf}@supports (color:color-mix(in lab, red, red)){.text-background\/75{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 75%, transparent)}}.text-background\/80{color:#fcfcfccc}@supports (color:color-mix(in lab, red, red)){.text-background\/80{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 80%, transparent)}}.text-background\/85{color:#fcfcfcd9}@supports (color:color-mix(in lab, red, red)){.text-background\/85{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 85%, transparent)}}.text-background\/90{color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.text-background\/90{color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 90%, transparent)}}.text-border{color:var(--color-border,oklch(90% 0 0))}.text-destructive{color:var(--color-destructive,oklch(50% .2 25))}.text-destructive-foreground{color:var(--color-destructive-foreground,oklch(99% 0 0))}.text-foreground{color:var(--color-foreground,oklch(15% 0 0))}.text-foreground\/80{color:#0b0b0bcc}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 80%, transparent)}}.text-foreground\/90{color:#0b0b0be6}@supports (color:color-mix(in lab, red, red)){.text-foreground\/90{color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 90%, transparent)}}.text-muted-foreground{color:var(--color-muted-foreground,oklch(50% 0 0))}.text-muted-foreground\/30{color:#6363634d}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/30{color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 30%, transparent)}}.text-muted-foreground\/60{color:#63636399}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/60{color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 60%, transparent)}}.text-muted-foreground\/80{color:#636363cc}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab, var(--color-muted-foreground,oklch(50% 0 0)) 80%, transparent)}}.text-primary{color:var(--color-primary,oklch(50% .1 35))}.text-primary-foreground{color:var(--color-primary-foreground,oklch(99% 0 0))}.text-primary-foreground\/70{color:#fcfcfcb3}@supports (color:color-mix(in lab, red, red)){.text-primary-foreground\/70{color:color-mix(in oklab, var(--color-primary-foreground,oklch(99% 0 0)) 70%, transparent)}}.text-primary-foreground\/90{color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.text-primary-foreground\/90{color:color-mix(in oklab, var(--color-primary-foreground,oklch(99% 0 0)) 90%, transparent)}}.text-primary-foreground\/95{color:#fcfcfcf2}@supports (color:color-mix(in lab, red, red)){.text-primary-foreground\/95{color:color-mix(in oklab, var(--color-primary-foreground,oklch(99% 0 0)) 95%, transparent)}}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.not-italic{font-style:normal}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.accent-foreground{accent-color:var(--color-foreground,oklch(15% 0 0))}.accent-primary{accent-color:var(--color-primary,oklch(50% .1 35))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-100{opacity:1}.opacity-\[0\.04\]{opacity:.04}.opacity-\[0\.06\]{opacity:.06}.shadow-\[0_1px_3px_rgba\(0\,0\,0\,0\.04\)\,0_6px_24px_rgba\(0\,0\,0\,0\.06\)\]{--tw-shadow:0 1px 3px var(--tw-shadow-color,#0000000a), 0 6px 24px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_4px_rgba\(0\,0\,0\,0\.10\)\,0_4px_12px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0 1px 4px var(--tw-shadow-color,#0000001a), 0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-background{--tw-ring-color:var(--color-background,oklch(99% 0 0))}.ring-background\/10{--tw-ring-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.ring-background\/10{--tw-ring-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-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,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.ease-\[cubic-bezier\(0\.19\,1\,0\.22\,1\)\]{--tw-ease:cubic-bezier(.19,1,.22,1);transition-timing-function:cubic-bezier(.19,1,.22,1)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[cimplify\:checkout\]{cimplify:checkout}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-\[1\.04\]:is(:where(.group):hover *){scale:1.04}.group-hover\:bg-primary:is(:where(.group):hover *){background-color:var(--color-primary,oklch(50% .1 35))}.group-hover\:text-foreground:is(:where(.group):hover *){color:var(--color-foreground,oklch(15% 0 0))}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--color-primary,oklch(50% .1 35))}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground,oklch(50% 0 0))}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:border-foreground:focus-within{border-color:var(--color-foreground,oklch(15% 0 0))}.focus-within\:bg-background:focus-within{background-color:var(--color-background,oklch(99% 0 0))}@media (hover:hover){.hover\:-translate-y-\[1px\]:hover{--tw-translate-y:calc(1px * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:\!scale-110:hover{--tw-scale-x:110%!important;--tw-scale-y:110%!important;--tw-scale-z:110%!important;scale:var(--tw-scale-x) var(--tw-scale-y)!important}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-\[1\.04\]:hover{scale:1.04}.hover\:scale-\[1\.08\]:hover{scale:1.08}.hover\:border-foreground:hover{border-color:var(--color-foreground,oklch(15% 0 0))}.hover\:border-foreground\/30:hover{border-color:#0b0b0b4d}@supports (color:color-mix(in lab, red, red)){.hover\:border-foreground\/30:hover{border-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 30%, transparent)}}.hover\:border-primary:hover{border-color:var(--color-primary,oklch(50% .1 35))}.hover\:border-primary\/20:hover{border-color:#934c3a33}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/20:hover{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 20%, transparent)}}.hover\:border-primary\/40:hover{border-color:#934c3a66}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 40%, transparent)}}.hover\:border-primary\/50:hover{border-color:#934c3a80}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 50%, transparent)}}.hover\:\!bg-foreground:hover{background-color:var(--color-foreground,oklch(15% 0 0))!important}.hover\:bg-background:hover{background-color:var(--color-background,oklch(99% 0 0))}.hover\:bg-background\/10:hover{background-color:#fcfcfc1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-background\/10:hover{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 10%, transparent)}}.hover\:bg-background\/90:hover{background-color:#fcfcfce6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-background\/90:hover{background-color:color-mix(in oklab, var(--color-background,oklch(99% 0 0)) 90%, transparent)}}.hover\:bg-destructive\/10:hover{background-color:#bb061e1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab, var(--color-destructive,oklch(50% .2 25)) 10%, transparent)}}.hover\:bg-foreground\/90:hover{background-color:#0b0b0be6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-foreground\/90:hover{background-color:color-mix(in oklab, var(--color-foreground,oklch(15% 0 0)) 90%, transparent)}}.hover\:bg-muted:hover{background-color:var(--color-muted,oklch(95% 0 0))}.hover\:bg-muted\/70:hover{background-color:#eeeeeeb3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/70:hover{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 70%, transparent)}}.hover\:bg-muted\/80:hover{background-color:#eeec}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/80:hover{background-color:color-mix(in oklab, var(--color-muted,oklch(95% 0 0)) 80%, transparent)}}.hover\:bg-primary:hover{background-color:var(--color-primary,oklch(50% .1 35))}.hover\:bg-primary\/90:hover{background-color:#934c3ae6}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 90%, transparent)}}.hover\:\!text-background:hover{color:var(--color-background,oklch(99% 0 0))!important}.hover\:text-background:hover{color:var(--color-background,oklch(99% 0 0))}.hover\:text-destructive:hover{color:var(--color-destructive,oklch(50% .2 25))}.hover\:text-foreground:hover{color:var(--color-foreground,oklch(15% 0 0))}.hover\:text-primary:hover{color:var(--color-primary,oklch(50% .1 35))}.hover\:text-primary-foreground:hover{color:var(--color-primary-foreground,oklch(99% 0 0))}.hover\:text-primary\/80:hover{color:#934c3acc}@supports (color:color-mix(in lab, red, red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 80%, transparent)}}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_2px_6px_rgba\(0\,0\,0\,0\.04\)\,0_12px_40px_rgba\(0\,0\,0\,0\.10\)\]:hover{--tw-shadow:0 2px 6px var(--tw-shadow-color,#0000000a), 0 12px 40px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:border-primary:focus{border-color:var(--color-primary,oklch(50% .1 35))}.focus\:border-primary\/30:focus{border-color:#934c3a4d}@supports (color:color-mix(in lab, red, red)){.focus\:border-primary\/30:focus{border-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 30%, transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-primary\/10:focus{--tw-ring-color:#934c3a1a}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/10:focus{--tw-ring-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 10%, transparent)}}.focus\:ring-primary\/20:focus{--tw-ring-color:#934c3a33}@supports (color:color-mix(in lab, red, red)){.focus\:ring-primary\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 20%, transparent)}}.focus\:ring-ring:focus{--tw-ring-color:var(--color-ring,oklch(50% .1 35))}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.data-\[checked\]\:border-primary[data-checked]{border-color:var(--color-primary,oklch(50% .1 35))}.data-\[checked\]\:bg-primary\/5[data-checked]{background-color:#934c3a0d}@supports (color:color-mix(in lab, red, red)){.data-\[checked\]\:bg-primary\/5[data-checked]{background-color:color-mix(in oklab, var(--color-primary,oklch(50% .1 35)) 5%, transparent)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}[open]>.\[\[open\]\>\&\]\:rotate-180{rotate:180deg}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
{
|
|
12
12
|
"path": "cart-summary.tsx",
|
|
13
|
-
"content": "\"use client\";\n\nimport React from \"react\";\nimport type { UseCartItem } from \"@cimplify/sdk/react\";\nimport type { DisplayCart } from \"@cimplify/sdk\";\nimport { useCart } from \"@cimplify/sdk/react\";\nimport { getVariantDisplayName } from \"@cimplify/sdk\";\nimport { INPUT_FIELD_TYPE } from \"@cimplify/sdk\";\nimport { parsePrice } from \"@cimplify/sdk\";\nimport { Price } from \"@cimplify/sdk/react\";\nimport { QuantitySelector } from \"@cimplify/sdk/react\";\nimport { useProductPrice } from \"@cimplify/sdk/react\";\nimport { cn } from \"@cimplify/sdk/react\";\n\nexport interface CartSummaryClassNames {\n root?: string;\n item?: string;\n itemName?: string;\n itemPrice?: string;\n quantity?: string;\n removeButton?: string;\n totals?: string;\n subtotal?: string;\n tax?: string;\n deliveryFee?: string;\n serviceCharge?: string;\n discount?: string;\n total?: string;\n checkout?: string;\n empty?: string;\n serviceInfo?: string;\n digitalInfo?: string;\n bundleBreakdown?: string;\n compositeBreakdown?: string;\n customerInputs?: string;\n}\n\nexport interface CartSummaryProps {\n /** Optional server cart for extended pricing details (delivery fee, service charge, discounts). */\n cart?: DisplayCart;\n onCheckout?: () => void;\n onItemRemove?: (itemId: string) => void;\n onQuantityChange?: (itemId: string, quantity: number) => void;\n emptyMessage?: string;\n className?: string;\n classNames?: CartSummaryClassNames;\n}\n\nfunction CartLineItemRow({\n item,\n onRemove,\n onQuantityChange,\n classNames,\n}: {\n item: UseCartItem;\n onRemove: (itemId: string) => void;\n onQuantityChange: (itemId: string, qty: number) => void;\n classNames?: CartSummaryClassNames;\n}): React.ReactElement {\n const { unitPrice } = useProductPrice({\n product: item.product,\n variant: item.variant,\n addOnOptions: item.addOnOptions,\n });\n const hasComposite = item.compositeSelections && item.compositeSelections.length > 0;\n const hasBundle = item.bundleSelections && item.bundleSelections.length > 0;\n\n const isOptimistic = (item as { isOptimistic?: boolean }).isOptimistic === true;\n\n return (\n <div\n data-cimplify-cart-item\n data-optimistic={isOptimistic ? \"true\" : undefined}\n className={classNames?.item}\n >\n <div data-cimplify-cart-item-info>\n <span data-cimplify-cart-item-name className={classNames?.itemName}>{item.product.name}</span>\n\n {item.variant && (\n <span data-cimplify-cart-item-variant>\n {getVariantDisplayName(item.variant, item.product.name)}\n </span>\n )}\n\n {item.addOnOptions && item.addOnOptions.length > 0 && (\n <span data-cimplify-cart-item-addons>\n + {item.addOnOptions.map((opt) => opt.name).join(\", \")}\n </span>\n )}\n\n {(hasComposite || hasBundle) && (\n <span data-cimplify-cart-item-badge>\n {hasComposite ? \"Custom\" : \"Bundle\"}\n </span>\n )}\n\n {item.specialInstructions && (\n <span data-cimplify-cart-item-instructions className=\"text-xs text-muted-foreground\">\n {item.specialInstructions}\n </span>\n )}\n\n {/* Customer input values */}\n {item.customerInputs && item.customerInputs.length > 0 && (\n <div data-cimplify-cart-customer-inputs className={classNames?.customerInputs}>\n {item.customerInputs.map((input) => (\n <div key={input.field_id} data-cimplify-cart-input>\n <span data-cimplify-cart-input-label>{input.field_name}</span>\n <span data-cimplify-cart-input-value>\n {input.field_type === INPUT_FIELD_TYPE.File || input.field_type === INPUT_FIELD_TYPE.Image\n ? String(input.value).split(\"/\").pop() || \"Uploaded file\"\n : String(input.value)}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {/* Service items: show booking details */}\n {(item.lineType === \"service\" || item.product.type === \"service\") && item.scheduledStart && (\n <div data-cimplify-cart-service-info className={classNames?.serviceInfo}>\n <span>{\"\\u{1F4C5}\"} {new Date(item.scheduledStart).toLocaleDateString()} at {new Date(item.scheduledStart).toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}</span>\n {item.confirmationCode && <span>Confirmation: {item.confirmationCode}</span>}\n {item.serviceStatus && <span data-status={item.serviceStatus}>{item.serviceStatus}</span>}\n </div>\n )}\n\n {/* Digital items: show instant delivery badge */}\n {(item.lineType === \"digital\" || item.product.type === \"digital\") && (\n <div data-cimplify-cart-digital-info className={classNames?.digitalInfo}>\n <span>{\"\\u26A1\"} Instant digital delivery</span>\n </div>\n )}\n\n {/* Bundle component breakdown */}\n {item.bundleResolved && (\n <div data-cimplify-cart-bundle-breakdown className={classNames?.bundleBreakdown}>\n {item.bundleResolved.selections.map((sel) => (\n <div key={sel.component_id} data-product-type={sel.product_type}>\n <span>{sel.quantity}× {sel.product_name}</span>\n {sel.product_type === \"service\" && sel.scheduling?.scheduled_start && (\n <span> — {new Date(sel.scheduling.scheduled_start).toLocaleDateString()}</span>\n )}\n {sel.product_type === \"digital\" && <span> — Digital</span>}\n </div>\n ))}\n </div>\n )}\n\n {/* Composite component breakdown */}\n {item.compositeResolved && (\n <div data-cimplify-cart-composite-breakdown className={classNames?.compositeBreakdown}>\n {item.compositeResolved.selections.map((sel) => (\n <div key={sel.component_id} data-product-type={sel.product_type}>\n <span>{sel.quantity}× {sel.component_name}</span>\n {sel.product_type === \"service\" && sel.scheduling?.scheduled_start && (\n <span> — {new Date(sel.scheduling.scheduled_start).toLocaleDateString()}</span>\n )}\n </div>\n ))}\n </div>\n )}\n\n <Price amount={unitPrice} className={classNames?.itemPrice} />\n </div>\n\n <div data-cimplify-cart-item-controls className={classNames?.quantity}>\n <QuantitySelector\n value={item.quantity}\n onChange={(qty) => onQuantityChange(item.id, qty)}\n min={0}\n />\n <button\n type=\"button\"\n onClick={() => onRemove(item.id)}\n data-cimplify-cart-item-remove\n className={classNames?.removeButton}\n aria-label={`Remove ${item.product.name}`}\n >\n Remove\n </button>\n </div>\n </div>\n );\n}\n\n/**\n * CartSummary — renders cart line items + totals.\n *\n * NOT a drawer or modal — just the cart content. Templates wrap this in\n * their own drawer/modal shell with animations.\n */\nexport function CartSummary({\n cart: serverCart,\n onCheckout,\n onItemRemove,\n onQuantityChange,\n emptyMessage = \"Your cart is empty\",\n className,\n classNames,\n}: CartSummaryProps): React.ReactElement {\n const {\n items,\n itemCount,\n subtotal,\n tax,\n total,\n isEmpty,\n isOptimistic,\n pendingOpCount,\n removeItem,\n updateQuantity,\n } = useCart();\n\n const deliveryFee = serverCart?.delivery_fee;\n const serviceCharge = serverCart?.service_charge;\n const totalDiscounts = serverCart?.total_discounts;\n\n const handleRemove = (itemId: string) => {\n if (onItemRemove) {\n onItemRemove(itemId);\n } else {\n void removeItem(itemId);\n }\n };\n\n const handleQuantityChange = (itemId: string, qty: number) => {\n if (onQuantityChange) {\n onQuantityChange(itemId, qty);\n } else {\n void updateQuantity(itemId, qty);\n }\n };\n\n return (\n <div\n data-cimplify-cart-summary\n data-optimistic={isOptimistic ? \"true\" : undefined}\n data-pending-ops={pendingOpCount > 0 ? pendingOpCount : undefined}\n className={cn(className, classNames?.root)}\n >\n {isEmpty ? (\n <div data-cimplify-cart-empty className={classNames?.empty}>\n <p>{emptyMessage}</p>\n </div>\n ) : (\n <>\n {/* Line items */}\n <div data-cimplify-cart-items>\n {items.map((item) => (\n <CartLineItemRow\n key={item.id}\n item={item}\n onRemove={handleRemove}\n onQuantityChange={handleQuantityChange}\n classNames={classNames}\n />\n ))}\n </div>\n\n {/* Totals */}\n <div data-cimplify-cart-totals className={classNames?.totals}>\n <div data-cimplify-cart-subtotal className={classNames?.subtotal}>\n <span>Subtotal ({itemCount} {itemCount === 1 ? \"item\" : \"items\"})</span>\n <Price amount={subtotal} />\n </div>\n\n {totalDiscounts != null && parsePrice(totalDiscounts) > 0 && (\n <div data-cimplify-cart-discount className={classNames?.discount}>\n <span>Discount</span>\n <Price amount={totalDiscounts} prefix=\"-\" />\n </div>\n )}\n\n {deliveryFee != null && (\n <div data-cimplify-cart-delivery-fee className={classNames?.deliveryFee}>\n <span>Delivery fee</span>\n {parsePrice(deliveryFee) > 0 ? (\n <Price amount={deliveryFee} />\n ) : (\n <span>Free delivery</span>\n )}\n </div>\n )}\n\n {serviceCharge != null && parsePrice(serviceCharge) > 0 && (\n <div data-cimplify-cart-service-charge className={classNames?.serviceCharge}>\n <span>Service charge</span>\n <Price amount={serviceCharge} />\n </div>\n )}\n\n <div data-cimplify-cart-tax className={classNames?.tax}>\n <span>Tax</span>\n <Price amount={tax} />\n </div>\n <div data-cimplify-cart-total className={classNames?.total}>\n <span>Total</span>\n <Price amount={total} />\n </div>\n </div>\n\n {onCheckout && (\n <button\n type=\"button\"\n onClick={onCheckout}\n data-cimplify-cart-checkout\n className={classNames?.checkout}\n >\n Proceed to Checkout\n </button>\n )}\n </>\n )}\n </div>\n );\n}\n"
|
|
13
|
+
"content": "\"use client\";\n\nimport React from \"react\";\nimport type { UseCartItem } from \"@cimplify/sdk/react\";\nimport type { DisplayCart } from \"@cimplify/sdk\";\nimport { useCart } from \"@cimplify/sdk/react\";\nimport { getVariantDisplayName } from \"@cimplify/sdk\";\nimport { INPUT_FIELD_TYPE } from \"@cimplify/sdk\";\nimport { parsePrice } from \"@cimplify/sdk\";\nimport { Price } from \"@cimplify/sdk/react\";\nimport { QuantitySelector } from \"@cimplify/sdk/react\";\nimport { useProductPrice } from \"@cimplify/sdk/react\";\nimport { cn } from \"@cimplify/sdk/react\";\n\nexport interface CartSummaryClassNames {\n root?: string;\n item?: string;\n itemName?: string;\n itemPrice?: string;\n quantity?: string;\n removeButton?: string;\n totals?: string;\n subtotal?: string;\n tax?: string;\n deliveryFee?: string;\n serviceCharge?: string;\n discount?: string;\n total?: string;\n checkout?: string;\n empty?: string;\n serviceInfo?: string;\n digitalInfo?: string;\n bundleBreakdown?: string;\n compositeBreakdown?: string;\n customerInputs?: string;\n}\n\nexport interface CartSummaryProps {\n /** Optional server cart for extended pricing details (delivery fee, service charge, discounts). */\n cart?: DisplayCart;\n onCheckout?: () => void;\n onItemRemove?: (itemId: string) => void;\n onQuantityChange?: (itemId: string, quantity: number) => void;\n emptyMessage?: string;\n className?: string;\n classNames?: CartSummaryClassNames;\n}\n\nfunction CartLineItemRow({\n item,\n onRemove,\n onQuantityChange,\n classNames,\n}: {\n item: UseCartItem;\n onRemove: (itemId: string) => void;\n onQuantityChange: (itemId: string, qty: number) => void;\n classNames?: CartSummaryClassNames;\n}): React.ReactElement {\n const { unitPrice } = useProductPrice({\n product: item.product,\n variant: item.variant,\n addOnOptions: item.addOnOptions,\n });\n const hasComposite = item.compositeSelections && item.compositeSelections.length > 0;\n const hasBundle = item.bundleSelections && item.bundleSelections.length > 0;\n\n const isOptimistic = (item as { isOptimistic?: boolean }).isOptimistic === true;\n\n return (\n <div\n data-cimplify-cart-item\n data-optimistic={isOptimistic ? \"true\" : undefined}\n className={cn(\n \"flex items-start justify-between gap-4 py-4 border-b border-border last:border-b-0\",\n classNames?.item,\n )}\n >\n <div data-cimplify-cart-item-info className=\"flex-1 min-w-0 space-y-1\">\n <span\n data-cimplify-cart-item-name\n className={cn(\"block font-medium\", classNames?.itemName)}\n >\n {item.product.name}\n </span>\n\n {item.variant && (\n <span data-cimplify-cart-item-variant className=\"block text-xs text-muted-foreground\">\n {getVariantDisplayName(item.variant, item.product.name)}\n </span>\n )}\n\n {item.addOnOptions && item.addOnOptions.length > 0 && (\n <span data-cimplify-cart-item-addons className=\"block text-xs text-muted-foreground\">\n + {item.addOnOptions.map((opt) => opt.name).join(\", \")}\n </span>\n )}\n\n {(hasComposite || hasBundle) && (\n <span data-cimplify-cart-item-badge>\n {hasComposite ? \"Custom\" : \"Bundle\"}\n </span>\n )}\n\n {item.specialInstructions && (\n <span data-cimplify-cart-item-instructions className=\"text-xs text-muted-foreground\">\n {item.specialInstructions}\n </span>\n )}\n\n {/* Customer input values */}\n {item.customerInputs && item.customerInputs.length > 0 && (\n <div data-cimplify-cart-customer-inputs className={classNames?.customerInputs}>\n {item.customerInputs.map((input) => (\n <div key={input.field_id} data-cimplify-cart-input>\n <span data-cimplify-cart-input-label>{input.field_name}</span>\n <span data-cimplify-cart-input-value>\n {input.field_type === INPUT_FIELD_TYPE.File || input.field_type === INPUT_FIELD_TYPE.Image\n ? String(input.value).split(\"/\").pop() || \"Uploaded file\"\n : String(input.value)}\n </span>\n </div>\n ))}\n </div>\n )}\n\n {/* Service items: show booking details */}\n {(item.lineType === \"service\" || item.product.type === \"service\") && item.scheduledStart && (\n <div data-cimplify-cart-service-info className={classNames?.serviceInfo}>\n <span>{\"\\u{1F4C5}\"} {new Date(item.scheduledStart).toLocaleDateString()} at {new Date(item.scheduledStart).toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}</span>\n {item.confirmationCode && <span>Confirmation: {item.confirmationCode}</span>}\n {item.serviceStatus && <span data-status={item.serviceStatus}>{item.serviceStatus}</span>}\n </div>\n )}\n\n {/* Digital items: show instant delivery badge */}\n {(item.lineType === \"digital\" || item.product.type === \"digital\") && (\n <div data-cimplify-cart-digital-info className={classNames?.digitalInfo}>\n <span>{\"\\u26A1\"} Instant digital delivery</span>\n </div>\n )}\n\n {/* Bundle component breakdown */}\n {item.bundleResolved && (\n <div data-cimplify-cart-bundle-breakdown className={classNames?.bundleBreakdown}>\n {item.bundleResolved.selections.map((sel) => (\n <div key={sel.component_id} data-product-type={sel.product_type}>\n <span>{sel.quantity}× {sel.product_name}</span>\n {sel.product_type === \"service\" && sel.scheduling?.scheduled_start && (\n <span> — {new Date(sel.scheduling.scheduled_start).toLocaleDateString()}</span>\n )}\n {sel.product_type === \"digital\" && <span> — Digital</span>}\n </div>\n ))}\n </div>\n )}\n\n {/* Composite component breakdown */}\n {item.compositeResolved && (\n <div data-cimplify-cart-composite-breakdown className={classNames?.compositeBreakdown}>\n {item.compositeResolved.selections.map((sel) => (\n <div key={sel.component_id} data-product-type={sel.product_type}>\n <span>{sel.quantity}× {sel.component_name}</span>\n {sel.product_type === \"service\" && sel.scheduling?.scheduled_start && (\n <span> — {new Date(sel.scheduling.scheduled_start).toLocaleDateString()}</span>\n )}\n </div>\n ))}\n </div>\n )}\n\n <Price\n amount={unitPrice}\n className={cn(\"block pt-1 text-sm font-semibold\", classNames?.itemPrice)}\n />\n </div>\n\n <div\n data-cimplify-cart-item-controls\n className={cn(\"flex flex-col items-end gap-2 shrink-0\", classNames?.quantity)}\n >\n <QuantitySelector\n value={item.quantity}\n onChange={(qty) => onQuantityChange(item.id, qty)}\n min={0}\n />\n <button\n type=\"button\"\n onClick={() => onRemove(item.id)}\n data-cimplify-cart-item-remove\n className={cn(\"text-xs text-muted-foreground hover:text-foreground hover:underline transition-colors\", classNames?.removeButton)}\n aria-label={`Remove ${item.product.name}`}\n >\n Remove\n </button>\n </div>\n </div>\n );\n}\n\n/**\n * CartSummary — renders cart line items + totals.\n *\n * NOT a drawer or modal — just the cart content. Templates wrap this in\n * their own drawer/modal shell with animations.\n */\nexport function CartSummary({\n cart: serverCart,\n onCheckout,\n onItemRemove,\n onQuantityChange,\n emptyMessage = \"Your cart is empty\",\n className,\n classNames,\n}: CartSummaryProps): React.ReactElement {\n const {\n items,\n itemCount,\n subtotal,\n tax,\n total,\n isEmpty,\n isOptimistic,\n pendingOpCount,\n removeItem,\n updateQuantity,\n } = useCart();\n\n const deliveryFee = serverCart?.delivery_fee;\n const serviceCharge = serverCart?.service_charge;\n const totalDiscounts = serverCart?.total_discounts;\n\n const handleRemove = (itemId: string) => {\n if (onItemRemove) {\n onItemRemove(itemId);\n } else {\n void removeItem(itemId);\n }\n };\n\n const handleQuantityChange = (itemId: string, qty: number) => {\n if (onQuantityChange) {\n onQuantityChange(itemId, qty);\n } else {\n void updateQuantity(itemId, qty);\n }\n };\n\n return (\n <div\n data-cimplify-cart-summary\n data-optimistic={isOptimistic ? \"true\" : undefined}\n data-pending-ops={pendingOpCount > 0 ? pendingOpCount : undefined}\n className={cn(className, classNames?.root)}\n >\n {isEmpty ? (\n <div data-cimplify-cart-empty className={classNames?.empty}>\n <p>{emptyMessage}</p>\n </div>\n ) : (\n <>\n {/* Line items */}\n <div data-cimplify-cart-items>\n {items.map((item) => (\n <CartLineItemRow\n key={item.id}\n item={item}\n onRemove={handleRemove}\n onQuantityChange={handleQuantityChange}\n classNames={classNames}\n />\n ))}\n </div>\n\n {/* Totals */}\n <div data-cimplify-cart-totals className={classNames?.totals}>\n <div data-cimplify-cart-subtotal className={classNames?.subtotal}>\n <span>Subtotal ({itemCount} {itemCount === 1 ? \"item\" : \"items\"})</span>\n <Price amount={subtotal} />\n </div>\n\n {totalDiscounts != null && parsePrice(totalDiscounts) > 0 && (\n <div data-cimplify-cart-discount className={classNames?.discount}>\n <span>Discount</span>\n <Price amount={totalDiscounts} prefix=\"-\" />\n </div>\n )}\n\n {deliveryFee != null && (\n <div data-cimplify-cart-delivery-fee className={classNames?.deliveryFee}>\n <span>Delivery fee</span>\n {parsePrice(deliveryFee) > 0 ? (\n <Price amount={deliveryFee} />\n ) : (\n <span>Free delivery</span>\n )}\n </div>\n )}\n\n {serviceCharge != null && parsePrice(serviceCharge) > 0 && (\n <div data-cimplify-cart-service-charge className={classNames?.serviceCharge}>\n <span>Service charge</span>\n <Price amount={serviceCharge} />\n </div>\n )}\n\n <div data-cimplify-cart-tax className={classNames?.tax}>\n <span>Tax</span>\n <Price amount={tax} />\n </div>\n <div data-cimplify-cart-total className={classNames?.total}>\n <span>Total</span>\n <Price amount={total} />\n </div>\n </div>\n\n {onCheckout && (\n <button\n type=\"button\"\n onClick={onCheckout}\n data-cimplify-cart-checkout\n className={classNames?.checkout}\n >\n Proceed to Checkout\n </button>\n )}\n </>\n )}\n </div>\n );\n}\n"
|
|
14
14
|
}
|
|
15
15
|
]
|
|
16
16
|
}
|
|
@@ -1,27 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { useCimplifyClient } from "@cimplify/sdk/react";
|
|
3
|
+
import { useCart } from "@cimplify/sdk/react";
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* fine-grained but heavier — this is enough for a header badge.
|
|
6
|
+
* Reactive cart count for the header pill. Subscribes to the SDK cart
|
|
7
|
+
* state — updates immediately on add / remove / quantity change.
|
|
10
8
|
*/
|
|
11
|
-
export function useCartCount(): { count: number
|
|
12
|
-
const {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const refresh = () => {
|
|
16
|
-
void client.cart.getCount().then((r) => {
|
|
17
|
-
if (r.ok) setCount(r.value);
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
refresh();
|
|
23
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
24
|
-
}, [client]);
|
|
25
|
-
|
|
26
|
-
return { count, refresh };
|
|
9
|
+
export function useCartCount(): { count: number } {
|
|
10
|
+
const { itemCount } = useCart();
|
|
11
|
+
return { count: itemCount };
|
|
27
12
|
}
|
|
@@ -4,6 +4,7 @@ import "./globals.css";
|
|
|
4
4
|
import { Providers } from "@/components/providers";
|
|
5
5
|
import { Header } from "@/components/header";
|
|
6
6
|
import { Footer } from "@/components/footer";
|
|
7
|
+
import { CartDrawer } from "@/components/cart-drawer";
|
|
7
8
|
import { brand } from "@/lib/brand";
|
|
8
9
|
|
|
9
10
|
const inter = Inter({
|
|
@@ -69,6 +70,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
69
70
|
<Header />
|
|
70
71
|
<main className="flex-1 pb-12 w-full">{children}</main>
|
|
71
72
|
<Footer />
|
|
73
|
+
<CartDrawer />
|
|
72
74
|
</Providers>
|
|
73
75
|
</body>
|
|
74
76
|
</html>
|