diff --git a/assets/images/prod-catalog.jpg b/assets/images/prod-catalog.jpg new file mode 100644 index 0000000..1fe7884 Binary files /dev/null and b/assets/images/prod-catalog.jpg differ diff --git a/data/products.json b/data/products.json index f7ee99f..a807fb7 100644 --- a/data/products.json +++ b/data/products.json @@ -8,7 +8,6 @@ "alt": "Modesty Panels", "category": "training-tables", "modelNo": "SE001", - "tags": ["Chair", "Seating", "Office", "Ergonomic"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -30,15 +29,11 @@ "selectedSize": "M", "selectedColor": "Black", "price": 250, - "originalPrice": 250, - "rating": "4.4", - "reviews": 88, "inStock": true, "images": [ "assets/images/products/categories/training-tables/modesty-panels/training-desk-4-1000x1000.jpg", "assets/images/products/categories/training-tables/modesty-panels/Student-set-up-300x300.jpg", - "assets/images/products/categories/training-tables/modesty-panels/training-desk-4-1000x1000.jpg", - "assets/images/products/categories/training-tables/modesty-panels/Student-set-up-300x300.jpg" + "assets/images/products/categories/training-tables/modesty-panels/entrawood-catalogue-72dpi-24-300x300.jpg" ], "descriptionLong": [ "The Asgaard sofa represents the pinnacle of executive seating design, combining sophisticated aesthetics with uncompromising comfort. Crafted with precision engineering and premium materials, this sofa sets the standard for professional workspace furniture.", @@ -53,12 +48,9 @@ "coveredInWarranty": "Manufacturing defects", "notCoveredInWarranty": "Wear and tear not covered" }, - "reviewsCount": 88, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-tables/modesty-panels/training-desk-4-1000x1000.jpg", - "right": "assets/images/products/categories/training-tables/modesty-panels/Student-set-up-300x300.jpg" - } + "assets/images/products/categories/training-tables/modesty-panels/training-desk-4-1000x1000.jpg", + "assets/images/products/categories/training-tables/modesty-panels/Student-set-up-300x300.jpg" ], "dimensions": "180cm x 85cm x 75cm", "salesPackage": "1 unit", @@ -83,7 +75,6 @@ "alt": "Domino", "category": "training-tables", "modelNo": "TA002", - "tags": ["Table", "Workstation", "Office", "Conference"], "sizes": ["S", "M", "L"], "colors": [ { @@ -105,15 +96,11 @@ "selectedSize": "L", "selectedColor": "Natural", "price": 899.99, - "originalPrice": 899.99, - "rating": "4.9", - "reviews": 69, "inStock": true, "images": [ "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_04_600x600px-1.webp", "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_03_600x600px-1.webp", - "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_02_600x600px-1.webp", - "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_04_600x600px-1.webp" + "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_02_600x600px-1.webp" ], "descriptionLong": [ "The Domino nesting training table embodies flexible classroom design with its innovative nesting capability and modern aesthetic. This versatile table is engineered to facilitate collaborative learning and training sessions in any educational environment.", @@ -128,12 +115,9 @@ "coveredInWarranty": "Manufacturing defects", "notCoveredInWarranty": "Wear and tear not covered" }, - "reviewsCount": 69, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_04_600x600px-1.webp", - "right": "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_03_600x600px-1.webp" - } + "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_04_600x600px-1.webp", + "assets/images/products/categories/training-tables/domino/Thumbnail_Desks-Tables_Training_Tables_Domino-Nesting_Table_Categories_Gallery_03_600x600px-1.webp" ], "dimensions": "120cm x 60cm x 75cm", "salesPackage": "1 unit", @@ -158,7 +142,6 @@ "alt": "Slim", "category": "training-tables", "modelNo": "ST003", - "tags": ["Storage", "Cabinet", "Office", "Organization"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -188,7 +171,7 @@ "assets/images/products/categories/training-tables/slim/Thumbnail_Desks-Tables_Training_Tables_Slim-Nesting_Table_Categories_Gallery_02_600x600px.jpg", "assets/images/products/categories/training-tables/slim/Thumbnail_Desks-Tables_Training_Tables_Slim-Nesting_Table_Categories_Gallery_05_600x600px.jpg", "assets/images/products/categories/training-tables/slim/Thumbnail_Desks-Tables_Training_Tables_Slim-Nesting_Table_Categories_Gallery_06_600x600px.jpg", - "assets/images/products/categories/training-tables/slim/Training-Tables_Slim_Gallery_04_600x600px.jpg" + "assets/images/products/categories/training-tables/slim/Thumbnail_Desks-Tables_Training_Tables_Slim-Nesting_Table_Categories_Gallery_07_600x600px.jpg" ], "descriptionLong": [ "Transform any training space into a productive learning environment with our Slim training table. Designed specifically for modern educational spaces that embrace flexible learning, this table combines functionality with space-efficient design.", @@ -205,10 +188,9 @@ }, "reviewsCount": 12, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-tables/slim/Thumbnail_Desks-Tables_Training_Tables_Slim-Nesting_Table_Categories_Gallery_02_600x600px.jpg", - "right": "assets/images/products/categories/training-tables/slim/Thumbnail_Desks-Tables_Training_Tables_Slim-Nesting_Table_Categories_Gallery_05_600x600px.jpg" - } + "assets/images/products/categories/training-tables/slim/Training-Tables_Slim_Gallery_04_600x600px.jpg", + "assets/images/products/categories/training-tables/slim/Training-Tables_Slim_Gallery_05_600x600px.jpg", + "assets/images/products/categories/training-tables/slim/Training-Tables_Slim_Gallery_06_600x600px.jpg" ], "dimensions": "100cm x 50cm x 90cm", "salesPackage": "1 unit", @@ -235,7 +217,6 @@ "price": 599.99, "inStock": true, "modelNo": "ST004", - "tags": ["Storage", "Cabinet", "Office", "Organization"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -280,10 +261,8 @@ }, "reviewsCount": 103, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-tables/fold-up/Fold-up-Table-300x300.jpg", - "right": "assets/images/products/categories/training-tables/fold-up/entrakor_fold-up-table-300x300.jpg" - } + "assets/images/products/categories/training-tables/fold-up/Fold-up-Table-300x300.jpg", + "assets/images/products/categories/training-tables/fold-up/entrakor_fold-up-table-300x300.jpg" ], "dimensions": "60cm x 40cm x 120cm", "salesPackage": "1 unit", @@ -310,7 +289,6 @@ "price": 299.99, "inStock": true, "modelNo": "SE005", - "tags": ["Chair", "Seating", "Office", "Ergonomic"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -355,10 +333,8 @@ }, "reviewsCount": 25, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-tables/graft/Graft-Table-22mm-Trapezoid-Table-Free-Standing-870x600x745-Non-stack-600x600.jpg", - "right": "assets/images/products/categories/training-tables/graft/GraftTable-stackable-classroom2-350x350.jpg" - } + "assets/images/products/categories/training-tables/graft/Graft-Table-22mm-Trapezoid-Table-Free-Standing-870x600x745-Non-stack-600x600.jpg", + "assets/images/products/categories/training-tables/graft/GraftTable-stackable-classroom2-350x350.jpg" ], "dimensions": "140cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -385,7 +361,6 @@ "price": 349.99, "inStock": true, "modelNo": "SC006", - "tags": ["Screen", "Privacy", "Office", "Acoustic"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -429,10 +404,8 @@ }, "reviewsCount": 80, "galleryPairs": [ - { - "left": "assets/images/products/categories/screens/cocoon/edit72-008-350x350.jpg", - "right": "assets/images/products/categories/screens/cocoon/entrawood-catalogue-sml-10-350x350.jpg" - } + "assets/images/products/categories/screens/cocoon/edit72-008-350x350.jpg", + "assets/images/products/categories/screens/cocoon/entrawood-catalogue-sml-10-350x350.jpg" ], "dimensions": "120cm x 60cm x 150cm", "salesPackage": "1 unit", @@ -459,7 +432,6 @@ "price": 899.99, "inStock": true, "modelNo": "SC007", - "tags": ["Screen", "Privacy", "Acoustic", "Technology"], "sizes": ["S", "M", "L"], "colors": [ { @@ -502,10 +474,8 @@ }, "reviewsCount": 10, "galleryPairs": [ - { - "left": "assets/images/products/categories/screens/global-mute-cocoon/GLOBAL-MUTE-COCOON SCREEN-2.jpg", - "right": "assets/images/products/categories/screens/global-mute-cocoon/GLOBAL-MUTE-COCOON-SCREEN.png.jpg" - } + "assets/images/products/categories/screens/global-mute-cocoon/GLOBAL-MUTE-COCOON SCREEN-2.jpg", + "assets/images/products/categories/screens/global-mute-cocoon/GLOBAL-MUTE-COCOON-SCREEN.png.jpg" ], "dimensions": "150cm x 80cm x 180cm", "salesPackage": "1 unit", @@ -532,7 +502,6 @@ "price": 599.99, "inStock": true, "modelNo": "SC008", - "tags": ["Screen", "Desk", "Privacy", "Technology"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -576,10 +545,8 @@ }, "reviewsCount": 89, "galleryPairs": [ - { - "left": "assets/images/products/categories/screens/global-mute-desk/GLOBAL-MUTE-DESK-BASED-SCREEN.webp", - "right": "assets/images/products/categories/screens/global-mute-desk/MUTE-DESK-BASED-SCREEN-2.webp" - } + "assets/images/products/categories/screens/global-mute-desk/GLOBAL-MUTE-DESK-BASED-SCREEN.webp", + "assets/images/products/categories/screens/global-mute-desk/MUTE-DESK-BASED-SCREEN-2.webp" ], "dimensions": "120cm x 60cm x 120cm", "salesPackage": "1 unit", @@ -606,7 +573,6 @@ "price": 299.99, "inStock": true, "modelNo": "SC009", - "tags": ["Screen", "Privacy", "Minimalist", "Office"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -650,10 +616,8 @@ }, "reviewsCount": 58, "galleryPairs": [ - { - "left": "assets/images/products/categories/screens/simple/SIMPLE-SCREEN-1.webp", - "right": "assets/images/products/categories/screens/simple/SIMPLE-SCREEN-2.webp" - } + "assets/images/products/categories/screens/simple/SIMPLE-SCREEN-1.webp", + "assets/images/products/categories/screens/simple/SIMPLE-SCREEN-2.webp" ], "dimensions": "100cm x 50cm x 140cm", "salesPackage": "1 unit", @@ -680,7 +644,6 @@ "price": 349.99, "inStock": true, "modelNo": "ED010", - "tags": ["Desk", "Executive", "Office", "Premium"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -724,10 +687,8 @@ }, "reviewsCount": 82, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-desks/diamond-loop/DIAMOND-LOOP-MANAGERIAL-DESK.jpg", - "right": "assets/images/products/categories/executive-desks/diamond-loop/DIAMOND-LOOP-IN-OPEN-PLAN-3.jpg" - } + "assets/images/products/categories/executive-desks/diamond-loop/DIAMOND-LOOP-MANAGERIAL-DESK.jpg", + "assets/images/products/categories/executive-desks/diamond-loop/DIAMOND-LOOP-IN-OPEN-PLAN-3.jpg" ], "dimensions": "180cm x 90cm x 75cm", "salesPackage": "1 unit", @@ -754,7 +715,6 @@ "price": 899.99, "inStock": true, "modelNo": "ED011", - "tags": ["Desk", "Executive", "Elegant", "Premium"], "sizes": ["S", "M", "L"], "colors": [ { @@ -798,10 +758,8 @@ }, "reviewsCount": 38, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-desks/allure/ALLURE-EXECUTIVE-DESK.jpg", - "right": "assets/images/products/categories/executive-desks/allure/Thumbnail_Desks-Tables_Desks_Alluree_Categories_Gallery_00_600x600px.jpg" - } + "assets/images/products/categories/executive-desks/allure/ALLURE-EXECUTIVE-DESK.jpg", + "assets/images/products/categories/executive-desks/allure/Thumbnail_Desks-Tables_Desks_Alluree_Categories_Gallery_00_600x600px.jpg" ], "dimensions": "200cm x 100cm x 75cm", "salesPackage": "1 unit", @@ -828,7 +786,6 @@ "price": 599.99, "inStock": true, "modelNo": "ED012", - "tags": ["Desk", "Executive", "Sustainable", "Eco-friendly"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -873,10 +830,8 @@ }, "reviewsCount": 11, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-desks/ecocentric-lite/Thumbnail_Desks-Tables_Desks_Ecocentric-Lite_Categories_Gallery_00_600x600px.jpg", - "right": "assets/images/products/categories/executive-desks/ecocentric-lite/Thumbnail_Desks-Tables_Desks_Ecocentric-Lite_Categories_Gallery_02_600x600px.jpg" - } + "assets/images/products/categories/executive-desks/ecocentric-lite/Thumbnail_Desks-Tables_Desks_Ecocentric-Lite_Categories_Gallery_00_600x600px.jpg", + "assets/images/products/categories/executive-desks/ecocentric-lite/Thumbnail_Desks-Tables_Desks_Ecocentric-Lite_Categories_Gallery_02_600x600px.jpg" ], "dimensions": "160cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -903,7 +858,6 @@ "price": 299.99, "inStock": true, "modelNo": "ED013", - "tags": ["Desk", "Executive", "L-Shape", "Versatile"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -948,10 +902,8 @@ }, "reviewsCount": 48, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-desks/evolution-l-shape/evolution-with-pedenza-600x600.png", - "right": "assets/images/products/categories/executive-desks/evolution-l-shape/evolution-manager-pedenza-300x300.jpg" - } + "assets/images/products/categories/executive-desks/evolution-l-shape/evolution-with-pedenza-600x600.png", + "assets/images/products/categories/executive-desks/evolution-l-shape/evolution-manager-pedenza-300x300.jpg" ], "dimensions": "200cm x 120cm x 75cm", "salesPackage": "1 unit", @@ -978,7 +930,6 @@ "price": 349.99, "inStock": true, "modelNo": "ED014", - "tags": ["Desk", "Executive", "Premium", "Professional"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -1023,10 +974,8 @@ }, "reviewsCount": 50, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-desks/diamond-exec/DIAMOND-EXEC-7.jpg", - "right": "assets/images/products/categories/executive-desks/diamond-exec/DIAMOND-MANAGERIAL-DESK.jpg" - } + "assets/images/products/categories/executive-desks/diamond-exec/DIAMOND-EXEC-7.jpg", + "assets/images/products/categories/executive-desks/diamond-exec/DIAMOND-MANAGERIAL-DESK.jpg" ], "dimensions": "160cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -1053,7 +1002,6 @@ "price": 899.99, "inStock": true, "modelNo": "CC015", - "tags": ["Chair", "Conference", "Classical", "Traditional"], "sizes": ["S", "M", "L"], "colors": [ { @@ -1098,10 +1046,10 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/classical/Classical-HB-Black_Blk-New-05.jpg", - "right": "assets/images/products/categories/conference-chairs/classical/Classical-HB-Tan-New-02.jpg" - } + "assets/images/products/categories/conference-chairs/classical/Classical-HB-Black_Blk-New-05.jpg", + "assets/images/products/categories/conference-chairs/classical/Classical-HB-Tan-New-02.jpg", + "assets/images/products/categories/conference-chairs/classical/Seating_Classical_Black_Gallery_05_600x600px.webp", + "assets/images/products/categories/conference-chairs/classical/Seating_Classical_Grey_Black_Gallery_01_600x600px.webp" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1128,7 +1076,6 @@ "price": 599.99, "inStock": true, "modelNo": "CC016", - "tags": ["Chair", "Conference", "Modern", "Contemporary"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -1173,10 +1120,8 @@ }, "reviewsCount": 95, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/messi/MESSI-7.jpg", - "right": "assets/images/products/categories/conference-chairs/messi/MESSI-3.jpg" - } + "assets/images/products/categories/conference-chairs/messi/MESSI-7.jpg", + "assets/images/products/categories/conference-chairs/messi/MESSI-3.jpg" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1203,7 +1148,6 @@ "price": 499.99, "inStock": true, "modelNo": "CC017", - "tags": ["Chair", "Conference", "Executive", "Premium"], "sizes": ["S", "M", "L"], "colors": [ { @@ -1248,10 +1192,8 @@ }, "reviewsCount": 104, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/alya/andreu_world_alya_executive_so1482_1 (1).webp", - "right": "assets/images/products/categories/conference-chairs/alya/andreu_world_alya_executive_so1482_2 (1).webp" - } + "assets/images/products/categories/conference-chairs/alya/andreu_world_alya_executive_so1482_1 (1).webp", + "assets/images/products/categories/conference-chairs/alya/andreu_world_alya_executive_so1482_2 (1).webp" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1278,7 +1220,6 @@ "price": 259.99, "inStock": true, "modelNo": "CC018", - "tags": ["Chair", "Conference", "Swivel", "Professional"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -1323,10 +1264,8 @@ }, "reviewsCount": 63, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/unique-swivel/Unique-Swivel-Black-05.jpg", - "right": "assets/images/products/categories/conference-chairs/unique-swivel/Unique-Swivel-Amber-01.jpg" - } + "assets/images/products/categories/conference-chairs/unique-swivel/Unique-Swivel-Black-05.jpg", + "assets/images/products/categories/conference-chairs/unique-swivel/Unique-Swivel-Amber-01.jpg" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1353,7 +1292,6 @@ "price": 1299.99, "inStock": true, "modelNo": "CC019", - "tags": ["Chair", "Conference", "Swivel", "Professional"], "sizes": ["M", "L"], "colors": [ { @@ -1398,10 +1336,8 @@ }, "reviewsCount": 11, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/chico-swivel/Chico-4-Star-Emerald-Green-02.jpg", - "right": "assets/images/products/categories/conference-chairs/chico-swivel/Chico-4-Star-Stone-Grey-02.jpg" - } + "assets/images/products/categories/conference-chairs/chico-swivel/Chico-4-Star-Emerald-Green-02.jpg", + "assets/images/products/categories/conference-chairs/chico-swivel/Chico-4-Star-Stone-Grey-02.jpg" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1428,7 +1364,6 @@ "price": 399.99, "inStock": true, "modelNo": "CC020", - "tags": ["Chair", "Conference", "Flexible", "Professional"], "sizes": ["M", "L"], "colors": [ { @@ -1473,10 +1408,9 @@ }, "reviewsCount": 23, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/flex/flex_executive_andreu_world_SO1860_armchair_1.webp", - "right": "assets/images/products/categories/conference-chairs/flex/flex_executive_andreu_world_SO1861_armchair_1.webp" - } + "assets/images/products/categories/conference-chairs/flex/flex_executive_andreu_world_SO1860_armchair_1.webp", + "assets/images/products/categories/conference-chairs/flex/flex_executive_andreu_world_SO1861_armchair_1.webp", + "assets/images/products/categories/conference-chairs/flex/flex_executive_andreu_world_SO1846_armchair_1.webp" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1503,7 +1437,6 @@ "price": 149.99, "inStock": true, "modelNo": "CC021", - "tags": ["Chair", "Conference", "Professional", "Comfortable"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -1531,7 +1464,7 @@ "assets/images/products/categories/conference-chairs/cappa/CAPPA_FAMILY.webp", "assets/images/products/categories/conference-chairs/cappa/CAPPA_4-LEGGED.webp", "assets/images/products/categories/conference-chairs/cappa/CAPPA_BASE_SLED_WHITE.webp", - "assets/images/products/categories/conference-chairs/cappa/CAPPA_FAMILY.webp" + "assets/images/products/categories/conference-chairs/cappa/CAPPA_BASE_FLAT.webp" ], "descriptionLong": [ "Experience professional comfort with our Cappa conference chair. This sophisticated chair combines elegant design with superior functionality, perfect for meeting rooms and conference environments.", @@ -1548,10 +1481,8 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/cappa/CAPPA_4-LEGGED.webp", - "right": "assets/images/products/categories/conference-chairs/cappa/CAPPA_BASE_SLED_WHITE.webp" - } + "assets/images/products/categories/conference-chairs/cappa/CAPPA_GAS_BASE_STAR_ALUMINIUM_69.webp", + "assets/images/products/categories/conference-chairs/cappa/CAPPA_FAMILY.webp" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1578,7 +1509,6 @@ "price": 349.99, "inStock": true, "modelNo": "CC022", - "tags": ["Chair", "Conference", "Premium", "Luxury"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -1618,10 +1548,9 @@ }, "reviewsCount": 50, "galleryPairs": [ - { - "left": "assets/images/products/categories/conference-chairs/kalea-4-star/Seating_Kalea_Gallery_33_600x600px.jpg", - "right": "assets/images/products/categories/conference-chairs/kalea-4-star/Seating_Kalea_Gallery_36_600x600px.webp" - } + "assets/images/products/categories/conference-chairs/kalea-4-star/Seating_Kalea_Gallery_33_600x600px.jpg", + "assets/images/products/categories/conference-chairs/kalea-4-star/Seating_Kalea_Gallery_36_600x600px.webp", + "assets/images/products/categories/conference-chairs/kalea-4-star/Seating_Kalea_Gallery_37_600x600px.jpg" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1647,7 +1576,6 @@ "price": 399.99, "inStock": true, "modelNo": "VC023", - "tags": ["Chair", "Visitors", "Reception", "Guest"], "sizes": ["XS", "S", "M", "L", "XL"], "colors": [ { @@ -1692,10 +1620,8 @@ }, "reviewsCount": 102, "galleryPairs": [ - { - "left": "assets/images/products/categories/visitors-chair/glove-visitors/GLOVE_SELF-CENTRING_BEECH_SEATPAD.webp", - "right": "assets/images/products/categories/visitors-chair/glove-visitors/GLOVE_SELF-CENTRING_UPHOLSTERED_02.webp" - } + "assets/images/products/categories/visitors-chair/glove-visitors/GLOVE_SELF-CENTRING_BEECH_SEATPAD.webp", + "assets/images/products/categories/visitors-chair/glove-visitors/GLOVE_SELF-CENTRING_UPHOLSTERED_02.webp" ], "dimensions": "90cm x 90cm x 85cm", "salesPackage": "1 unit", @@ -1722,7 +1648,6 @@ "price": 1099.99, "inStock": true, "modelNo": "VC024", - "tags": ["Chair", "Visitors", "Reception", "Guest"], "sizes": ["S", "M", "L"], "colors": [ { @@ -1767,10 +1692,8 @@ }, "reviewsCount": 34, "galleryPairs": [ - { - "left": "assets/images/products/categories/visitors-chair/flexi/flexi-fx-1161-05.webp", - "right": "assets/images/products/categories/visitors-chair/flexi/flexi-fx-1161-01.webp" - } + "assets/images/products/categories/visitors-chair/flexi/flexi-fx-1161-05.webp", + "assets/images/products/categories/visitors-chair/flexi/flexi-fx-1161-01.webp" ], "dimensions": "200cm x 100cm x 75cm", "salesPackage": "1 unit", @@ -1797,7 +1720,6 @@ "price": 2199.99, "inStock": true, "modelNo": "VC025", - "tags": ["Chair", "Visitors", "Reception", "Guest"], "sizes": ["S", "M", "L"], "colors": [ { @@ -1842,10 +1764,10 @@ }, "reviewsCount": 67, "galleryPairs": [ - { - "left": "assets/images/products/categories/visitors-chair/la-filo/Seating_La-Filo_Gallery_17_600x600px.jpg", - "right": "assets/images/products/categories/visitors-chair/la-filo/Seating_La-Filo_Gallery_20_600x600px.jpg" - } + "assets/images/products/categories/visitors-chair/la-filo/Seating_La-Filo_Gallery_17_600x600px.jpg", + "assets/images/products/categories/visitors-chair/la-filo/Seating_La-Filo_Gallery_20_600x600px.jpg", + "assets/images/products/categories/visitors-chair/la-filo/Seating_La-Filo_Gallery_21_600x600px.webp", + "assets/images/products/categories/visitors-chair/la-filo/Seating_La-Filo_Gallery_26_600x600px.jpg" ], "dimensions": "140cm x 70cm x 75cm", "salesPackage": "1 unit", @@ -1872,7 +1794,6 @@ "price": 299.99, "inStock": true, "modelNo": "VC026", - "tags": ["Chair", "Visitors", "Reception", "Guest"], "sizes": ["M", "L"], "colors": [ { @@ -1912,10 +1833,8 @@ }, "reviewsCount": 28, "galleryPairs": [ - { - "left": "assets/images/products/categories/visitors-chair/plural/plural (10).webp", - "right": "assets/images/products/categories/visitors-chair/plural/plural (21).webp" - } + "assets/images/products/categories/visitors-chair/plural/plural (10).webp", + "assets/images/products/categories/visitors-chair/plural/plural (21).webp" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -1940,7 +1859,6 @@ "price": 199.99, "inStock": true, "modelNo": "VC027", - "tags": ["Chair", "Visitors", "Reception", "Guest"], "sizes": ["M", "L"], "colors": [ { @@ -1980,10 +1898,8 @@ }, "reviewsCount": 15, "galleryPairs": [ - { - "left": "assets/images/products/categories/visitors-chair/chico/Chico-4-Legged-Green-04.jpg", - "right": "assets/images/products/categories/visitors-chair/chico/Chico-4-Legged-Green-05.jpg" - } + "assets/images/products/categories/visitors-chair/chico/Chico-4-Legged-Green-04.jpg", + "assets/images/products/categories/visitors-chair/chico/Chico-4-Legged-Green-05.jpg" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -2008,7 +1924,6 @@ "price": 249.99, "inStock": true, "modelNo": "VC028", - "tags": ["Chair", "Visitors", "Reception", "Guest"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -2030,8 +1945,7 @@ "images": [ "assets/images/products/categories/visitors-chair/cappa/CAPPA_FAMILY.webp", "assets/images/products/categories/visitors-chair/cappa/CAPPA_4-LEGGED.webp", - "assets/images/products/categories/visitors-chair/cappa/CAPPA_BASE_SLED_WHITE.webp", - "assets/images/products/categories/visitors-chair/cappa/CAPPA_FAMILY.webp" + "assets/images/products/categories/visitors-chair/cappa/CAPPA_BASE_SLED_WHITE.webp" ], "descriptionLong": [ "Welcome guests with comfort and style using our Cappa visitors chair. This professional chair combines elegant design with superior comfort, perfect for reception areas and guest seating.", @@ -2048,10 +1962,8 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/visitors-chair/cappa/CAPPA_4-LEGGED.webp", - "right": "assets/images/products/categories/visitors-chair/cappa/CAPPA_BASE_SLED_WHITE.webp" - } + "assets/images/products/categories/visitors-chair/cappa/CAPPA_FAMILY.webp", + "assets/images/products/categories/visitors-chair/cappa/CAPPA_4-LEGGED.webp" ], "dimensions": "65cm x 65cm x 85cm", "salesPackage": "1 unit", @@ -2076,7 +1988,6 @@ "price": 599.99, "inStock": true, "modelNo": "SS029", - "tags": ["Soft Seating", "Lounge", "Comfort", "Modern"], "sizes": ["M", "L"], "colors": [ { @@ -2116,10 +2027,10 @@ }, "reviewsCount": 18, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/breeze/Breeze-Grey-01.jpg", - "right": "assets/images/products/categories/soft-seating/breeze/Breeze-Grey-02.jpg" - } + "assets/images/products/categories/soft-seating/breeze/Breeze-Grey-01.jpg", + "assets/images/products/categories/soft-seating/breeze/Breeze-Grey-02.jpg", + "assets/images/products/categories/soft-seating/breeze/Breeze-Grey-02-2-768x768.jpg", + "assets/images/products/categories/soft-seating/breeze/Breeze.jpg" ], "dimensions": "120cm x 80cm x 70cm", "salesPackage": "1 unit", @@ -2144,7 +2055,6 @@ "price": 899.99, "inStock": true, "modelNo": "SS030", - "tags": ["Soft Seating", "Lounge", "Luxury", "Executive"], "sizes": ["L", "XL"], "colors": [ { @@ -2184,10 +2094,10 @@ }, "reviewsCount": 25, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/bow-lounge/BOW LOUNGE_054.jpg", - "right": "assets/images/products/categories/soft-seating/bow-lounge/BOW LOUNGE_001.jpg" - } + "assets/images/products/categories/soft-seating/bow-lounge/BOW LOUNGE_054.jpg", + "assets/images/products/categories/soft-seating/bow-lounge/BOW LOUNGE_001.jpg", + "assets/images/products/categories/soft-seating/bow-lounge/BOW LOUNGE_055.jpg", + "assets/images/products/categories/soft-seating/bow-lounge/BOW LOUNGE_064.jpg" ], "dimensions": "150cm x 100cm x 80cm", "salesPackage": "1 unit", @@ -2212,7 +2122,6 @@ "price": 499.99, "inStock": true, "modelNo": "SS031", - "tags": ["Soft Seating", "Break Area", "Casual", "Comfort"], "sizes": ["M", "L"], "colors": [ { @@ -2252,10 +2161,11 @@ }, "reviewsCount": 12, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/pausa/PAUSA_050.jpg", - "right": "assets/images/products/categories/soft-seating/pausa/PAUSA_052.jpg" - } + "assets/images/products/categories/soft-seating/pausa/PAUSA_050.jpg", + "assets/images/products/categories/soft-seating/pausa/PAUSA_052.jpg", + "assets/images/products/categories/soft-seating/pausa/PAUSA_053.jpg", + "assets/images/products/categories/soft-seating/pausa/PAUSA_054.jpg", + "assets/images/products/categories/soft-seating/pausa/PAUSA_059.jpg" ], "dimensions": "110cm x 75cm x 65cm", "salesPackage": "1 unit", @@ -2280,7 +2190,6 @@ "price": 699.99, "inStock": true, "modelNo": "SS032", - "tags": ["Soft Seating", "Reception", "Elegant", "Formal"], "sizes": ["M", "L"], "colors": [ { @@ -2320,10 +2229,11 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/amivera/AMIVERA_019.jpg", - "right": "assets/images/products/categories/soft-seating/amivera/AMIVERA_028.jpg" - } + "assets/images/products/categories/soft-seating/amivera/AMIVERA_019.jpg", + "assets/images/products/categories/soft-seating/amivera/AMIVERA_028.jpg", + "assets/images/products/categories/soft-seating/amivera/AMIVERA_099.jpg", + "assets/images/products/categories/soft-seating/amivera/AMIVERA_103.jpg", + "assets/images/products/categories/soft-seating/amivera/Amivera_gallery_sofas-tables-office.jpg" ], "dimensions": "130cm x 85cm x 75cm", "salesPackage": "1 unit", @@ -2348,7 +2258,6 @@ "price": 549.99, "inStock": true, "modelNo": "SS033", - "tags": ["Soft Seating", "Modern", "Contemporary", "Sleek"], "sizes": ["M", "L"], "colors": [ { @@ -2388,10 +2297,8 @@ }, "reviewsCount": 16, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/cyl/CYL_030.jpg", - "right": "assets/images/products/categories/soft-seating/cyl/CYL_033.jpg" - } + "assets/images/products/categories/soft-seating/cyl/CYL_030.jpg", + "assets/images/products/categories/soft-seating/cyl/CYL_033.jpg" ], "dimensions": "100cm x 70cm x 60cm", "salesPackage": "1 unit", @@ -2416,7 +2323,6 @@ "price": 399.99, "inStock": true, "modelNo": "SS034", - "tags": ["Soft Seating", "Creative", "Playful", "Vibrant"], "sizes": ["S", "M"], "colors": [ { @@ -2456,10 +2362,8 @@ }, "reviewsCount": 14, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/hopscotch/HOPSCOTCH-SCENE-1.jpg", - "right": "assets/images/products/categories/soft-seating/hopscotch/HopScotch.jpg" - } + "assets/images/products/categories/soft-seating/hopscotch/HOPSCOTCH-SCENE-1.jpg", + "assets/images/products/categories/soft-seating/hopscotch/HopScotch.jpg" ], "dimensions": "90cm x 60cm x 55cm", "salesPackage": "1 unit", @@ -2484,7 +2388,6 @@ "price": 649.99, "inStock": true, "modelNo": "SS035", - "tags": ["Soft Seating", "Elegant", "Coastal", "Sophisticated"], "sizes": ["M", "L"], "colors": [ { @@ -2524,10 +2427,14 @@ }, "reviewsCount": 19, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/marina/MARINA_013.jpg", - "right": "assets/images/products/categories/soft-seating/marina/MARINA_014.jpg" - } + "assets/images/products/categories/soft-seating/marina/MARINA_013.jpg", + "assets/images/products/categories/soft-seating/marina/MARINA_014.jpg", + "assets/images/products/categories/soft-seating/marina/MARINA_015.jpg", + "assets/images/products/categories/soft-seating/marina/MARINA_016.jpg", + "assets/images/products/categories/soft-seating/marina/MARINA_017.jpg", + "assets/images/products/categories/soft-seating/marina/MARINA_036.jpg", + "assets/images/products/categories/soft-seating/marina/MARINA_048.jpg", + "assets/images/products/categories/soft-seating/marina/230130157517-2.jpg" ], "dimensions": "125cm x 80cm x 70cm", "salesPackage": "1 unit", @@ -2552,7 +2459,6 @@ "price": 749.99, "inStock": true, "modelNo": "SS036", - "tags": ["Soft Seating", "Collaborative", "Meeting", "Interactive"], "sizes": ["L", "XL"], "colors": [ { @@ -2574,8 +2480,7 @@ "images": [ "assets/images/products/categories/soft-seating/meet-me/400x400_Thumbnail_Seating_Lounge-Seating_Meet-Me.jpg", "assets/images/products/categories/soft-seating/meet-me/1024x500_Gallery_Reception-Soft-Seating_Meet-Me01-768x375.jpg", - "assets/images/products/categories/soft-seating/meet-me/1024x500_Gallery_Reception-Soft-Seating_Meet-Me02-768x375.jpg", - "assets/images/products/categories/soft-seating/meet-me/400x400_Thumbnail_Seating_Lounge-Seating_Meet-Me.jpg" + "assets/images/products/categories/soft-seating/meet-me/1024x500_Gallery_Reception-Soft-Seating_Meet-Me02-768x375.jpg" ], "descriptionLong": [ "Foster collaboration with our Meet Me soft seating. This interactive piece combines collaborative design with superior comfort, perfect for meeting areas and team collaboration spaces.", @@ -2592,10 +2497,8 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/meet-me/1024x500_Gallery_Reception-Soft-Seating_Meet-Me01-768x375.jpg", - "right": "assets/images/products/categories/soft-seating/meet-me/1024x500_Gallery_Reception-Soft-Seating_Meet-Me02-768x375.jpg" - } + "assets/images/products/categories/soft-seating/meet-me/400x400_Thumbnail_Seating_Lounge-Seating_Meet-Me.jpg", + "assets/images/products/categories/soft-seating/meet-me/1024x500_Gallery_Reception-Soft-Seating_Meet-Me01-768x375.jpg" ], "dimensions": "140cm x 90cm x 75cm", "salesPackage": "1 unit", @@ -2620,7 +2523,6 @@ "price": 999.99, "inStock": true, "modelNo": "SS037", - "tags": ["Soft Seating", "Premium", "Luxury", "Exclusive"], "sizes": ["L", "XL"], "colors": [ { @@ -2660,10 +2562,12 @@ }, "reviewsCount": 28, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/envy/Envy-RANGE-3seater-back-300x300.jpg", - "right": "assets/images/products/categories/soft-seating/envy/Envy-RANGE-lounge-chair-300x300.jpg" - } + "assets/images/products/categories/soft-seating/envy/Envy-RANGE-3seater-back-300x300.jpg", + "assets/images/products/categories/soft-seating/envy/Envy-RANGE-lounge-chair-300x300.jpg", + "assets/images/products/categories/soft-seating/envy/Envy-RANGE-3seater-migraton-indigo-front-ml.jpg", + "assets/images/products/categories/soft-seating/envy/Envy-RANGE-lounge-chair-pink-angled-600x600.jpg", + "assets/images/products/categories/soft-seating/envy/Envy-RANGE-lounge-chair-pink-angled-back-300x300.jpg", + "assets/images/products/categories/soft-seating/envy/Envy-RANGE-lounge-chair-pink-front-sml-300x300.jpg" ], "dimensions": "160cm x 110cm x 85cm", "salesPackage": "1 unit", @@ -2688,7 +2592,6 @@ "price": 599.99, "inStock": true, "modelNo": "SS038", - "tags": ["Soft Seating", "Classic", "Traditional", "Timeless"], "sizes": ["M", "L"], "colors": [ { @@ -2728,10 +2631,12 @@ }, "reviewsCount": 17, "galleryPairs": [ - { - "left": "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_035.jpg", - "right": "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_036.jpg" - } + "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_035.jpg", + "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_036.jpg", + "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_043.jpg", + "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_050.jpg", + "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_056.jpg", + "assets/images/products/categories/soft-seating/bow-chair/BOW CHAIR_057.jpg" ], "dimensions": "115cm x 75cm x 70cm", "salesPackage": "1 unit", @@ -2756,7 +2661,6 @@ "price": 299.99, "inStock": true, "modelNo": "BS039", - "tags": ["Barstool", "Reception", "Casual", "Modern"], "sizes": ["M", "L"], "colors": [ { @@ -2796,10 +2700,9 @@ }, "reviewsCount": 16, "galleryPairs": [ - { - "left": "assets/images/products/categories/barstools/smile/smile_andreu_world_BQ0328_barstool_1.webp", - "right": "assets/images/products/categories/barstools/smile/smile_andreu_world_BQ0327_barstool_1.webp" - } + "assets/images/products/categories/barstools/smile/smile_andreu_world_BQ0328_barstool_1.webp", + "assets/images/products/categories/barstools/smile/smile_andreu_world_BQ0327_barstool_1.webp", + "assets/images/products/categories/barstools/smile/smile_andreu_world_BQ0328_barstool_2.webp" ], "dimensions": "45cm x 45cm x 75cm", "salesPackage": "1 unit", @@ -2824,7 +2727,6 @@ "price": 399.99, "inStock": true, "modelNo": "BS040", - "tags": ["Barstool", "Cafe", "Elegant", "Stylish"], "sizes": ["M", "L"], "colors": [ { @@ -2864,10 +2766,8 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/barstools/faro/Faro-Barstool-Moss-02a.webp", - "right": "assets/images/products/categories/barstools/faro/1024x500_Gallery_Cafe_Faro-Barstool06.jpg" - } + "assets/images/products/categories/barstools/faro/Faro-Barstool-Moss-02a.webp", + "assets/images/products/categories/barstools/faro/1024x500_Gallery_Cafe_Faro-Barstool06.jpg" ], "dimensions": "50cm x 50cm x 80cm", "salesPackage": "1 unit", @@ -2892,7 +2792,6 @@ "price": 249.99, "inStock": true, "modelNo": "BS041", - "tags": ["Barstool", "Casual", "Dining", "Comfort"], "sizes": ["M", "L"], "colors": [ { @@ -2932,10 +2831,9 @@ }, "reviewsCount": 14, "galleryPairs": [ - { - "left": "assets/images/products/categories/barstools/abril/ABRIL_077.jpg", - "right": "assets/images/products/categories/barstools/abril/ABRIL_029.jpg" - } + "assets/images/products/categories/barstools/abril/ABRIL_077.jpg", + "assets/images/products/categories/barstools/abril/ABRIL_102.jpg", + "assets/images/products/categories/barstools/abril/ABRIL_112.jpg" ], "dimensions": "45cm x 45cm x 70cm", "salesPackage": "1 unit", @@ -2960,7 +2858,6 @@ "price": 549.99, "inStock": true, "modelNo": "BS042", - "tags": ["Barstool", "Premium", "Luxury", "Reception"], "sizes": ["M", "L"], "colors": [ { @@ -3000,10 +2897,8 @@ }, "reviewsCount": 28, "galleryPairs": [ - { - "left": "assets/images/products/categories/barstools/kalea/Seating_Kalea_Gallery_20_600x600px.webp", - "right": "assets/images/products/categories/barstools/kalea/Kalea-Barstool-Chrome_Brick.jpg" - } + "assets/images/products/categories/barstools/kalea/Seating_Kalea_Gallery_20_600x600px.webp", + "assets/images/products/categories/barstools/kalea/Kalea-Barstool-Chrome_Brick.jpg" ], "dimensions": "50cm x 50cm x 85cm", "salesPackage": "1 unit", @@ -3028,7 +2923,6 @@ "price": 349.99, "inStock": true, "modelNo": "BS043", - "tags": ["Barstool", "Versatile", "Flexible", "Modern"], "sizes": ["M", "L"], "colors": [ { @@ -3068,10 +2962,8 @@ }, "reviewsCount": 19, "galleryPairs": [ - { - "left": "assets/images/products/categories/barstools/glove/GLOVE_HIGH_WHITE_BEECH_02.webp", - "right": "assets/images/products/categories/barstools/glove/GLOVE_4-LEGGED_HIGH.webp" - } + "assets/images/products/categories/barstools/glove/GLOVE_HIGH_WHITE_BEECH_02.webp", + "assets/images/products/categories/barstools/glove/GLOVE_4-LEGGED_HIGH.webp" ], "dimensions": "45cm x 45cm x 75cm", "salesPackage": "1 unit", @@ -3096,7 +2988,6 @@ "price": 899.99, "inStock": true, "modelNo": "WS044", - "tags": ["Work Station", "Compact", "Individual", "Efficient"], "sizes": ["M", "L"], "colors": [ { @@ -3136,10 +3027,8 @@ }, "reviewsCount": 18, "galleryPairs": [ - { - "left": "assets/images/products/categories/work-station/f25/F25_DESK_BENCH_01.webp", - "right": "assets/images/products/categories/work-station/f25/F25_DESK_BENCH_02.webp" - } + "assets/images/products/categories/work-station/f25/F25_DESK_01.webp", + "assets/images/products/categories/work-station/f25/F25_DESK_BENCH_01.webp" ], "dimensions": "120cm x 60cm x 75cm", "salesPackage": "1 unit", @@ -3164,7 +3053,6 @@ "price": 1299.99, "inStock": true, "modelNo": "WS045", - "tags": ["Work Station", "Versatile", "Collaborative", "Flexible"], "sizes": ["L", "XL"], "colors": [ { @@ -3204,10 +3092,11 @@ }, "reviewsCount": 24, "galleryPairs": [ - { - "left": "assets/images/products/categories/work-station/evolution/Evo-dual-desk001.jpg", - "right": "assets/images/products/categories/work-station/evolution/evolution-1200-meeting-white-300x300.jpg" - } + "assets/images/products/categories/work-station/evolution/Evo-dual-desk001.jpg", + "assets/images/products/categories/work-station/evolution/evolution-1200-meeting-white-300x300.jpg", + "assets/images/products/categories/work-station/evolution/EVOLUTION-1500-DUAL-BENCH-WHITE-300x225.jpg", + "assets/images/products/categories/work-station/evolution/Evolution-single-desk-and-modesty-WTWT-300x300.jpg", + "assets/images/products/categories/work-station/evolution/Evolution-single-desk-mobile-pedestal-WTWT-300x300.jpg" ], "dimensions": "150cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -3232,7 +3121,6 @@ "price": 1099.99, "inStock": true, "modelNo": "WS046", - "tags": ["Work Station", "Modern", "Contemporary", "Sleek"], "sizes": ["M", "L"], "colors": [ { @@ -3272,10 +3160,9 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/work-station/zama/6_660x300.webp", - "right": "assets/images/products/categories/work-station/zama/10_660x300.webp" - } + "assets/images/products/categories/work-station/zama/6_660x300.webp", + "assets/images/products/categories/work-station/zama/10_660x300.webp", + "assets/images/products/categories/work-station/zama/13.webp" ], "dimensions": "140cm x 70cm x 75cm", "salesPackage": "1 unit", @@ -3300,7 +3187,6 @@ "price": 1899.99, "inStock": true, "modelNo": "WS047", - "tags": ["Work Station", "Collaborative", "Team", "Shared"], "sizes": ["L", "XL"], "colors": [ { @@ -3340,10 +3226,8 @@ }, "reviewsCount": 28, "galleryPairs": [ - { - "left": "assets/images/products/categories/work-station/evolution-dual-desk/EVOLUTION-NEW-DUAL-BENCH-1200X1510X722.jpg", - "right": "assets/images/products/categories/work-station/evolution-dual-desk/EVOLUTION-NEW-DUAL-BENCH-1800X1510X722-300x300.jpg" - } + "assets/images/products/categories/work-station/evolution-dual-desk/Dual-Desk-with-Cut-FG-Top-with-Aluminium-Grey-Steel-500x500.jpg", + "assets/images/products/categories/work-station/evolution-dual-desk/EVOLUTION-NEW-DUAL-BENCH-1200X1510X722-300x300.jpg" ], "dimensions": "180cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -3368,7 +3252,6 @@ "price": 699.99, "inStock": true, "modelNo": "WS048", - "tags": ["Work Station", "Lightweight", "Home Office", "Portable"], "sizes": ["M", "L"], "colors": [ { @@ -3408,10 +3291,8 @@ }, "reviewsCount": 16, "galleryPairs": [ - { - "left": "assets/images/products/categories/work-station/xpress-lite/xpress-lite-3.jpg", - "right": "assets/images/products/categories/work-station/xpress-lite/WFH_Xpress_Lite_01.webp" - } + "assets/images/products/categories/work-station/xpress-lite/xpress-lite-3.jpg", + "assets/images/products/categories/work-station/xpress-lite/WFH_Xpress_Lite_01.webp" ], "dimensions": "120cm x 60cm x 75cm", "salesPackage": "1 unit", @@ -3436,7 +3317,6 @@ "price": 1599.99, "inStock": true, "modelNo": "WS049", - "tags": ["Work Station", "Professional", "Executive", "Premium"], "sizes": ["L", "XL"], "colors": [ { @@ -3476,10 +3356,8 @@ }, "reviewsCount": 32, "galleryPairs": [ - { - "left": "assets/images/products/categories/work-station/v30/v30 (12).webp", - "right": "assets/images/products/categories/work-station/v30/v30 (14).webp" - } + "assets/images/products/categories/work-station/v30/v30.webp", + "assets/images/products/categories/work-station/v30/v30 (12).webp" ], "dimensions": "160cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -3504,7 +3382,6 @@ "price": 1299.99, "inStock": true, "modelNo": "ETC050", - "tags": ["Executive", "Task Chair", "Premium", "Ergonomic"], "sizes": ["M", "L"], "colors": [ { @@ -3544,10 +3421,8 @@ }, "reviewsCount": 26, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-task-chair/3.60/360_MOTION-360_11.webp", - "right": "assets/images/products/categories/executive-task-chair/3.60/360_MOTION-360_02.webp" - } + "assets/images/products/categories/executive-task-chair/3.60/360_MOTION-360_11.webp", + "assets/images/products/categories/executive-task-chair/3.60/360_MOTION-360_02.webp" ], "dimensions": "65cm x 65cm x 120cm", "salesPackage": "1 unit", @@ -3572,7 +3447,6 @@ "price": 1199.99, "inStock": true, "modelNo": "ETC051", - "tags": ["Executive", "Task Chair", "Elegant", "Professional"], "sizes": ["M", "L"], "colors": [ { @@ -3594,8 +3468,7 @@ "images": [ "assets/images/products/categories/executive-task-chair/riya/csm_riya-_01__0ec19d8381.webp", "assets/images/products/categories/executive-task-chair/riya/csm_riya__5__933753b9c2.webp", - "assets/images/products/categories/executive-task-chair/riya/csm_riya__7__3b06473471.webp", - "assets/images/products/categories/executive-task-chair/riya/csm_riya-_01__0ec19d8381.webp" + "assets/images/products/categories/executive-task-chair/riya/csm_riya__7__3b06473471.webp" ], "descriptionLong": [ "Achieve professional excellence with our Riya executive task chair. This elegant piece combines sophisticated design with superior comfort, perfect for professional offices and executive environments.", @@ -3612,10 +3485,8 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-task-chair/riya/csm_riya__5__933753b9c2.webp", - "right": "assets/images/products/categories/executive-task-chair/riya/csm_riya__7__3b06473471.webp" - } + "assets/images/products/categories/executive-task-chair/riya/csm_riya-_01__0ec19d8381.webp", + "assets/images/products/categories/executive-task-chair/riya/csm_riya__5__933753b9c2.webp" ], "dimensions": "65cm x 65cm x 115cm", "salesPackage": "1 unit", @@ -3640,7 +3511,6 @@ "price": 1499.99, "inStock": true, "modelNo": "ETC052", - "tags": ["Executive", "Task Chair", "Luxury", "Premium"], "sizes": ["M", "L"], "colors": [ { @@ -3680,10 +3550,8 @@ }, "reviewsCount": 30, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-task-chair/allure/ALLURE_LOW_CONFERENCE_02.webp", - "right": "assets/images/products/categories/executive-task-chair/allure/ALLURE_01.webp" - } + "assets/images/products/categories/executive-task-chair/allure/ALLURE_LOW_CONFERENCE_02.webp", + "assets/images/products/categories/executive-task-chair/allure/ALLURE_01.webp" ], "dimensions": "70cm x 70cm x 125cm", "salesPackage": "1 unit", @@ -3708,7 +3576,6 @@ "price": 1099.99, "inStock": true, "modelNo": "ETC053", - "tags": ["Executive", "Task Chair", "Professional", "Ergonomic"], "sizes": ["M", "L"], "colors": [ { @@ -3748,10 +3615,10 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/executive-task-chair/accord/Accord-Black-01.jpg", - "right": "assets/images/products/categories/executive-task-chair/accord/Accord-Amber-01.jpg" - } + "assets/images/products/categories/executive-task-chair/accord/Accord-Black-01.jpg", + "assets/images/products/categories/executive-task-chair/accord/Accord-Amber-01.jpg", + "assets/images/products/categories/executive-task-chair/accord/Accord-Black-02.jpg", + "assets/images/products/categories/executive-task-chair/accord/Accord-Black-03.jpg" ], "dimensions": "65cm x 65cm x 120cm", "salesPackage": "1 unit", @@ -3776,7 +3643,6 @@ "price": 199.99, "inStock": true, "modelNo": "CC054", - "tags": ["Canteen Chair", "Dining", "Comfortable", "Modern"], "sizes": ["M", "L"], "colors": [ { @@ -3816,10 +3682,9 @@ }, "reviewsCount": 15, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/glove/GLOVE_4-LEGGED_LACQUERED.webp", - "right": "assets/images/products/categories/canteen-chairs/glove/GLOVE_4-LEGGED_BEECH_WHITE_01.webp" - } + "assets/images/products/categories/canteen-chairs/glove/GLOVE_4-LEGGED_LACQUERED.webp", + "assets/images/products/categories/canteen-chairs/glove/GLOVE_4-LEGGED_BEECH_WHITE_01.webp", + "assets/images/products/categories/canteen-chairs/glove/GLOVE_4-LEGGED_OCHER-01.webp" ], "dimensions": "45cm x 45cm x 80cm", "salesPackage": "1 unit", @@ -3844,7 +3709,6 @@ "price": 249.99, "inStock": true, "modelNo": "CC055", - "tags": ["Canteen Chair", "Premium", "Upscale", "Luxury"], "sizes": ["M", "L"], "colors": [ { @@ -3884,10 +3748,8 @@ }, "reviewsCount": 24, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/kalea/Kalea-4-Legged-Black-TQ-04.jpg", - "right": "assets/images/products/categories/canteen-chairs/kalea/Kalea-4-Legged-Black-BLK-03.jpg" - } + "assets/images/products/categories/canteen-chairs/kalea/Kalea-4-Legged-Black-TQ-04.jpg", + "assets/images/products/categories/canteen-chairs/kalea/Kalea-4-Legged-Black-BLK-03.jpg" ], "dimensions": "50cm x 50cm x 85cm", "salesPackage": "1 unit", @@ -3912,7 +3774,6 @@ "price": 189.99, "inStock": true, "modelNo": "CC056", - "tags": ["Canteen Chair", "Classic", "Traditional", "Timeless"], "sizes": ["M", "L"], "colors": [ { @@ -3952,10 +3813,13 @@ }, "reviewsCount": 18, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/abril/ABRIL_050.jpg", - "right": "assets/images/products/categories/canteen-chairs/abril/ABRIL_001.jpg" - } + "assets/images/products/categories/canteen-chairs/abril/ABRIL_050.jpg", + "assets/images/products/categories/canteen-chairs/abril/ABRIL_001.jpg", + "assets/images/products/categories/canteen-chairs/abril/ABRIL_066.jpg", + "assets/images/products/categories/canteen-chairs/abril/ABRIL_069.jpg", + "assets/images/products/categories/canteen-chairs/abril/ABRIL_070.jpg", + "assets/images/products/categories/canteen-chairs/abril/ABRIL_071.jpg", + "assets/images/products/categories/canteen-chairs/abril/ABRIL_137.jpg" ], "dimensions": "45cm x 45cm x 80cm", "salesPackage": "1 unit", @@ -3980,7 +3844,6 @@ "price": 229.99, "inStock": true, "modelNo": "CC057", - "tags": ["Canteen Chair", "Elegant", "Upscale", "Sophisticated"], "sizes": ["M", "L"], "colors": [ { @@ -4020,10 +3883,8 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/costa/Costa-White-02a.webp", - "right": "assets/images/products/categories/canteen-chairs/costa/Costa_Side_Canteen_00_600x600px.webp" - } + "assets/images/products/categories/canteen-chairs/costa/Costa-White-02a.webp", + "assets/images/products/categories/canteen-chairs/costa/Costa_Side_Canteen_00_600x600px.webp" ], "dimensions": "50cm x 50cm x 85cm", "salesPackage": "1 unit", @@ -4048,7 +3909,6 @@ "price": 209.99, "inStock": true, "modelNo": "CC058", - "tags": ["Canteen Chair", "Vibrant", "Colorful", "Creative"], "sizes": ["M", "L"], "colors": [ { @@ -4088,10 +3948,11 @@ }, "reviewsCount": 16, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/lambda/la_4001_90_red_48014.webp", - "right": "assets/images/products/categories/canteen-chairs/lambda/la_4001_90_green_48017.webp" - } + "assets/images/products/categories/canteen-chairs/lambda/la_4001_90_red_48014.webp", + "assets/images/products/categories/canteen-chairs/lambda/la_4001_90_green_48017.webp", + "assets/images/products/categories/canteen-chairs/lambda/la_4001_90_red_48015.webp", + "assets/images/products/categories/canteen-chairs/lambda/la_4002_90_48064.webp", + "assets/images/products/categories/canteen-chairs/lambda/la_4002_90_48065.webp" ], "dimensions": "45cm x 45cm x 80cm", "salesPackage": "1 unit", @@ -4116,7 +3977,6 @@ "price": 219.99, "inStock": true, "modelNo": "CC059", - "tags": ["Canteen Chair", "Durable", "High-Traffic", "Robust"], "sizes": ["M", "L"], "colors": [ { @@ -4156,10 +4016,9 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/bika/BIKA_045.jpg", - "right": "assets/images/products/categories/canteen-chairs/bika/BIKA_021.jpg" - } + "assets/images/products/categories/canteen-chairs/bika/BIKA_045.jpg", + "assets/images/products/categories/canteen-chairs/bika/BIKA_021.jpg", + "assets/images/products/categories/canteen-chairs/bika/BIKA_048.jpg" ], "dimensions": "50cm x 50cm x 85cm", "salesPackage": "1 unit", @@ -4184,7 +4043,6 @@ "price": 279.99, "inStock": true, "modelNo": "CC060", - "tags": ["Canteen Chair", "Premium", "Luxury", "High-End"], "sizes": ["M", "L"], "colors": [ { @@ -4224,10 +4082,8 @@ }, "reviewsCount": 25, "galleryPairs": [ - { - "left": "assets/images/products/categories/canteen-chairs/riva/Riva-Moss-02.jpg", - "right": "assets/images/products/categories/canteen-chairs/riva/Riva-White-02.webp" - } + "assets/images/products/categories/canteen-chairs/riva/Riva-Anthracite-02.webp", + "assets/images/products/categories/canteen-chairs/riva/Riva-Ice-Blue-02.webp" ], "dimensions": "50cm x 50cm x 85cm", "salesPackage": "1 unit", @@ -4252,7 +4108,6 @@ "price": 399.99, "inStock": true, "modelNo": "ST061", - "tags": ["Storage", "Lockers", "Security", "Organization"], "sizes": ["M", "L"], "colors": [ { @@ -4292,10 +4147,15 @@ }, "reviewsCount": 18, "galleryPairs": [ - { - "left": "assets/images/products/categories/storage/lockers/CAMPUS_04.webp", - "right": "assets/images/products/categories/storage/lockers/backdrop-locker-SYS163017-001-001.jpg" - } + "assets/images/products/categories/storage/lockers/CAMPUS_04.webp", + "assets/images/products/categories/storage/lockers/backdrop-locker-SYS163017-001-001.jpg", + "assets/images/products/categories/storage/lockers/CAMPUS_05.webp", + "assets/images/products/categories/storage/lockers/COVER.jpg", + "assets/images/products/categories/storage/lockers/image001.png", + "assets/images/products/categories/storage/lockers/Locker-6-DoorFrame-1280-WT-300x300 (1).png", + "assets/images/products/categories/storage/lockers/Locker-6-DoorFrame-1280-WT-300x300.png", + "assets/images/products/categories/storage/lockers/Locker-6-DoorFrame-912-WT.png", + "assets/images/products/categories/storage/lockers/SYS163017-001-1-300x300.jpg" ], "dimensions": "60cm x 40cm x 180cm", "salesPackage": "1 unit", @@ -4320,7 +4180,6 @@ "price": 299.99, "inStock": true, "modelNo": "ST062", - "tags": ["Storage", "Melamine", "Durable", "Modern"], "sizes": ["M", "L"], "colors": [ { @@ -4360,10 +4219,10 @@ }, "reviewsCount": 15, "galleryPairs": [ - { - "left": "assets/images/products/categories/storage/melamine-storage/30.webp", - "right": "assets/images/products/categories/storage/melamine-storage/1.webp" - } + "assets/images/products/categories/storage/melamine-storage/30.webp", + "assets/images/products/categories/storage/melamine-storage/1.webp", + "assets/images/products/categories/storage/melamine-storage/25.webp", + "assets/images/products/categories/storage/melamine-storage/26.webp" ], "dimensions": "80cm x 40cm x 120cm", "salesPackage": "1 unit", @@ -4388,7 +4247,6 @@ "price": 449.99, "inStock": true, "modelNo": "ST063", - "tags": ["Storage", "Metal", "Robust", "Industrial"], "sizes": ["M", "L"], "colors": [ { @@ -4428,10 +4286,8 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/storage/metal-storage/Storage-Metal-Lockers_Gallery_07_600x600px.webp", - "right": "assets/images/products/categories/storage/metal-storage/COVER.jpg" - } + "assets/images/products/categories/storage/metal-storage/Storage-Metal-Lockers_Gallery_07_600x600px.webp", + "assets/images/products/categories/storage/metal-storage/COVER.jpg" ], "dimensions": "70cm x 50cm x 200cm", "salesPackage": "1 unit", @@ -4456,7 +4312,6 @@ "price": 199.99, "inStock": true, "modelNo": "TC064", - "tags": ["Training Chair", "Comfortable", "Educational", "Ergonomic"], "sizes": ["M", "L"], "colors": [ { @@ -4496,10 +4351,10 @@ }, "reviewsCount": 16, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-chairs/la-mia/Seating_La-Mia_Gallery_09_600x600px.jpg", - "right": "assets/images/products/categories/training-chairs/la-mia/LaMia-Visitors.jpg" - } + "assets/images/products/categories/training-chairs/la-mia/Seating_La-Mia_Gallery_09_600x600px.jpg", + "assets/images/products/categories/training-chairs/la-mia/LaMia-Visitors.jpg", + "assets/images/products/categories/training-chairs/la-mia/Seating_La-Mia_Gallery_12_600x600px.jpg", + "assets/images/products/categories/training-chairs/la-mia/Seating_La-Mia_Gallery_17_600x600px.webp" ], "dimensions": "50cm x 50cm x 90cm", "salesPackage": "1 unit", @@ -4524,7 +4379,6 @@ "price": 219.99, "inStock": true, "modelNo": "TC065", - "tags": ["Training Chair", "Dynamic", "Active Learning", "Responsive"], "sizes": ["M", "L"], "colors": [ { @@ -4564,10 +4418,8 @@ }, "reviewsCount": 19, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-chairs/la-kendo/LA-KENDO-SIDE-6.jpg", - "right": "assets/images/products/categories/training-chairs/la-kendo/LA-KENDO-SIDE-2.jpg" - } + "assets/images/products/categories/training-chairs/la-kendo/LA-KENDO-SIDE-6.jpg", + "assets/images/products/categories/training-chairs/la-kendo/LA-KENDO-SIDE-2.jpg" ], "dimensions": "52cm x 52cm x 92cm", "salesPackage": "1 unit", @@ -4592,7 +4444,6 @@ "price": 249.99, "inStock": true, "modelNo": "TC066", - "tags": ["Training Chair", "Iconic", "Professional", "Premium"], "sizes": ["M", "L"], "colors": [ { @@ -4632,10 +4483,10 @@ }, "reviewsCount": 23, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-chairs/icon/ICON-7.jpg", - "right": "assets/images/products/categories/training-chairs/icon/ICON-1.jpg" - } + "assets/images/products/categories/training-chairs/icon/ICON-7.jpg", + "assets/images/products/categories/training-chairs/icon/ICON-1.jpg", + "assets/images/products/categories/training-chairs/icon/Icon-Setting-03.jpg", + "assets/images/products/categories/training-chairs/icon/Seating_Icon_Gallery_06_600x600px.jpg" ], "dimensions": "55cm x 55cm x 95cm", "salesPackage": "1 unit", @@ -4660,7 +4511,6 @@ "price": 189.99, "inStock": true, "modelNo": "TC067", - "tags": ["Training Chair", "Vibrant", "Creative", "Dynamic"], "sizes": ["M", "L"], "colors": [ { @@ -4705,10 +4555,8 @@ }, "reviewsCount": 14, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-chairs/arete/Arete-Grey-04.jpg", - "right": "assets/images/products/categories/training-chairs/arete/Arete-Blue-02.jpg" - } + "assets/images/products/categories/training-chairs/arete/Arete-Grey-04.jpg", + "assets/images/products/categories/training-chairs/arete/Arete-Blue-02.jpg" ], "dimensions": "48cm x 48cm x 88cm", "salesPackage": "1 unit", @@ -4733,7 +4581,6 @@ "price": 229.99, "inStock": true, "modelNo": "TC068", - "tags": ["Training Chair", "Flexible", "Adaptable", "Responsive"], "sizes": ["M", "L"], "colors": [ { @@ -4773,10 +4620,8 @@ }, "reviewsCount": 17, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-chairs/free-rein/Seating_Free-Rein_Gallery_03_600x600px.jpg", - "right": "assets/images/products/categories/training-chairs/free-rein/FREE-REIN-1.jpg" - } + "assets/images/products/categories/training-chairs/free-rein/Seating_Free-Rein_Gallery_03_600x600px.jpg", + "assets/images/products/categories/training-chairs/free-rein/FREE-REIN-1.jpg" ], "dimensions": "51cm x 51cm x 91cm", "salesPackage": "1 unit", @@ -4801,7 +4646,6 @@ "price": 279.99, "inStock": true, "modelNo": "TC069", - "tags": ["Training Chair", "Versatile", "Integrated Table", "All-in-One"], "sizes": ["M", "L"], "colors": [ { @@ -4839,10 +4683,8 @@ }, "reviewsCount": 21, "galleryPairs": [ - { - "left": "assets/images/products/categories/training-chairs/glove-plus-table/GLOVE_4-LEGGED_TERRA_PAD-02.webp", - "right": "assets/images/products/categories/training-chairs/glove-plus-table/GLOVE_4-LEGGED_TERRA_PAD-01.webp" - } + "assets/images/products/categories/training-chairs/glove-plus-table/GLOVE_4-LEGGED_TERRA_PAD-01.webp", + "assets/images/products/categories/training-chairs/glove-plus-table/GLOVE_4-LEGGED_TERRA_PAD-02.webp" ], "dimensions": "60cm x 60cm x 100cm", "salesPackage": "1 unit", @@ -4867,7 +4709,6 @@ "price": 329.99, "inStock": true, "modelNo": "TC070", - "tags": ["Task Chair", "Elegant", "Professional", "Sophisticated"], "sizes": ["M", "L"], "colors": [ { @@ -4907,10 +4748,12 @@ }, "reviewsCount": 28, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/chic/Chic_Grey_Gallery_09_600x600px.jpg", - "right": "assets/images/products/categories/task-chairs/chic/Chic_Black_Gallery_01_600x600px.webp" - } + "assets/images/products/categories/task-chairs/chic/Chic_Grey_Gallery_09_600x600px.jpg", + "assets/images/products/categories/task-chairs/chic/Chic_Black_Gallery_01_600x600px.webp", + "assets/images/products/categories/task-chairs/chic/Chic-Black-Simple-02.jpg", + "assets/images/products/categories/task-chairs/chic/Chic-Light-Grey-01-768x770.jpg", + "assets/images/products/categories/task-chairs/chic/Chic-Light-Grey-03-768x768.jpg", + "assets/images/products/categories/task-chairs/chic/Chic-Light-Grey-04-768x768.jpg" ], "dimensions": "60cm x 60cm x 120cm", "salesPackage": "1 unit", @@ -4935,7 +4778,6 @@ "price": 299.99, "inStock": true, "modelNo": "TC071", - "tags": ["Task Chair", "Advanced", "Modern", "Innovative"], "sizes": ["M", "L"], "colors": [ { @@ -4975,10 +4817,11 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_ATOM_09.webp", - "right": "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_ATOM_02.webp" - } + "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_ATOM_09.webp", + "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_ATOM_02.webp", + "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_ATOM_10.webp", + "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_HEADREST.webp", + "assets/images/products/categories/task-chairs/dot-pro/DOT-PRO_MOTION_01.webp" ], "dimensions": "58cm x 58cm x 115cm", "salesPackage": "1 unit", @@ -5003,7 +4846,6 @@ "price": 259.99, "inStock": true, "modelNo": "TC072", - "tags": ["Task Chair", "Adaptable", "Dynamic", "Responsive"], "sizes": ["M", "L"], "colors": [ { @@ -5043,10 +4885,11 @@ }, "reviewsCount": 19, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/flexi/FX_1104_087_22_43704.webp", - "right": "assets/images/products/categories/task-chairs/flexi/fx_1103a_42762.webp" - } + "assets/images/products/categories/task-chairs/flexi/FX_1104_087_22_43704.webp", + "assets/images/products/categories/task-chairs/flexi/fx_1103a_42762.webp", + "assets/images/products/categories/task-chairs/flexi/FX_1104_087_43688.webp", + "assets/images/products/categories/task-chairs/flexi/FX_1104_087_43691.webp", + "assets/images/products/categories/task-chairs/flexi/FX_1104_087_43694.webp" ], "dimensions": "56cm x 56cm x 110cm", "salesPackage": "1 unit", @@ -5071,7 +4914,6 @@ "price": 379.99, "inStock": true, "modelNo": "TC073", - "tags": ["Task Chair", "Premium", "Executive", "Superior"], "sizes": ["M", "L"], "colors": [ { @@ -5111,10 +4953,10 @@ }, "reviewsCount": 31, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/victory/VI_1411_41480.webp", - "right": "assets/images/products/categories/task-chairs/victory/VI_1401_41501.webp" - } + "assets/images/products/categories/task-chairs/victory/VI_1411_41480.webp", + "assets/images/products/categories/task-chairs/victory/VI_1401_41501.webp", + "assets/images/products/categories/task-chairs/victory/VI_1411_41481.webp", + "assets/images/products/categories/task-chairs/victory/VI_1411_47941.webp" ], "dimensions": "62cm x 62cm x 125cm", "salesPackage": "1 unit", @@ -5139,7 +4981,6 @@ "price": 279.99, "inStock": true, "modelNo": "TC074", - "tags": ["Task Chair", "Connected", "Collaborative", "Ergonomic"], "sizes": ["M", "L"], "colors": [ { @@ -5179,10 +5020,9 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/link/LINK-BACK.jpg", - "right": "assets/images/products/categories/task-chairs/link/Link-01.jpg" - } + "assets/images/products/categories/task-chairs/link/LINK-BACK.jpg", + "assets/images/products/categories/task-chairs/link/Link-01.jpg", + "assets/images/products/categories/task-chairs/link/LINK-DETAIL-3.jpg" ], "dimensions": "57cm x 57cm x 112cm", "salesPackage": "1 unit", @@ -5207,7 +5047,6 @@ "price": 249.99, "inStock": true, "modelNo": "TC075", - "tags": ["Task Chair", "Spacious", "Comfortable", "Generous"], "sizes": ["M", "L"], "colors": [ { @@ -5247,10 +5086,12 @@ }, "reviewsCount": 17, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/space/sp_1522_093_44611_.webp", - "right": "assets/images/products/categories/task-chairs/space/SP_1501_52751.webp" - } + "assets/images/products/categories/task-chairs/space/sp_1522_093_44611_.webp", + "assets/images/products/categories/task-chairs/space/SP_1501_52751.webp", + "assets/images/products/categories/task-chairs/space/sp_1522_093_44618_.webp", + "assets/images/products/categories/task-chairs/space/sp_1523_3d_knit_47876_2.webp", + "assets/images/products/categories/task-chairs/space/sp_1523_3d_knit_48219.webp", + "assets/images/products/categories/task-chairs/space/Zidle_SP_1502_022_46494.webp" ], "dimensions": "59cm x 59cm x 108cm", "salesPackage": "1 unit", @@ -5275,7 +5116,6 @@ "price": 219.99, "inStock": true, "modelNo": "TC076", - "tags": ["Task Chair", "Reliable", "Durable", "Dependable"], "sizes": ["M", "L"], "colors": [ { @@ -5315,10 +5155,9 @@ }, "reviewsCount": 15, "galleryPairs": [ - { - "left": "assets/images/products/categories/task-chairs/dhl/DHL-HB-03.jpg", - "right": "assets/images/products/categories/task-chairs/dhl/DHL-02.jpg" - } + "assets/images/products/categories/task-chairs/dhl/DHL-HB-03.jpg", + "assets/images/products/categories/task-chairs/dhl/DHL-02.jpg", + "assets/images/products/categories/task-chairs/dhl/DHL-HB-04.jpg" ], "dimensions": "55cm x 55cm x 105cm", "salesPackage": "1 unit", @@ -5343,7 +5182,6 @@ "price": 899.99, "inStock": true, "modelNo": "MT077", - "tags": ["Meeting Table", "Robust", "Professional", "Durable"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -5382,10 +5220,8 @@ }, "reviewsCount": 24, "galleryPairs": [ - { - "left": "assets/images/products/categories/meeting-tables/evolution-steel/pele-green-july-2015-003-300x263 (1).png", - "right": "assets/images/products/categories/meeting-tables/evolution-steel/evolution-1200-meeting-white-300x300 (1).jpg" - } + "assets/images/products/categories/meeting-tables/evolution-steel/evolution-1200-meeting-white-300x300 (1).jpg", + "assets/images/products/categories/meeting-tables/evolution-steel/pele-green-july-2015-003-300x263 (1).png" ], "dimensions": "120cm x 80cm x 75cm", "salesPackage": "1 unit", @@ -5410,7 +5246,6 @@ "price": 799.99, "inStock": true, "modelNo": "MT078", - "tags": ["Meeting Table", "Versatile", "Flexible", "Modular"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -5450,10 +5285,8 @@ }, "reviewsCount": 21, "galleryPairs": [ - { - "left": "assets/images/products/categories/meeting-tables/snap-conference/SNAP-desks-floor-Plan-350x350.jpg", - "right": "assets/images/products/categories/meeting-tables/snap-conference/entrawood-catalogue-02-350x350.jpg" - } + "assets/images/products/categories/meeting-tables/snap-conference/SNAP-desks-floor-Plan-350x350.jpg", + "assets/images/products/categories/meeting-tables/snap-conference/entrawood-catalogue-02-350x350.jpg" ], "dimensions": "150cm x 90cm x 75cm", "salesPackage": "1 unit", @@ -5478,7 +5311,6 @@ "price": 699.99, "inStock": true, "modelNo": "MT079", - "tags": ["Meeting Table", "Dynamic", "Creative", "Unique"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -5517,10 +5349,8 @@ }, "reviewsCount": 18, "galleryPairs": [ - { - "left": "assets/images/products/categories/meeting-tables/criss-cross/entrawood-showroom-march22-2-of-4-350x350.jpg", - "right": "assets/images/products/categories/meeting-tables/criss-cross/771358111_SHELL-DOLOS-STEEL-FRAME-ONLY-852X852X711-600x600.jpg" - } + "assets/images/products/categories/meeting-tables/criss-cross/771358111_SHELL-DOLOS-STEEL-FRAME-ONLY-852X852X711-600x600.jpg", + "assets/images/products/categories/meeting-tables/criss-cross/entrawood-showroom-march22-2-of-4-350x350.jpg" ], "dimensions": "140cm x 85cm x 75cm", "salesPackage": "1 unit", @@ -5545,7 +5375,6 @@ "price": 999.99, "inStock": true, "modelNo": "MT080", - "tags": ["Meeting Table", "Modern", "Contemporary", "Sleek"], "sizes": ["M", "L", "XL"], "colors": [ { @@ -5585,10 +5414,8 @@ }, "reviewsCount": 26, "galleryPairs": [ - { - "left": "assets/images/products/categories/meeting-tables/drone/FDR27.webp", - "right": "assets/images/products/categories/meeting-tables/drone/DRONE_CENITAL.webp" - } + "assets/images/products/categories/meeting-tables/drone/FDR27.webp", + "assets/images/products/categories/meeting-tables/drone/DRONE_CENITAL.webp" ], "dimensions": "160cm x 100cm x 75cm", "salesPackage": "1 unit", @@ -5613,7 +5440,6 @@ "price": 199.99, "inStock": true, "modelNo": "OT081", - "tags": ["Occasional Table", "Laptop", "Versatile", "Adjustable"], "sizes": ["M", "L"], "colors": [ { @@ -5653,10 +5479,8 @@ }, "reviewsCount": 16, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/baron-laptop/Thumbnail_Desks-Tables_Occasional_Tables_Baron_Laptop_Tables_Categories_Gallery_01_600x600px.webp", - "right": "assets/images/products/categories/occasional-tables/baron-laptop/Thumbnail_Desks-Tables_Occasional_Tables_Baron_Laptop_Tables_Categories_Gallery_00_600x600px.webp" - } + "assets/images/products/categories/occasional-tables/baron-laptop/Thumbnail_Desks-Tables_Occasional_Tables_Baron_Laptop_Tables_Categories_Gallery_00_600x600px.webp", + "assets/images/products/categories/occasional-tables/baron-laptop/Thumbnail_Desks-Tables_Occasional_Tables_Baron_Laptop_Tables_Categories_Gallery_01_600x600px.webp" ], "dimensions": "60cm x 40cm x 70cm", "salesPackage": "1 unit", @@ -5681,7 +5505,6 @@ "price": 299.99, "inStock": true, "modelNo": "OT082", - "tags": ["Occasional Table", "Coffee Table", "Stylish", "Contemporary"], "sizes": ["M", "L"], "colors": [ { @@ -5721,10 +5544,8 @@ }, "reviewsCount": 19, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/happy-hour/Thumbnail_Desks-Tables_Occasional_Tables_Happy-Hour_Tables_Categories_Gallery_03_600x600px.webp", - "right": "assets/images/products/categories/occasional-tables/happy-hour/HAPPY-HOUR-COFFEE-TABLES.jpg" - } + "assets/images/products/categories/occasional-tables/happy-hour/Thumbnail_Desks-Tables_Occasional_Tables_Happy-Hour_Tables_Categories_Gallery_03_600x600px.webp", + "assets/images/products/categories/occasional-tables/happy-hour/HAPPY-HOUR-COFFEE-TABLES.jpg" ], "dimensions": "80cm x 50cm x 45cm", "salesPackage": "1 unit", @@ -5749,7 +5570,6 @@ "price": 399.99, "inStock": true, "modelNo": "OT083", - "tags": ["Occasional Table", "Salon", "Elegant", "Technology"], "sizes": ["M", "L"], "colors": [ { @@ -5788,10 +5608,8 @@ }, "reviewsCount": 22, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/salon-tablet/cocoon-booth03-300x300.png", - "right": "assets/images/products/categories/occasional-tables/salon-tablet/Cocoon-2SEAT-COUCH01-300x300.png" - } + "assets/images/products/categories/occasional-tables/salon-tablet/Cocoon-2SEAT-COUCH01-300x300.png", + "assets/images/products/categories/occasional-tables/salon-tablet/cocoon-booth03-300x300.png" ], "dimensions": "45cm x 30cm x 72cm", "salesPackage": "1 unit", @@ -5816,7 +5634,6 @@ "price": 249.99, "inStock": true, "modelNo": "OT084", - "tags": ["Occasional Table", "Unique", "Spherical", "Artistic"], "sizes": ["M", "L"], "colors": [ { @@ -5853,10 +5670,8 @@ }, "reviewsCount": 14, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/sphere/Sphere.jpg", - "right": "assets/images/products/categories/occasional-tables/sphere/Sphere.jpg" - } + "assets/images/products/categories/occasional-tables/sphere/Sphere.jpg", + "assets/images/products/categories/occasional-tables/sphere/Sphere.jpg" ], "dimensions": "50cm x 50cm x 50cm", "salesPackage": "1 unit", @@ -5881,7 +5696,6 @@ "price": 229.99, "inStock": true, "modelNo": "OT085", - "tags": ["Occasional Table", "Oblong", "Sleek", "Contemporary"], "sizes": ["M", "L"], "colors": [ { @@ -5920,10 +5734,8 @@ }, "reviewsCount": 17, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/baron-oblong/Coffee_Tables_Baron_Baroness_Pepe_02.webp", - "right": "assets/images/products/categories/occasional-tables/baron-oblong/baron-oblong-1.webp" - } + "assets/images/products/categories/occasional-tables/baron-oblong/baron-oblong-1.webp", + "assets/images/products/categories/occasional-tables/baron-oblong/Coffee_Tables_Baron_Baroness_Pepe_02.webp" ], "dimensions": "100cm x 40cm x 45cm", "salesPackage": "1 unit", @@ -5948,7 +5760,6 @@ "price": 349.99, "inStock": true, "modelNo": "OT086", - "tags": ["Occasional Table", "Elegant", "Sophisticated", "Premium"], "sizes": ["M", "L"], "colors": [ { @@ -5988,10 +5799,10 @@ }, "reviewsCount": 25, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/nota/NOTA_017.jpg", - "right": "assets/images/products/categories/occasional-tables/nota/NOTA_005.jpg" - } + "assets/images/products/categories/occasional-tables/nota/NOTA_017.jpg", + "assets/images/products/categories/occasional-tables/nota/NOTA_005.jpg", + "assets/images/products/categories/occasional-tables/nota/NOTA_008.jpg", + "assets/images/products/categories/occasional-tables/nota/NOTA_009.jpg" ], "dimensions": "70cm x 50cm x 50cm", "salesPackage": "1 unit", @@ -6016,12 +5827,6 @@ "price": 279.99, "inStock": true, "modelNo": "OT087", - "tags": [ - "Occasional Table", - "Versatile", - "Multi-functional", - "Contemporary" - ], "sizes": ["M", "L"], "colors": [ { @@ -6060,10 +5865,8 @@ }, "reviewsCount": 20, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/selena/SELENA-SIDE-TABLE.webp", - "right": "assets/images/products/categories/occasional-tables/selena/SELENA-COFFEE-TABLE.webp" - } + "assets/images/products/categories/occasional-tables/selena/SELENA-COFFEE-TABLE.webp", + "assets/images/products/categories/occasional-tables/selena/SELENA-SIDE-TABLE.webp" ], "dimensions": "60cm x 40cm x 50cm", "salesPackage": "1 unit", @@ -6088,7 +5891,6 @@ "price": 159.99, "inStock": true, "modelNo": "OT088", - "tags": ["Occasional Table", "Tray", "Functional", "Practical"], "sizes": ["M", "L"], "colors": [ { @@ -6127,10 +5929,8 @@ }, "reviewsCount": 12, "galleryPairs": [ - { - "left": "assets/images/products/categories/occasional-tables/tray/TRAY-COFFEE-TABLE-SCENE.jpg", - "right": "assets/images/products/categories/occasional-tables/tray/TRAY-2.jpg" - } + "assets/images/products/categories/occasional-tables/tray/TRAY-2.jpg", + "assets/images/products/categories/occasional-tables/tray/TRAY-COFFEE-TABLE-SCENE.jpg" ], "dimensions": "50cm x 35cm x 40cm", "salesPackage": "1 unit", diff --git a/product-catalog.html b/product-catalog.html index e8c9974..c8e9091 100644 --- a/product-catalog.html +++ b/product-catalog.html @@ -164,7 +164,7 @@
Product catalog background -
- Outdoor sofa set -
-
- Outdoor sofa set 2 -
-
- Stuart sofa -
-
- Maya sofa three seater -
+
- Asgaard sofa +
-

- Asgaard sofa +

+

- Setting the bar as one of the loudest speakers in its class, the - Kilburn is a compact, stout-hearted hero with a well-balanced - audio which boasts a clear midrange and extended highs for a - sound. +

@@ -269,36 +231,7 @@ Size
- - - - - - +
@@ -309,42 +242,13 @@ > Color -
- - - +
+
- -
- - 1 - -
-
-
- Model No. - : - SS001 -
-
- Category - : - Sofas -
-
- Tags - : - Sofa, Chair, Home, Shop -
-
- Dimension - : - 180cm x 85cm x 75cm -
+
@@ -439,45 +288,61 @@ -
-

- Embodying the raw, wayward spirit of rock ā€˜n’ roll, the Kilburn - portable active stereo speaker takes the unmistakable look and - sound of Marshall, unplugs the chords, and takes the show on the - road. -

-

- Weighing in under 7 pounds, the Kilburn is a lightweight piece of - vintage styled engineering. Setting the bar as one of the loudest - speakers in its class, the Kilburn is a compact, stout-hearted - hero with a well-balanced audio which boasts a clear midrange and - extended highs for a sound that is both articulate and pronounced. - The analogue knobs allow you to fine tune the controls to your - personal preferences while the guitar-influenced leather strap - enables easy and stylish travel. -

+
+
-
-
- Sofa variant left -
-
- Sofa variant right +
+ + + + +
@@ -648,6 +513,45 @@
+ + + diff --git a/scripts/main.js b/scripts/main.js index e8236a3..d296e54 100644 --- a/scripts/main.js +++ b/scripts/main.js @@ -55,27 +55,6 @@ function initSite() { window.addEventListener("scroll", updateActiveLink); updateActiveLink(); - // Quantity controls on product detail page - (function initQuantityControls() { - const decr = document.getElementById("qty-decr"); - const incr = document.getElementById("qty-incr"); - const valueEl = document.getElementById("qty-value"); - if (!decr || !incr || !valueEl) return; // Not on product detail page - - function parseQty() { - const n = parseInt(valueEl.textContent || "1", 10); - return Number.isFinite(n) && n > 0 ? n : 1; - } - decr.addEventListener("click", () => { - const next = Math.max(1, parseQty() - 1); - valueEl.textContent = String(next); - }); - incr.addEventListener("click", () => { - const next = parseQty() + 1; - valueEl.textContent = String(next); - }); - })(); - // Related products (dynamic) (async function initRelated() { const grid = document.getElementById("related-grid"); @@ -222,342 +201,530 @@ function initSite() { }); }); } +} - // Product detail page functionality - (async function initProductDetail() { - console.log("Product detail script running..."); +// Image enlargement modal functionality (global) +function addImageEnlargementListeners() { + // Target both main product image AND gallery carousel images + const mainProductImage = document.querySelector( + ".w-full.h-80.md\\:w-\\[500px\\].md\\:h-\\[500px\\] img[data-enlarge-src]" + ); + const galleryImages = document.querySelectorAll( + "#product-gallery-images img[data-enlarge-src]" + ); + const modal = document.getElementById("image-modal"); + const modalImage = document.getElementById("modal-image"); + const modalCloseBtn = document.getElementById("modal-close-btn"); - // Check if we're on the product detail page - const productTitle = document.querySelector("h1"); - if (!productTitle) { - console.log("No h1 found, not on product detail page"); + console.log("Adding image enlargement listeners..."); + console.log("Found main product image:", !!mainProductImage); + console.log("Found gallery images:", galleryImages.length); + console.log("Modal elements:", { + modal: !!modal, + modalImage: !!modalImage, + modalCloseBtn: !!modalCloseBtn, + }); + + if (!modal || !modalImage || !modalCloseBtn) { + console.log("Modal elements not found, skipping image enlargement setup"); + return; + } + + // Add click listener to main product image + if (mainProductImage) { + console.log( + `Adding click listener to main product image:`, + mainProductImage.src + ); + mainProductImage.removeEventListener("click", handleImageClick); + mainProductImage.addEventListener("click", handleImageClick); + } else { + console.log("Main product image not found"); + } + + // Add click listeners to gallery carousel images + galleryImages.forEach((img, index) => { + console.log( + `Adding click listener to gallery image ${index + 1}:`, + img.src + ); + img.removeEventListener("click", handleImageClick); + img.addEventListener("click", handleImageClick); + }); + + function handleImageClick(e) { + console.log("Image clicked!", this.src); + const imageSrc = this.getAttribute("data-enlarge-src"); + const imageAlt = this.getAttribute("alt"); + + console.log("Opening modal with image:", imageSrc); + modalImage.src = imageSrc; + modalImage.alt = imageAlt; + + // Show modal with animation + modal.classList.remove("hidden"); + document.body.style.overflow = "hidden"; // Prevent background scrolling + + // Trigger animation after a brief delay + setTimeout(() => { + modalImage.classList.remove("scale-95"); + modalImage.classList.add("scale-100"); + }, 10); + } + + // Close modal functionality + function closeModal() { + // Animate out + modalImage.classList.remove("scale-100"); + modalImage.classList.add("scale-95"); + + // Hide modal after animation + setTimeout(() => { + modal.classList.add("hidden"); + document.body.style.overflow = ""; // Restore scrolling + }, 300); + } + + modalCloseBtn.addEventListener("click", closeModal); + + // Close modal when clicking outside the image + modal.addEventListener("click", function (e) { + if (e.target === modal) { + closeModal(); + } + }); + + // Close modal with Escape key + document.addEventListener("keydown", function (e) { + if (e.key === "Escape" && !modal.classList.contains("hidden")) { + closeModal(); + } + }); +} + +// Thumbnail click functionality (global) +function addThumbnailClickListeners() { + const thumbnails = document.querySelectorAll("[data-thumbnail-src]"); + const mainImageContainer = document.querySelector( + ".w-full.h-80.md\\:w-\\[500px\\].md\\:h-\\[500px\\]" + ); + + console.log("Adding thumbnail click listeners..."); + console.log("Found thumbnails:", thumbnails.length); + console.log("Main image container:", !!mainImageContainer); + + if (!mainImageContainer) { + console.log("Main image container not found"); + return; + } + + thumbnails.forEach((thumbnail, index) => { + thumbnail.addEventListener("click", function () { + const imageSrc = this.getAttribute("data-thumbnail-src"); + console.log(`Thumbnail ${index + 1} clicked, switching to:`, imageSrc); + + // Update the main product image + const mainImg = mainImageContainer.querySelector("img"); + if (mainImg) { + mainImg.src = imageSrc; + mainImg.setAttribute("data-enlarge-src", imageSrc); + console.log("Main image updated to:", imageSrc); + } + }); + }); +} + +// Product detail page functionality +async function initProductDetail() { + console.log("Product detail script running..."); + console.log("Current URL:", window.location.href); + + // Check if we're on the product detail page + const productTitle = document.querySelector("h1"); + if (!productTitle) { + console.log("No h1 found, not on product detail page"); + return; + } + console.log("Found h1 element:", productTitle); + + // Get product ID from URL + const urlParams = new URLSearchParams(window.location.search); + const productId = parseInt(urlParams.get("id")); + console.log("Product ID from URL:", productId); + + if (!productId) { + console.log("No product ID found in URL"); + return; + } + + try { + // Load product data + const response = await fetch("data/products.json"); + const data = await response.json(); + const product = data.products.find((p) => p.id === productId); + + if (!product) { + console.error("Product not found:", productId); return; } - // Get product ID from URL - const urlParams = new URLSearchParams(window.location.search); - const productId = parseInt(urlParams.get("id")); - console.log("Product ID from URL:", productId); + console.log("Loading product:", product); - if (!productId) { - console.log("No product ID found in URL"); - return; + // Update page title + document.title = `${product.name} - KHY`; + + // Update the "Product Details" title with the actual product name + const productDetailsTitle = document.getElementById( + "product-details-title" + ); + if (productDetailsTitle) { + productDetailsTitle.textContent = product.name; } - try { - // Load product data - const response = await fetch("data/products.json"); - const data = await response.json(); - const product = data.products.find((p) => p.id === productId); + // Update product title (the main product title, not the breadcrumb) + const productTitle = document.getElementById("product-title"); + console.log("Product title element:", productTitle); + if (productTitle) { + productTitle.textContent = product.name; + console.log("Updated product title to:", product.name); + } - if (!product) { - console.error("Product not found:", productId); + // Update product description + const productDescription = document.getElementById("product-description"); + console.log("Product description element:", productDescription); + if (productDescription) { + productDescription.textContent = product.description; + console.log("Updated product description to:", product.description); + } + + // Update main product image + const mainImageContainer = document.querySelector( + ".w-full.h-80.md\\:w-\\[500px\\].md\\:h-\\[500px\\]" + ); + console.log("Main image container:", mainImageContainer); + if (mainImageContainer) { + mainImageContainer.innerHTML = ` + ${product.alt || product.name} + `; + console.log("Updated main image to:", product.image); + + // Add image enlargement functionality to the main product image + setTimeout(() => { + addImageEnlargementListeners(); + }, 100); + } + + // Update thumbnail images + const thumbnailContainer = document.querySelector( + ".flex.flex-row.md\\:flex-col.gap-3.md\\:gap-4" + ); + console.log("Thumbnail container:", thumbnailContainer); + if (thumbnailContainer && product.images) { + thumbnailContainer.innerHTML = product.images + .slice(0, 4) + .map( + (img, index) => ` +
+ ${product.name} ${index + 1} +
+ ` + ) + .join(""); + console.log("Updated thumbnails with", product.images.length, "images"); + + // Add click event listeners to thumbnails + addThumbnailClickListeners(); + } + + // Update size options + const sizeContainer = document.getElementById("size-buttons-container"); + console.log("Size container:", sizeContainer); + if (sizeContainer && product.sizes) { + sizeContainer.innerHTML = product.sizes + .map( + (size, index) => ` + + ` + ) + .join(""); + console.log("Updated size options with", product.sizes.length, "sizes"); + } + + // Update color options + const colorContainer = document.getElementById("color-buttons-container"); + console.log("Color container:", colorContainer); + if (colorContainer && product.colors) { + colorContainer.innerHTML = product.colors + .map( + (color, index) => ` + + ` + ) + .join(""); + console.log( + "Updated color options with", + product.colors.length, + "colors" + ); + } + + // Update product metadata - find by text content + const allSpans = document.querySelectorAll("span"); + + // Find and update Model No. + const modelNoLabel = Array.from(allSpans).find( + (span) => span.textContent === "Model No." + ); + if (modelNoLabel && product.modelNo) { + const modelNoValue = + modelNoLabel.parentElement.querySelector("span:last-child"); + if (modelNoValue) { + modelNoValue.textContent = product.modelNo; + } + } + + // Find and update Category + const categoryLabel = Array.from(allSpans).find( + (span) => span.textContent === "Category" + ); + if (categoryLabel && product.category) { + const categoryValue = + categoryLabel.parentElement.querySelector("span:last-child"); + if (categoryValue) { + categoryValue.textContent = + product.category.charAt(0).toUpperCase() + product.category.slice(1); + } + } + + // Find and update Dimensions + const dimensionsLabel = Array.from(allSpans).find( + (span) => span.textContent === "Dimension" + ); + console.log("Dimensions label found:", dimensionsLabel); + console.log("Product dimensions:", product.dimensions); + + if (dimensionsLabel && product.dimensions) { + const dimensionsValue = + dimensionsLabel.parentElement.querySelector("span:last-child"); + console.log("Dimensions value element:", dimensionsValue); + if (dimensionsValue) { + dimensionsValue.textContent = product.dimensions; + console.log("Updated dimensions to:", product.dimensions); + } + } + + // Update description content + const descriptionContainer = document.getElementById( + "product-description-content" + ); + console.log("Description content container:", descriptionContainer); + if (descriptionContainer && product.descriptionLong) { + descriptionContainer.innerHTML = product.descriptionLong + .map( + (paragraph) => ` +

+ ${paragraph} +

+ ` + ) + .join(""); + console.log( + "Updated description content with", + product.descriptionLong.length, + "paragraphs" + ); + } + + // Update gallery images with carousel + const galleryContainer = document.getElementById("product-gallery-images"); + const galleryBackBtn = document.getElementById("gallery-back-btn"); + const galleryNextBtn = document.getElementById("gallery-next-btn"); + console.log("Gallery container:", galleryContainer); + console.log("Product galleryPairs:", product.galleryPairs); + + if (galleryContainer && product.galleryPairs) { + // galleryPairs is now a simple array of image paths + const allGalleryImages = product.galleryPairs; + console.log("All gallery images:", allGalleryImages); + + // Store gallery images for carousel + window.currentGalleryImages = allGalleryImages; + window.currentGalleryIndex = 0; + + console.log("About to call renderGalleryCarousel..."); + // Render initial gallery view + renderGalleryCarousel(); + + // Show navigation arrows for looped carousel (always show if more than 2 images) + if (allGalleryImages.length > 2) { + galleryBackBtn.style.display = "block"; + galleryNextBtn.style.display = "block"; + } else { + galleryBackBtn.style.display = "none"; + galleryNextBtn.style.display = "none"; + } + + console.log( + "Gallery carousel:", + allGalleryImages.length, + "gallery images total (sliding)" + ); + } + + function renderGalleryCarousel() { + console.log("renderGalleryCarousel called"); + console.log("window.currentGalleryImages:", window.currentGalleryImages); + console.log("galleryContainer:", galleryContainer); + + if (!window.currentGalleryImages || !galleryContainer) { + console.log( + "Early return: missing currentGalleryImages or galleryContainer" + ); return; } - console.log("Loading product:", product); - - // Update page title - document.title = `${product.name} - KHY`; - - // Update the "Product Details" title with the actual product name - const productDetailsTitle = document.getElementById( - "product-details-title" + console.log( + "Rendering gallery carousel with", + window.currentGalleryImages.length, + "images" ); - if (productDetailsTitle) { - productDetailsTitle.textContent = product.name; + + // Handle single image vs multiple images + if (window.currentGalleryImages.length === 1) { + // Single image - show only one image, hide arrows + const image1 = window.currentGalleryImages[0]; + console.log("Rendering single image:", image1); + galleryContainer.innerHTML = ` + + `; + + // Hide arrows for single image + galleryBackBtn.style.display = "none"; + galleryNextBtn.style.display = "none"; + } else { + // Multiple images - show 2 images with carousel + const image1 = window.currentGalleryImages[window.currentGalleryIndex]; + const image2Index = + (window.currentGalleryIndex + 1) % window.currentGalleryImages.length; + const image2 = window.currentGalleryImages[image2Index]; + + console.log("Rendering multiple images:", image1, image2); + + galleryContainer.innerHTML = ` + + + `; + + // Show arrows for multiple images + galleryBackBtn.style.display = "block"; + galleryBackBtn.style.opacity = "1"; + galleryBackBtn.style.pointerEvents = "auto"; + + galleryNextBtn.style.display = "block"; + galleryNextBtn.style.opacity = "1"; + galleryNextBtn.style.pointerEvents = "auto"; } - // Update product title (the main product title, not the breadcrumb) - const allH1s = document.querySelectorAll("h1"); - console.log("All H1 elements:", allH1s); - if (allH1s.length > 1) { - const mainProductTitle = allH1s[1]; // The second h1 should be the product title - console.log("Main product title element:", mainProductTitle); - if (mainProductTitle) { - mainProductTitle.textContent = product.name; - } - } + // Add click event listeners to gallery images for enlargement + console.log("About to call addImageEnlargementListeners for gallery..."); + addImageEnlargementListeners(); + } - // Update product description - find by text content - const allParagraphs = document.querySelectorAll("p"); - console.log("All paragraphs:", allParagraphs); - const descriptionEl = Array.from(allParagraphs).find( - (p) => - p.textContent && - p.textContent.includes( - "Setting the bar as one of the loudest speakers" - ) + // Add click handlers for looped gallery carousel navigation + if (galleryBackBtn) { + galleryBackBtn.addEventListener("click", function () { + // Left arrow moves forward: if at last position, go to 0 + window.currentGalleryIndex = + (window.currentGalleryIndex + 1) % window.currentGalleryImages.length; + renderGalleryCarousel(); + }); + } + + if (galleryNextBtn) { + galleryNextBtn.addEventListener("click", function () { + // Right arrow moves backward: if at 0, go to last position + window.currentGalleryIndex = + window.currentGalleryIndex === 0 + ? window.currentGalleryImages.length - 1 + : window.currentGalleryIndex - 1; + renderGalleryCarousel(); + }); + } + + // Update related products section + const relatedGrid = document.getElementById("related-grid"); + if (relatedGrid && product.category) { + console.log("Current product category:", product.category); + console.log( + "All products:", + data.products.map((p) => ({ + id: p.id, + name: p.name, + category: p.category, + })) ); - console.log("Description element:", descriptionEl); - if (descriptionEl) { - descriptionEl.textContent = product.description; - } - // Update main product image - find by alt text - const allImages = document.querySelectorAll("img"); - console.log("All images:", allImages); - const mainImage = Array.from(allImages).find( - (img) => img.alt && img.alt.includes("Asgaard sofa") + // Filter related products by category (excluding current product) + const allRelatedProducts = data.products.filter( + (p) => p.category === product.category && p.id !== product.id ); - console.log("Main image element:", mainImage); - if (mainImage) { - mainImage.src = product.image; - mainImage.alt = product.alt || product.name; - } - // Update thumbnail images - find by alt text - if (product.images && product.images.length > 0) { - const allImages = document.querySelectorAll("img"); - const thumbnails = Array.from(allImages).filter( - (img) => - img.alt && - (img.alt.includes("Outdoor sofa set") || - img.alt.includes("Stuart sofa") || - img.alt.includes("Maya sofa")) - ); - console.log("Thumbnail images found:", thumbnails); - product.images.forEach((imageSrc, index) => { - if (thumbnails[index]) { - thumbnails[index].src = imageSrc; - thumbnails[index].alt = product.alt || product.name; - } - }); - } + console.log("All related products found:", allRelatedProducts); - // Update size options - use the specific size-button class - if (product.sizes) { - const sizeButtons = document.querySelectorAll(".size-button"); - console.log("Size buttons found:", sizeButtons); + let currentPage = 1; + const pageSize = 4; - // Hide all size buttons first - sizeButtons.forEach((button) => { - button.style.display = "none"; - }); + function renderRelatedProducts() { + const start = 0; + const end = currentPage * pageSize; + const productsToShow = allRelatedProducts.slice(start, end); - // Show and update only the buttons we need - product.sizes.forEach((size, index) => { - if (sizeButtons[index]) { - sizeButtons[index].style.display = "flex"; - sizeButtons[index].textContent = size; - sizeButtons[index].setAttribute("data-size", size); - // Set selected size - if (size === product.selectedSize) { - sizeButtons[index].classList.remove( - "bg-floral-white", - "text-black" - ); - sizeButtons[index].classList.add("bg-uc-gold", "text-white"); - sizeButtons[index].classList.add("selected"); - } else { - sizeButtons[index].classList.remove( - "bg-uc-gold", - "text-white", - "selected" - ); - sizeButtons[index].classList.add("bg-floral-white", "text-black"); - } - } - }); - - // Add click event listeners for size buttons - sizeButtons.forEach((button) => { - button.addEventListener("click", function () { - // Remove selected state from all size buttons - sizeButtons.forEach((btn) => { - btn.classList.remove("bg-uc-gold", "text-white", "selected"); - btn.classList.add("bg-floral-white", "text-black"); - }); - - // Add selected state to clicked button - this.classList.remove("bg-floral-white", "text-black"); - this.classList.add("bg-uc-gold", "text-white", "selected"); - }); - }); - } - - // Update color options - find only the rounded color buttons, not size buttons - if (product.colors) { - const allButtons = document.querySelectorAll("button"); - const colorButtons = Array.from(allButtons).filter( - (button) => - button.classList.contains("w-8") && - button.classList.contains("h-8") && - button.classList.contains("rounded-full") && - !button.textContent // Color buttons should not have text content - ); - console.log("Color buttons found:", colorButtons); - - product.colors.forEach((color, index) => { - if (colorButtons[index]) { - colorButtons[index].style.backgroundColor = color.value; - colorButtons[index].setAttribute( - "data-color", - color.name || color.value - ); - // Set selected color - if (color.selected) { - colorButtons[index].classList.add( - "border-2", - "border-black", - "selected" - ); - } else { - colorButtons[index].classList.remove( - "border-2", - "border-black", - "selected" - ); - } - } - }); - - // Add click event listeners for color buttons - colorButtons.forEach((button) => { - button.addEventListener("click", function () { - // Remove selected state from all color buttons - colorButtons.forEach((btn) => { - btn.classList.remove("border-2", "border-black", "selected"); - }); - - // Add selected state to clicked button - this.classList.add("border-2", "border-black", "selected"); - }); - }); - } - - // Update product metadata - find by text content - const allSpans = document.querySelectorAll("span"); - - // Find and update Model No. - const modelNoLabel = Array.from(allSpans).find( - (span) => span.textContent === "Model No." - ); - if (modelNoLabel && product.modelNo) { - const modelNoValue = - modelNoLabel.parentElement.querySelector("span:last-child"); - if (modelNoValue) { - modelNoValue.textContent = product.modelNo; - } - } - - // Find and update Category - const categoryLabel = Array.from(allSpans).find( - (span) => span.textContent === "Category" - ); - if (categoryLabel && product.category) { - const categoryValue = - categoryLabel.parentElement.querySelector("span:last-child"); - if (categoryValue) { - categoryValue.textContent = - product.category.charAt(0).toUpperCase() + - product.category.slice(1); - } - } - - // Find and update Tags - const tagsLabel = Array.from(allSpans).find( - (span) => span.textContent === "Tags" - ); - if (tagsLabel && product.tags) { - const tagsValue = - tagsLabel.parentElement.querySelector("span:last-child"); - if (tagsValue) { - tagsValue.textContent = product.tags.join(", "); - } - } - - // Find and update Dimensions - const dimensionsLabel = Array.from(allSpans).find( - (span) => span.textContent === "Dimension" - ); - console.log("Dimensions label found:", dimensionsLabel); - console.log("Product dimensions:", product.dimensions); - - if (dimensionsLabel && product.dimensions) { - const dimensionsValue = - dimensionsLabel.parentElement.querySelector("span:last-child"); - console.log("Dimensions value element:", dimensionsValue); - if (dimensionsValue) { - dimensionsValue.textContent = product.dimensions; - console.log("Updated dimensions to:", product.dimensions); - } - } - - // Update description content - if (product.descriptionLong) { - const descriptionContainer = document.querySelector( - ".max-w-5xl.mx-auto.space-y-6" - ); - if (descriptionContainer) { - const descriptionParagraphs = - descriptionContainer.querySelectorAll("p"); - console.log("Description paragraphs found:", descriptionParagraphs); - - // Update each paragraph with the product's description content - product.descriptionLong.forEach((paragraph, index) => { - if (descriptionParagraphs[index]) { - descriptionParagraphs[index].textContent = paragraph; - } - }); - } - } - - // Update gallery images - if (product.galleryPairs) { - // Find gallery images by alt text - const allImages = document.querySelectorAll("img"); - const galleryImages = Array.from(allImages).filter( - (img) => - img.alt && - (img.alt.includes("Sofa variant left") || - img.alt.includes("Sofa variant right")) - ); - console.log("Gallery images found:", galleryImages); - - product.galleryPairs.forEach((pair, index) => { - if (galleryImages[index * 2]) { - galleryImages[index * 2].src = pair.left; - galleryImages[index * 2].alt = product.alt || product.name; - } - if (galleryImages[index * 2 + 1]) { - galleryImages[index * 2 + 1].src = pair.right; - galleryImages[index * 2 + 1].alt = product.alt || product.name; - } - }); - } - - // Update related products section - const relatedGrid = document.getElementById("related-grid"); - if (relatedGrid && product.category) { - console.log("Current product category:", product.category); - console.log( - "All products:", - data.products.map((p) => ({ - id: p.id, - name: p.name, - category: p.category, - })) - ); - - // Filter related products by category (excluding current product) - const allRelatedProducts = data.products.filter( - (p) => p.category === product.category && p.id !== product.id - ); - - console.log("All related products found:", allRelatedProducts); - - let currentPage = 1; - const pageSize = 4; - - function renderRelatedProducts() { - const start = 0; - const end = currentPage * pageSize; - const productsToShow = allRelatedProducts.slice(start, end); - - relatedGrid.innerHTML = productsToShow - .map( - (p) => ` + relatedGrid.innerHTML = productsToShow + .map( + (p) => `
${
-                p.alt || p.name
-              } + p.alt || p.name + }" class="w-full h-full object-cover" />

${ @@ -577,38 +744,37 @@ function initSite() {

` - ) - .join(""); + ) + .join(""); - // Handle "Show More" button visibility - const showMoreBtn = document.getElementById("related-show-more"); - if (showMoreBtn) { - const hasMore = allRelatedProducts.length > end; - showMoreBtn.style.display = hasMore ? "inline-flex" : "none"; - showMoreBtn.classList.add( - "inline-flex", - "items-center", - "justify-center" - ); - } - } - - // Add event listener for "Show More" button + // Handle "Show More" button visibility const showMoreBtn = document.getElementById("related-show-more"); if (showMoreBtn) { - showMoreBtn.addEventListener("click", () => { - currentPage += 1; - renderRelatedProducts(); - }); + const hasMore = allRelatedProducts.length > end; + showMoreBtn.style.display = hasMore ? "inline-flex" : "none"; + showMoreBtn.classList.add( + "inline-flex", + "items-center", + "justify-center" + ); } - - // Initial render - renderRelatedProducts(); } - } catch (error) { - console.error("Error loading product data:", error); + + // Add event listener for "Show More" button + const showMoreBtn = document.getElementById("related-show-more"); + if (showMoreBtn) { + showMoreBtn.addEventListener("click", () => { + currentPage += 1; + renderRelatedProducts(); + }); + } + + // Initial render + renderRelatedProducts(); } - })(); + } catch (error) { + console.error("Error loading product data:", error); + } } // Product Comparison Page Functionality @@ -1001,6 +1167,8 @@ if (window.location.pathname.includes("product-detail.html")) { "Product detail page detected, initializing compare functionality immediately" ); initProductDetailCompare(); + // Also initialize product detail loading + initProductDetail(); } // Also try to initialize on DOMContentLoaded @@ -1009,6 +1177,8 @@ document.addEventListener("DOMContentLoaded", function () { if (window.location.pathname.includes("product-detail.html")) { console.log("Product detail page detected in DOMContentLoaded"); initProductDetailCompare(); + // Also initialize product detail loading + initProductDetail(); } }); diff --git a/scripts/products.js b/scripts/products.js index da3e670..5404bac 100644 --- a/scripts/products.js +++ b/scripts/products.js @@ -123,6 +123,11 @@ class ProductManager { .join(""); this.updateResultsCount(); this.updatePagination(); + + // Re-add image enlargement listeners after products are rendered + setTimeout(() => { + addImageEnlargementListeners(); + }, 50); } // Create individual product card HTML @@ -140,7 +145,8 @@ class ProductManager { ${product.alt}
@@ -454,7 +460,76 @@ class ProductManager { // Initialize product manager const productManager = new ProductManager(); +// Image enlargement modal functionality +function addImageEnlargementListeners() { + const productImages = document.querySelectorAll( + "#product-grid img[data-enlarge-src]" + ); + const modal = document.getElementById("image-modal"); + const modalImage = document.getElementById("modal-image"); + const modalCloseBtn = document.getElementById("modal-close-btn"); + + if (!modal || !modalImage || !modalCloseBtn) return; + + productImages.forEach((img) => { + img.addEventListener("click", function (e) { + e.preventDefault(); // Prevent any default behavior + e.stopPropagation(); // Stop event bubbling to parent elements + + const imageSrc = this.getAttribute("data-enlarge-src"); + const imageAlt = this.getAttribute("alt"); + + modalImage.src = imageSrc; + modalImage.alt = imageAlt; + + // Show modal with animation + modal.classList.remove("hidden"); + document.body.style.overflow = "hidden"; // Prevent background scrolling + + // Trigger animation after a brief delay + setTimeout(() => { + modalImage.classList.remove("scale-95"); + modalImage.classList.add("scale-100"); + }, 10); + }); + }); + + // Close modal functionality + function closeModal() { + // Animate out + modalImage.classList.remove("scale-100"); + modalImage.classList.add("scale-95"); + + // Hide modal after animation + setTimeout(() => { + modal.classList.add("hidden"); + document.body.style.overflow = ""; // Restore scrolling + }, 300); + } + + modalCloseBtn.addEventListener("click", closeModal); + + // Close modal when clicking outside the image + modal.addEventListener("click", function (e) { + if (e.target === modal) { + closeModal(); + } + }); + + // Close modal with Escape key + document.addEventListener("keydown", function (e) { + if (e.key === "Escape" && !modal.classList.contains("hidden")) { + closeModal(); + } + }); +} + // Load products when DOM is ready document.addEventListener("DOMContentLoaded", () => { productManager.loadProducts(); + + // Add image enlargement listeners after products are loaded + setTimeout(() => { + addImageEnlargementListeners(); + }, 100); }); diff --git a/styles/main.css b/styles/main.css index 95067ed..90de230 100644 --- a/styles/main.css +++ b/styles/main.css @@ -673,6 +673,10 @@ video { top: 20rem; } +.top-4 { + top: 1rem; +} + .z-10 { z-index: 10; } @@ -779,10 +783,6 @@ video { margin-top: 2.5rem; } -.mt-2 { - margin-top: 0.5rem; -} - .mt-20 { margin-top: 5rem; } @@ -791,10 +791,18 @@ video { margin-top: 0.75rem; } +.mt-12 { + margin-top: 3rem; +} + .mt-6 { margin-top: 1.5rem; } +.mt-2 { + margin-top: 0.5rem; +} + .box-border { box-sizing: border-box; } @@ -883,22 +891,22 @@ video { height: 24rem; } -.h-\[22vh\] { - height: 22vh; +.h-\[145px\] { + height: 145px; } -.h-\[29vh\] { - height: 29vh; +.h-\[301px\] { + height: 301px; +} + +.h-\[446px\] { + height: 446px; } .h-\[64px\] { height: 64px; } -.h-\[6vh\] { - height: 6vh; -} - .h-auto { height: auto; } @@ -915,6 +923,54 @@ video { height: 100vh; } +.h-\[320px\] { + height: 320px; +} + +.h-\[220px\] { + height: 220px; +} + +.h-\[100px\] { + height: 100px; +} + +.h-\[25vh\] { + height: 25vh; +} + +.h-\[18vh\] { + height: 18vh; +} + +.h-\[7vh\] { + height: 7vh; +} + +.h-\[30vh\] { + height: 30vh; +} + +.h-\[22vh\] { + height: 22vh; +} + +.h-\[8vh\] { + height: 8vh; +} + +.h-\[29vh\] { + height: 29vh; +} + +.h-\[21vh\] { + height: 21vh; +} + +.h-\[6vh\] { + height: 6vh; +} + .h-\[31vh\] { height: 31vh; } @@ -927,8 +983,12 @@ video { height: 32vh; } -.h-\[25vh\] { - height: 25vh; +.h-\[95vh\] { + height: 95vh; +} + +.max-h-full { + max-height: 100%; } .min-h-\[64px\] { @@ -1015,6 +1075,10 @@ video { width: 100%; } +.w-\[95vw\] { + width: 95vw; +} + .max-w-2xl { max-width: 42rem; } @@ -1047,6 +1111,14 @@ video { max-width: 20rem; } +.max-w-4xl { + max-width: 56rem; +} + +.max-w-full { + max-width: 100%; +} + .flex-1 { flex: 1 1 0%; } @@ -1070,6 +1142,18 @@ video { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } +.scale-95 { + --tw-scale-x: .95; + --tw-scale-y: .95; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.scale-100 { + --tw-scale-x: 1; + --tw-scale-y: 1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + .transform { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } @@ -1164,14 +1248,14 @@ video { gap: 1.5rem; } -.gap-7 { - gap: 1.75rem; -} - .gap-8 { gap: 2rem; } +.gap-7 { + gap: 1.75rem; +} + .space-x-10 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(2.5rem * var(--tw-space-x-reverse)); @@ -1208,6 +1292,12 @@ video { margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); } +.space-y-16 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(4rem * var(--tw-space-y-reverse)); +} + .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); @@ -1442,6 +1532,14 @@ video { --tw-bg-opacity: 0.7; } +.bg-opacity-20 { + --tw-bg-opacity: 0.2; +} + +.bg-opacity-90 { + --tw-bg-opacity: 0.9; +} + .object-contain { -o-object-fit: contain; object-fit: contain; @@ -1590,6 +1688,10 @@ video { padding-right: 1.5rem; } +.pt-0 { + padding-top: 0px; +} + .pt-12 { padding-top: 3rem; } @@ -1860,6 +1962,12 @@ video { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.shadow-2xl { + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + .blur { --tw-blur: blur(8px); filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); @@ -1874,6 +1982,11 @@ video { 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-sm { + --tw-backdrop-blur: blur(4px); + 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, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; @@ -1922,10 +2035,22 @@ video { transition-duration: 300ms; } +.duration-500 { + transition-duration: 500ms; +} + +.duration-1000 { + transition-duration: 1000ms; +} + .ease-in-out { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } +.ease-out { + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); +} + .hover\:-translate-y-0\.5:hover { --tw-translate-y: -0.125rem; transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); @@ -1956,6 +2081,10 @@ video { --tw-bg-opacity: 0.9; } +.hover\:bg-opacity-30:hover { + --tw-bg-opacity: 0.3; +} + .hover\:text-black:hover { --tw-text-opacity: 1; color: rgb(0 0 0 / var(--tw-text-opacity, 1)); @@ -1985,6 +2114,10 @@ video { opacity: 0.8; } +.hover\:opacity-90:hover { + opacity: 0.9; +} + .hover\:shadow-lg:hover { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); @@ -2257,18 +2390,90 @@ video { margin-left: 2rem; } + .lg\:mt-16 { + margin-top: 4rem; + } + .lg\:mt-8 { margin-top: 2rem; } + .lg\:h-\[70vh\] { + height: 70vh; + } + + .lg\:h-\[90vh\] { + height: 90vh; + } + + .lg\:h-\[50vh\] { + height: 50vh; + } + + .lg\:h-\[600px\] { + height: 600px; + } + + .lg\:h-\[500px\] { + height: 500px; + } + + .lg\:h-\[85vh\] { + height: 85vh; + } + + .lg\:h-\[60vh\] { + height: 60vh; + } + .lg\:h-\[65vh\] { height: 65vh; } + .lg\:min-h-screen { + min-height: 100vh; + } + + .lg\:min-h-\[90vh\] { + min-height: 90vh; + } + + .lg\:min-h-\[100vh\] { + min-height: 100vh; + } + + .lg\:min-h-\[150vh\] { + min-height: 150vh; + } + + .lg\:min-h-\[900px\] { + min-height: 900px; + } + + .lg\:min-h-\[800px\] { + min-height: 800px; + } + + .lg\:min-h-\[700px\] { + min-height: 700px; + } + + .lg\:min-h-\[600px\] { + min-height: 600px; + } + + .lg\:min-h-\[60vh\] { + min-height: 60vh; + } + .lg\:min-h-\[65vh\] { min-height: 65vh; } + .lg\:min-h-\[80vh\] { + min-height: 80vh; + } + .lg\:w-36 { width: 9rem; } @@ -2305,6 +2510,18 @@ video { gap: 2rem; } + .lg\:space-y-10 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(2.5rem * var(--tw-space-y-reverse)); + } + + .lg\:space-y-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); + } + .lg\:space-y-4 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); @@ -2328,6 +2545,11 @@ video { padding-top: 12rem; } + .lg\:text-2xl { + font-size: 1.5rem; + line-height: 2rem; + } + .lg\:text-3xl { font-size: 1.875rem; line-height: 2.25rem; @@ -2348,6 +2570,11 @@ video { line-height: 1.75rem; } + .lg\:text-lg { + font-size: 1.125rem; + line-height: 1.75rem; + } + .lg\:leading-snug { line-height: 1.375; }