{"id":10109,"date":"2025-08-20T14:15:49","date_gmt":"2025-08-20T14:15:49","guid":{"rendered":"https:\/\/lumalofts.ca\/?page_id=10109"},"modified":"2026-08-31T20:07:23","modified_gmt":"2026-08-31T20:07:23","slug":"event-venues-workshops","status":"publish","type":"page","link":"https:\/\/lumalofts.ca\/fr\/weddings\/event-venues-workshops\/","title":{"rendered":"Event Venues &amp; Workshops"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10109\" class=\"elementor elementor-10109\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6a3d361 e-con-full e-flex e-con e-parent\" data-id=\"6a3d361\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2ff0f44 e-con-full e-flex e-con e-child\" data-id=\"2ff0f44\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div data-animation-type=\"block\" class=\"elementor-element elementor-element-cf30751 animated-slow elementor-widget__width-initial mauve-separator-align-center elementor-widget elementor-widget-mauve-fancy_heading\" data-id=\"cf30751\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;none&quot;,&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"mauve-fancy_heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"mauve-fancy-heading mauve-heading-text-center\">\n\t\t\t\t\t\t<div class=\"mauve-fancy-heading-inner\">\n\t\t\t\t<h1 class=\"mauve-heading-subtitle\">Montreal Event space<\/h1><h2 class=\"mauve-heading-title\">A Space That Shapes Itself Around Your Gathering<\/h2><div class=\"mauve-heading-content entry-content\"><p>Luma Lofts is a natural-light event space in Montreal perfect for intimate gatherings, workshops, and small celebrations. It accommodates up to 40 guests seated, 50 standing and includes tables, chairs, and setup. Ideal for baby showers, bridal showers, networking events and workshops.<\/p>\n<\/div>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6c97a11 e-con-full e-flex e-con e-child\" data-id=\"6c97a11\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;slideshow&quot;,&quot;background_slideshow_gallery&quot;:[{&quot;id&quot;:10117,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/Pam-Kay-Montreal-Dubai-Photographer-2548_websize.jpg&quot;},{&quot;id&quot;:9984,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/Pam-Kay-Montreal-Dubai-Photographer-2798_websize.jpg&quot;},{&quot;id&quot;:10118,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/Pam-Kay-Montreal-Dubai-Photographer-2538_websize.jpg&quot;},{&quot;id&quot;:10116,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/Pam-Kay-Montreal-Dubai-Photographer-2487_websize.jpg&quot;}],&quot;background_slideshow_slide_duration&quot;:2000,&quot;background_slideshow_loop&quot;:&quot;yes&quot;,&quot;background_slideshow_slide_transition&quot;:&quot;fade&quot;,&quot;background_slideshow_transition_duration&quot;:500}\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7a48058 e-flex e-con-boxed e-con e-parent\" data-id=\"7a48058\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-cbfb2c4 e-con-full e-flex e-con e-child\" data-id=\"cbfb2c4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-eea7471 e-flex e-con-boxed e-con e-parent\" data-id=\"eea7471\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-28254ab e-con-full e-flex e-con e-child\" data-id=\"28254ab\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;slideshow&quot;,&quot;background_slideshow_gallery&quot;:[{&quot;id&quot;:10390,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/Pam-Kay-Montreal-Dubai-Photographer-2251-scaled.jpg&quot;},{&quot;id&quot;:9990,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/PAM_7550_websize.jpg&quot;},{&quot;id&quot;:10356,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/Pam-Kay-Montreal-Dubai-Photographer-0385_websize.jpg&quot;},{&quot;id&quot;:10115,&quot;url&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/DSC01866_websize-1.jpg&quot;}],&quot;background_slideshow_slide_duration&quot;:1000,&quot;background_slideshow_transition_duration&quot;:300,&quot;background_slideshow_loop&quot;:&quot;yes&quot;,&quot;background_slideshow_slide_transition&quot;:&quot;fade&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-21b7aa8 e-con-full e-flex e-con e-child\" data-id=\"21b7aa8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div data-animation-type=\"block\" class=\"elementor-element elementor-element-2952660 animated-slow mauve-separator-align-left animation_type_block elementor-invisible elementor-widget elementor-widget-mauve-fancy_heading\" data-id=\"2952660\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;mauve_hidepaged&quot;:&quot;false&quot;,&quot;_animation_type&quot;:&quot;block&quot;}\" data-widget_type=\"mauve-fancy_heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"mauve-fancy-heading mauve-heading-text-left\">\n\t\t\t\t\t\t<div class=\"mauve-fancy-heading-inner\">\n\t\t\t\t<h2 class=\"mauve-heading-title\">Not to be dramatic, but this is why we\u2019re perfect:<\/h2>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-742a850 elementor-view-framed elementor-shape-square elementor-position-inline-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"742a850\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"ms-icons ms-check\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tParking options that don\u2019t make you cry\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tStreet parking is free and usually easy; there's also paid parking right behind the building, so no excuse to be late.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e072048 elementor-view-framed elementor-shape-square elementor-position-inline-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"e072048\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"ms-icons ms-check\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tCentrally located\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t8 minute walk from the Metro  <br data-start=\"655\" data-end=\"658\"> 5 minute walk from Atwater market, groceries, flower shops <br data-start=\"655\" data-end=\"658\"> 10 minute drive from Downtown Montreal <br data-start=\"655\" data-end=\"658\"> \n\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eae0b4d elementor-view-framed elementor-shape-square elementor-position-inline-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"eae0b4d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"ms-icons ms-check\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tNo rentals. No nonsense. More for martinis.\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tWe include tables and chairs, already set up. Spend on what actually makes the night memorable.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c1ee31a elementor-view-framed elementor-shape-square elementor-position-inline-start elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"c1ee31a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"ms-icons ms-check\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tIt\u2019s already dressed up\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tHigh ceilings, white floors, soft light\u2026 it\u2019s the Pinterest board before you start decorating.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1525521 e-con-full e-flex e-con e-parent\" data-id=\"1525521\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e36186 elementor-widget__width-inherit elementor-arrows-position-inside elementor-pagination-position-outside elementor-widget elementor-widget-image-carousel\" data-id=\"5e36186\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;navigation&quot;:&quot;both&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;pause_on_hover&quot;:&quot;yes&quot;,&quot;pause_on_interaction&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500,&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"image-carousel.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-image-carousel-wrapper swiper\" role=\"region\" aria-roledescription=\"carousel\" aria-label=\"Image Carousel\" dir=\"ltr\">\n\t\t\t<div class=\"elementor-image-carousel swiper-wrapper swiper-image-stretch\" aria-live=\"off\">\n\t\t\t\t\t\t\t\t<div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"1 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg\" alt=\"Pam Kay Montreal Dubai Photographer-12\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"2 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-7145-1-782x1043.jpg\" alt=\"Noemie Castro\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"3 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-4951-782x1043.jpg\" alt=\"Pam Kay Montreal Dubai Photographer-4951\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"4 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/DSC01682_websize-782x1043.jpg\" alt=\"Montreal International Film Festival\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"5 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-3058_websize-782x1043.jpg\" alt=\"Suefia Branding\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"6 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-2487_websize-782x1043.jpg\" alt=\"Pam Kay x LUMA lofts Cocktail\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"7 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/IMG_7019-782x1043.jpg\" alt=\"IMG_7019\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"8 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-2538_websize-782x1043.jpg\" alt=\"Pam Kay x LUMA lofts Cocktail\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"9 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/IMG_7015-782x1043.jpg\" alt=\"IMG_7015\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"10 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-2548_websize-782x1043.jpg\" alt=\"Pam Kay x LUMA lofts Cocktail\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"11 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/485586474_18497554816048422_8751838739914366969_n-782x1043.jpg\" alt=\"485586474_18497554816048422_8751838739914366969_n\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"12 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-7149-782x1043.jpg\" alt=\"Noemie Castro\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"13 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-2152-782x1043.jpg\" alt=\"Pam Kay Montreal Dubai Photographer-2152\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"14 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-0385_websize-782x1043.jpg\" alt=\"Pam &amp; Tarik&#039;s Engagement Party\" \/><\/figure><\/div><div class=\"swiper-slide\" role=\"group\" aria-roledescription=\"slide\" aria-label=\"15 of 15\"><figure class=\"swiper-slide-inner\"><img decoding=\"async\" class=\"swiper-slide-image\" src=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-7157-782x1043.jpg\" alt=\"Noemie Castro\" \/><\/figure><\/div>\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-prev\" role=\"button\" tabindex=\"0\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-left\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M646 125C629 125 613 133 604 142L308 442C296 454 292 471 292 487 292 504 296 521 308 533L604 854C617 867 629 875 646 875 663 875 679 871 692 858 704 846 713 829 713 812 713 796 708 779 692 767L438 487 692 225C700 217 708 204 708 187 708 171 704 154 692 142 675 129 663 125 646 125Z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-swiper-button elementor-swiper-button-next\" role=\"button\" tabindex=\"0\">\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-eicon-chevron-right\" viewBox=\"0 0 1000 1000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M696 533C708 521 713 504 713 487 713 471 708 454 696 446L400 146C388 133 375 125 354 125 338 125 325 129 313 142 300 154 292 171 292 187 292 204 296 221 308 233L563 492 304 771C292 783 288 800 288 817 288 833 296 850 308 863 321 871 338 875 354 875 371 875 388 867 400 854L696 533Z\"><\/path><\/svg>\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"swiper-pagination\"><\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-638399e e-flex e-con-boxed e-con e-parent\" data-id=\"638399e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-69bc3b6 e-con-full e-flex e-con e-child\" data-id=\"69bc3b6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-02dd1c8 elementor-widget elementor-widget-heading\" data-id=\"02dd1c8\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Types of Events We Host<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6f8254 elementor-widget elementor-widget-text-editor\" data-id=\"c6f8254\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"136\" data-end=\"253\">Luma Lofts is a natural-light event space in Montreal designed for intimate gatherings of up to 40 guests, including:<\/p><ul data-start=\"255\" data-end=\"425\"><li data-start=\"255\" data-end=\"284\"><p data-start=\"257\" data-end=\"284\"><strong data-start=\"257\" data-end=\"282\">Bridal &amp; Baby Showers<\/strong><\/p><\/li><li data-start=\"285\" data-end=\"318\"><p data-start=\"287\" data-end=\"318\"><strong data-start=\"287\" data-end=\"316\">Dinners &amp; Cocktail Events<\/strong><\/p><\/li><li data-start=\"319\" data-end=\"357\"><p data-start=\"321\" data-end=\"357\"><strong data-start=\"321\" data-end=\"355\">Networking &amp; Corporate Meetups<\/strong><\/p><\/li><li data-start=\"358\" data-end=\"394\"><p data-start=\"360\" data-end=\"394\"><strong data-start=\"360\" data-end=\"392\">Workshops &amp; Creative Classes<\/strong><\/p><\/li><li data-start=\"395\" data-end=\"425\"><p data-start=\"397\" data-end=\"425\"><strong data-start=\"397\" data-end=\"425\">Yoga &amp; Wellness Sessions<\/strong><\/p><\/li><\/ul><p data-start=\"427\" data-end=\"498\">Tables &amp; chairs always available. Flexible layout. Photo-ready space.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a89af9f e-con-full e-flex e-con e-child\" data-id=\"a89af9f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;video&quot;,&quot;background_video_link&quot;:&quot;https:\\\/\\\/lumalofts.ca\\\/wp-content\\\/uploads\\\/video-output-376423F7-9086-4336-98AA-C6085AAB74B8-1.mov&quot;,&quot;background_play_on_mobile&quot;:&quot;yes&quot;,&quot;mauve_ext_bgvideo_controls&quot;:&quot;false&quot;}\">\n\t\t<div class=\"elementor-background-video-container\">\n\t\t\t\t\t\t\t<video class=\"elementor-background-video-hosted\" role=\"presentation\" autoplay muted playsinline loop><\/video>\n\t\t\t\t\t<\/div>\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a0d25b1 darkbg e-flex e-con-boxed e-con e-parent\" data-id=\"a0d25b1\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-84a22cb e-con-full e-flex e-con e-child\" data-id=\"84a22cb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5080e12 elementor-widget elementor-widget-heading\" data-id=\"5080e12\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">I KNOW YOU WANT TO...<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-375a7f0 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"375a7f0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Book the space everyone will keep talking about.<\/h3>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b64302b e-con-full e-flex e-con e-child\" data-id=\"b64302b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-05c18f9 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"05c18f9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Let\u2019s talk about your event. Whether it\u2019s a shower, a dinner, or a workshop, we\u2019ll help you make it look and feel effortless.<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0a8d7c4 e-con-full e-flex e-con e-child\" data-id=\"0a8d7c4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e4c834 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"5e4c834\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/contact\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"ms-icons ms-f-long-arrow-right\"><\/i>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Get Started Now!<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3c5e23b e-con-full e-flex e-con e-parent\" data-id=\"3c5e23b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4ebb60a elementor-widget elementor-widget-html\" data-id=\"4ebb60a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;mauve_hidepaged&quot;:&quot;false&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Luma Lofts \u2014 Event Pricing Calculator<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:ital,wght@0,400;0,500;0,700&family=Playfair+Display:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n  *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\n  :root{--bg:#FAF8F5;--dark:#2C2824;--cream:#FAF8F5;--gold:#8B7355;--border:#EDEAE6;--muted:#999;--green:#6B8F71;--teal:#4A6670;--amber:#C4956A;--light-border:#F5F3F0}\n  .luma-calc,.luma-calc *,.luma-calc *::before,.luma-calc *::after{box-sizing:border-box}\n  .luma-calc{font-family:'DM Sans','Helvetica Neue',sans-serif;color:var(--dark);background:var(--bg);max-width:100%;overflow-x:hidden;position:relative;line-height:1.5;-webkit-font-smoothing:antialiased}\n  .luma-calc *{font-family:inherit}\n  .luma-body{max-width:680px;margin:0 auto;padding:24px 16px 80px}\n  .luma-card{background:#fff;border-radius:16px;padding:20px 24px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.04)}\n  .luma-label{font-size:13px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:var(--gold);margin-bottom:12px}\n  .guest-row{display:flex;align-items:center;gap:16px;margin-top:12px}\n  .guest-row input[type=range]{flex:1;height:6px;-webkit-appearance:none;appearance:none;background:var(--border);border-radius:3px;outline:none}\n  .guest-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;background:var(--gold);cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.2)}\n  .guest-row input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:var(--gold);cursor:pointer;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.2)}\n  .guest-row input[type=range]::-moz-range-track{background:var(--border);height:6px;border-radius:3px}\n  .guest-badge{background:var(--dark);color:var(--cream);border-radius:10px;padding:8px 16px;font-weight:700;font-size:18px;min-width:52px;text-align:center}\n  .table-hint{font-size:13px;color:var(--muted);margin-top:8px}\n  .pkg-card{background:#fff;border:2px solid var(--border);border-radius:16px;padding:0;cursor:pointer;text-align:left;transition:all .2s;box-shadow:0 1px 3px rgba(0,0,0,.04);margin-bottom:12px;width:100%;font-family:inherit;display:block}\n  .pkg-card.selected{box-shadow:0 4px 16px rgba(0,0,0,.06)}\n  .pkg-card .pkg-img{width:100%;height:180px;object-fit:cover;display:block;background:var(--border);border-radius:14px 14px 0 0}\n  .pkg-card .pkg-img-placeholder{width:100%;height:180px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#EDEAE6,#DDD8D2);font-size:12px;color:var(--muted);letter-spacing:1px;text-transform:uppercase;border-radius:14px 14px 0 0}\n  .pkg-card .pkg-body{padding:16px 20px 20px}\n  .pkg-card .pkg-top{display:flex;justify-content:space-between;align-items:flex-start}\n  .pkg-card .pkg-info{min-width:0;flex:1}\n  .pkg-card .pkg-tier{font-size:10px;letter-spacing:2px;text-transform:uppercase;font-weight:700;margin-bottom:4px}\n  .pkg-card .pkg-name{font-family:'Playfair Display',Georgia,serif;font-size:20px;font-weight:600;color:var(--dark)}\n  .pkg-card .pkg-desc{font-size:13px;color:var(--muted);margin-top:4px;line-height:1.5}\n  .pkg-card .pkg-includes{font-size:12px;color:var(--gold);margin-top:10px;line-height:1.6}\n  .pkg-card .pkg-price-col{flex-shrink:0;margin-left:16px;text-align:right}\n  .pkg-card .pkg-price{font-family:'Playfair Display',Georgia,serif;font-size:24px;font-weight:600;white-space:nowrap}\n  .pkg-card .pkg-tax-note{font-size:11px;color:#bbb}\n  .pkg-card .pkg-savings{font-size:11px;color:var(--green);font-weight:600;margin-top:2px}\n  .addon-img-placeholder{width:52px;height:52px;border-radius:10px;flex-shrink:0;background:linear-gradient(135deg,#EDEAE6,#DDD8D2);display:flex;align-items:center;justify-content:center;font-size:18px}\n  .addon-row{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--light-border);cursor:pointer}\n  .addon-row:last-child{border-bottom:none}\n  .addon-left{display:flex;align-items:center;gap:12px;min-width:0;flex:1}\n  .addon-row input[type=checkbox]{accent-color:var(--gold);width:18px;height:18px;cursor:pointer}\n  .addon-name{font-size:14px;font-weight:500}\n  .addon-desc{font-size:12px;color:var(--muted)}\n  .addon-price{font-size:14px;font-weight:600;flex-shrink:0;white-space:nowrap}\n  .addon-price.custom{color:var(--amber)}\n  .hours-row{display:flex;justify-content:space-between;align-items:center}\n  .hours-controls{display:flex;align-items:center;gap:12px}\n  .hour-btn{width:32px;height:32px;border-radius:8px;border:1px solid #ddd;background:#fff;cursor:pointer;font-size:16px;font-family:inherit;display:flex;align-items:center;justify-content:center}\n  .hour-val{font-weight:700;font-size:16px;min-width:20px;text-align:center}\n  .total-card{background:var(--dark);color:var(--cream);border-radius:16px;padding:24px;margin-bottom:16px}\n  .total-row{display:flex;justify-content:space-between;align-items:center}\n  .total-sub{font-size:14px;opacity:.7}.total-sub-val{font-size:18px;font-weight:600}\n  .total-tax{font-size:13px;opacity:.5}.total-tax-val{font-size:14px;opacity:.7}\n  .total-divider{border-bottom:1px solid rgba(255,255,255,.15);margin:12px 0 16px}\n  .total-label{font-family:'Playfair Display',Georgia,serif;font-size:16px}\n  .total-amount{font-family:'Playfair Display',Georgia,serif;font-size:28px;font-weight:600}\n  .custom-quote-note{margin-top:12px;padding:10px 14px;background:rgba(196,149,106,.15);border-radius:8px;font-size:13px;color:var(--amber)}\n  .block-btn{flex:1;min-width:0;padding:12px 8px;border:2px solid var(--border);border-radius:12px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-family:inherit}\n  .block-btn .block-label{font-size:13px;font-weight:600;color:var(--dark)}\n  .block-btn .block-price{font-size:12px;color:var(--muted);margin-top:2px}\n  .block-btn.selected{border-color:var(--gold);background:rgba(139,115,85,.06)}\n  .block-btn.selected .block-label{color:var(--gold)}\n  .block-btn:hover{border-color:#ccc}\n  .booking-cta{width:100%;padding:18px 24px;border:none;border-radius:14px;cursor:pointer;font-family:'Playfair Display',Georgia,serif;font-size:18px;font-weight:600;background:var(--gold);color:var(--cream);margin-bottom:16px;transition:all .3s ease;letter-spacing:.3px;box-shadow:0 4px 16px rgba(139,115,85,.25)}\n  .booking-cta:hover{background:#7A6548;transform:translateY(-1px);box-shadow:0 6px 20px rgba(139,115,85,.35)}\n  .booking-cta:active{transform:translateY(0)}\n  .booking-form{overflow:hidden;max-height:0;opacity:0;transition:max-height .5s ease,opacity .4s ease,margin .3s ease;margin-bottom:0}\n  .booking-form.open{max-height:900px;opacity:1;margin-bottom:16px}\n  .booking-form-inner{background:#fff;border-radius:16px;padding:24px;box-shadow:0 1px 3px rgba(0,0,0,.04);border:2px solid var(--gold)}\n  .form-row{margin-bottom:16px}.form-row:last-child{margin-bottom:0}\n  .form-row label{display:block;font-size:13px;font-weight:600;color:var(--dark);margin-bottom:6px}\n  .form-row label .req{color:var(--amber);margin-left:2px}\n  .form-row input,.form-row textarea,.form-row select{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:10px;font-size:14px;font-family:inherit;color:var(--dark);background:#FAFAF8;transition:border-color .2s,box-shadow .2s;outline:none}\n  .form-row input:focus,.form-row textarea:focus,.form-row select:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(139,115,85,.1)}\n  .form-row input::placeholder,.form-row textarea::placeholder{color:#ccc}\n  .form-row textarea{resize:vertical;min-height:80px}\n  .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n  @media(max-width:480px){.form-grid{grid-template-columns:1fr}}\n  .form-row select{appearance:none;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23999' stroke-width='1.5' fill='none'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 14px center;padding-right:36px}\n  .form-summary{background:var(--bg);border-radius:10px;padding:14px 16px;margin-bottom:16px;font-size:13px;line-height:1.7;border:1px solid var(--border)}\n  .form-summary strong{color:var(--gold)}\n  .submit-btn{width:100%;padding:16px 24px;border:none;border-radius:12px;cursor:pointer;font-family:'DM Sans',sans-serif;font-size:15px;font-weight:700;background:var(--dark);color:var(--cream);transition:all .2s;letter-spacing:.5px}\n  .submit-btn:hover{background:#3D3630}\n  .submit-btn:disabled{opacity:.5;cursor:not-allowed}\n  .submit-btn .spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle;margin-right:8px}\n  @keyframes spin{to{transform:rotate(360deg)}}\n  .form-success{text-align:center;padding:32px 20px}\n  .form-success .check{width:56px;height:56px;border-radius:50%;background:var(--green);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:28px;margin-bottom:16px}\n  .form-success h3{font-family:'Playfair Display',Georgia,serif;font-size:22px;font-weight:600;margin-bottom:8px}\n  .form-success p{font-size:14px;color:var(--muted);line-height:1.6}\n  .form-error{background:rgba(220,53,69,.08);border:1px solid rgba(220,53,69,.2);border-radius:8px;padding:10px 14px;font-size:13px;color:#c0392b;margin-bottom:12px;display:none}\n  .form-row input.invalid,.form-row select.invalid{border-color:#c0392b;background:rgba(220,53,69,.03)}\n  .form-row input.invalid:focus{box-shadow:0 0 0 3px rgba(220,53,69,.1)}\n  .field-error{font-size:11px;color:#c0392b;margin-top:4px;display:none}\n  .cal-wrap{margin-top:16px}\n  .cal-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}\n  .cal-nav button{background:none;border:1px solid var(--border);border-radius:8px;padding:6px 14px;cursor:pointer;font-size:14px;font-family:inherit;color:var(--dark)}\n  .cal-nav button:hover{background:var(--bg)}\n  .cal-month{font-weight:700;font-size:15px;color:var(--dark)}\n  .cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center}\n  .cal-header{font-size:11px;font-weight:600;color:var(--muted);padding:4px 0;text-transform:uppercase}\n  .cal-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:10px;font-size:13px;cursor:pointer;position:relative;border:2px solid transparent;transition:all .15s}\n  .cal-day:hover:not(.cal-past):not(.cal-empty){background:var(--bg)}\n  .cal-day.cal-empty{cursor:default}.cal-day.cal-past{color:#ccc;cursor:default}\n  .cal-day.cal-today{font-weight:700;color:var(--gold)}\n  .cal-day.cal-selected{border-color:var(--gold);background:rgba(139,115,85,.1);font-weight:700}\n  .cal-day.cal-busy-full{background:#f5e6e6;color:#c0392b;cursor:not-allowed;text-decoration:line-through}\n  .cal-day.cal-busy-partial{background:#fef3e2;color:#b8860b}\n  .cal-day .cal-dot{position:absolute;bottom:3px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:50%}\n  .cal-legend{display:flex;gap:16px;margin-top:10px;justify-content:center;flex-wrap:wrap}\n  .cal-legend-item{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}\n  .cal-legend-dot{width:8px;height:8px;border-radius:50%}\n  .cal-loading{text-align:center;padding:40px 0;color:var(--muted);font-size:13px}\n  .fine-print{font-size:12px;color:#bbb;text-align:center;line-height:1.6;padding:0 12px}\n<\/style>\n<\/head>\n<body>\n<div class=\"luma-calc\">\n  <div class=\"luma-body\">\n\n    <div class=\"luma-card\">\n      <div class=\"luma-label\">When is your event?<\/div>\n      <div class=\"cal-wrap\">\n        <div class=\"cal-nav\">\n          <button onclick=\"calNav(-1)\">\u2190 Prev<\/button>\n          <span class=\"cal-month\" id=\"calMonthLabel\"><\/span>\n          <button onclick=\"calNav(1)\">Next \u2192<\/button>\n        <\/div>\n        <div class=\"cal-grid\" id=\"calGrid\"><\/div>\n        <div class=\"cal-legend\">\n          <div class=\"cal-legend-item\"><div class=\"cal-legend-dot\" style=\"background:#6B8F71\"><\/div> Available<\/div>\n          <div class=\"cal-legend-item\"><div class=\"cal-legend-dot\" style=\"background:#daa520\"><\/div> Partial<\/div>\n          <div class=\"cal-legend-item\"><div class=\"cal-legend-dot\" style=\"background:#c0392b\"><\/div> Booked<\/div>\n        <\/div>\n      <\/div>\n      <div id=\"dateDisplay\" class=\"table-hint\" style=\"margin-top:12px;font-weight:600\"><\/div>\n      <div id=\"blockSelector\" style=\"display:flex;gap:8px;flex-wrap:wrap;margin-top:12px\"><\/div>\n      <div class=\"table-hint\" id=\"blockHint\" style=\"margin-top:10px\"><\/div>\n    <\/div>\n\n    <div class=\"luma-card\">\n      <div class=\"luma-label\">Number of Guests<\/div>\n      <div class=\"guest-row\">\n        <input type=\"range\" id=\"guestSlider\" min=\"10\" max=\"40\" value=\"30\">\n        <div class=\"guest-badge\" id=\"guestBadge\">30<\/div>\n      <\/div>\n      <div class=\"table-hint\" id=\"tableHint\">\u2248 5 rectangular 6ft tables<\/div>\n    <\/div>\n\n    <div id=\"packageCards\"><\/div>\n\n    <div class=\"luma-card\" id=\"addOnsCard\" style=\"display:none\">\n      <div class=\"luma-label\">Add-Ons<\/div>\n      <div id=\"addOnsList\"><\/div>\n    <\/div>\n\n    <div class=\"luma-card\" id=\"extraHoursCard\">\n      <div class=\"hours-row\">\n        <div>\n          <div class=\"addon-name\">\u23f0 Extra Hours<\/div>\n          <div class=\"addon-desc\" id=\"extraHoursDesc\">$125 per additional hour beyond 5h<\/div>\n        <\/div>\n        <div class=\"hours-controls\">\n          <button class=\"hour-btn\" onclick=\"changeHours(-1)\">\u2212<\/button>\n          <span class=\"hour-val\" id=\"hourVal\">0<\/span>\n          <button class=\"hour-btn\" onclick=\"changeHours(1)\">+<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"luma-card\">\n      <div class=\"hours-row\">\n        <div>\n          <div class=\"addon-name\">\ud83c\udf78 Cocktail Tables<\/div>\n          <div class=\"addon-desc\">High-top cocktail tables \u00b7 $40 each (max 4)<\/div>\n        <\/div>\n        <div class=\"hours-controls\">\n          <button class=\"hour-btn\" onclick=\"changeCocktail(-1)\">\u2212<\/button>\n          <span class=\"hour-val\" id=\"cocktailVal\">0<\/span>\n          <button class=\"hour-btn\" onclick=\"changeCocktail(1)\">+<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"total-card\">\n      <div class=\"total-row\" style=\"margin-bottom:12px\">\n        <span class=\"total-sub\">Subtotal<\/span>\n        <span class=\"total-sub-val\" id=\"subtotalVal\">$0.00<\/span>\n      <\/div>\n      <div class=\"total-row\">\n        <span class=\"total-tax\">Tax (QST + GST \u00b7 14.975%)<\/span>\n        <span class=\"total-tax-val\" id=\"taxVal\">$0.00<\/span>\n      <\/div>\n      <div class=\"total-divider\"><\/div>\n      <div class=\"total-row\">\n        <span class=\"total-label\">Estimated Total<\/span>\n        <span class=\"total-amount\" id=\"totalVal\">$0.00<\/span>\n      <\/div>\n      <div class=\"custom-quote-note\" id=\"customNote\" style=\"display:none\"><\/div>\n    <\/div>\n\n    <button class=\"booking-cta\" id=\"bookingCta\" onclick=\"toggleForm()\">Request to Book \u2192<\/button>\n\n    <div class=\"booking-form\" id=\"bookingForm\">\n      <div class=\"booking-form-inner\">\n        <div class=\"luma-label\">Your Information<\/div>\n        <div class=\"form-summary\" id=\"formSummary\"><\/div>\n        <div class=\"form-error\" id=\"formError\"><\/div>\n        <div class=\"form-grid\">\n          <div class=\"form-row\">\n            <label>First Name <span class=\"req\">*<\/span><\/label>\n            <input type=\"text\" id=\"fFirst\" placeholder=\"Jane\">\n            <div class=\"field-error\" id=\"errFirst\"><\/div>\n          <\/div>\n          <div class=\"form-row\">\n            <label>Last Name <span class=\"req\">*<\/span><\/label>\n            <input type=\"text\" id=\"fLast\" placeholder=\"Doe\">\n            <div class=\"field-error\" id=\"errLast\"><\/div>\n          <\/div>\n        <\/div>\n        <div class=\"form-row\">\n          <label>Email <span class=\"req\">*<\/span><\/label>\n          <input type=\"email\" id=\"fEmail\" placeholder=\"jane@example.com\">\n          <div class=\"field-error\" id=\"errEmail\"><\/div>\n        <\/div>\n        <div class=\"form-row\">\n          <label>Phone <span class=\"req\">*<\/span><\/label>\n          <input type=\"tel\" id=\"fPhone\" placeholder=\"(514) 555-0123\">\n          <div class=\"field-error\" id=\"errPhone\"><\/div>\n        <\/div>\n        <div class=\"form-row\">\n          <label>Event Type<\/label>\n          <select id=\"fEventType\">\n            <option value=\"\">Select...<\/option>\n            <option value=\"Corporate Event\">Corporate Event<\/option>\n            <option value=\"Private Party\">Private Party<\/option>\n            <option value=\"Workshop\">Workshop<\/option>\n            <option value=\"Birthday\">Birthday<\/option>\n            <option value=\"Baby Shower\">Baby Shower<\/option>\n            <option value=\"Bridal Shower\">Bridal Shower<\/option>\n            <option value=\"Holiday Party\">Holiday Party<\/option>\n            <option value=\"Other\">Other<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"form-row\">\n          <label>Anything else we should know?<\/label>\n          <textarea id=\"fNotes\" placeholder=\"Tell us about your event, special requirements, dietary needs, etc.\"><\/textarea>\n        <\/div>\n        <button class=\"submit-btn\" id=\"submitBtn\" onclick=\"submitBooking()\">Submit Inquiry<\/button>\n      <\/div>\n    <\/div>\n\n    <div id=\"successMsg\" style=\"display:none\">\n      <div class=\"luma-card\">\n        <div class=\"form-success\">\n          <div class=\"check\">\u2713<\/div>\n          <h3>Inquiry Received!<\/h3>\n          <p>We'll review your event details and get back to you within 24 hours with availability and a formal quote. Keep an eye on your inbox.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"fine-print\">\n      Prices are estimates. Final pricing confirmed upon booking.<br>\n      Orders under $1,000 require payment in full. Orders $1,000+ require a 50% non-refundable deposit to reserve your date.\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  var WORKER = \"https:\/\/luma-booking.purple-wind-496e.workers.dev\";\n  var CAL_WORKER = \"https:\/\/luma-calendar.purple-wind-496e.workers.dev\";\n  var TAX = 0.14975;\n  var EXTRA_HR = 125;\n\n  var BLOCKS = {\n    weekday:  [{ key:\"standard\", label:\"Standard\", sub:\"5 hours \u00b7 flexible timing\", price:500, hours:5 }],\n    sunday:   [{ key:\"standard\", label:\"Standard\", sub:\"5 hours \u00b7 flexible timing\", price:575, hours:5 }],\n    saturday: [\n      { key:\"morning\", label:\"Morning\", sub:\"10am \u2013 3pm\",  price:650,  hours:5 },\n      { key:\"evening\", label:\"Evening\", sub:\"5pm \u2013 10pm\",  price:700,  hours:5 },\n      { key:\"fullday\", label:\"Full Day\",sub:\"10am \u2013 10pm\", price:1200, hours:10 },\n    ],\n  };\n\n  var PKGS = {\n    base:       { name:\"Luma Base\",       tier:\"DIY\",          desc:\"Venue access with tables & chairs. You handle your own setup & teardown within your rental time.\", pp:0,  inc:[], color:\"#8B7355\", img:\"https:\/\/lumalofts.ca\/wp-content\/uploads\/2023\/04\/IMG_1302-scaled.jpg\" },\n    essentials: { name:\"Luma Essentials\",  tier:\"Most Popular\", desc:\"Everything you need for a polished seated event.\", pp:6,  inc:[\"setup\",\"tablecloths\"], color:\"#6B8F71\", img:\"https:\/\/lumalofts.ca\/wp-content\/uploads\/2023\/04\/IMG_1302-scaled.jpg\" },\n    elevated:   { name:\"Luma Elevated\",    tier:\"Full Service\", desc:\"A beautifully styled event with all the details covered.\", pp:22, inc:[\"setup\",\"tablecloths\",\"napkins\",\"plates\",\"utensils\",\"glasses\",\"budVases\",\"fauxFlorals\",\"lamps\"], color:\"#4A6670\", img:\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-scaled.jpg\" },\n  };\n\n  var ADDONS = {\n    setup:       { n:\"Setup & Teardown\",      d:\"We handle table & chair arrangement\",          t:\"flat\",  p:150,  i:\"\ud83d\udd27\" },\n    tablecloths: { n:\"Tablecloths\",           d:\"Elegant floor-length linens\",                  t:\"tbl\",   p:15,   i:\"\ud83e\ude91\" },\n    napkins:     { n:\"Cloth Napkins (Beige)\",  d:\"Quality fabric napkins\",                      t:\"pp\",    p:2,    i:\"\ud83e\uddfb\" },\n    plates:      { n:\"Plates\",                d:\"White ceramic dinner plates\",                   t:\"pp\",    p:3,    i:\"\ud83c\udf7d\" },\n    utensils:    { n:\"Utensils\",              d:\"Fork, knife & spoon set\",                      t:\"pp\",    p:2.5,  i:\"\ud83e\udd44\" },\n    glasses:     { n:\"Glassware\",             d:\"Wine or cocktail glasses\",                      t:\"pp\",    p:3,    i:\"\ud83e\udd42\" },\n    budVases:    { n:\"Bud Vases\",             d:\"Small glass vases (1 per table)\",               t:\"tbl\",   p:8,    i:\"\ud83c\udf38\" },\n    fauxFlorals: { n:\"Faux Florals\",          d:\"Silk arrangements per table\",                   t:\"tbl\",   p:25,   i:\"\ud83d\udc90\" },\n    lamps:       { n:\"Table Lamps\",           d:\"Elegant cordless lampshades (2 per table)\",     t:\"tbl\",   p:16,   i:\"\ud83d\udca1\" },\n    photobooth:  { n:\"Photobooth\",            d:\"Self-serve stand, unlimited digital photos\",    t:\"flat\",  p:175,  i:\"\ud83d\udcf8\" },\n    realFlowers: { n:\"Real Flowers\",          d:\"Custom quote from our florist partner\",         t:\"custom\",p:0,    i:\"\ud83c\udf39\" },\n    barService:  { n:\"Bar Service\",           d:\"We'll connect you with our bartending partner\", t:\"custom\",p:0,    i:\"\ud83c\udf77\" },\n    catering:    { n:\"Catering\",              d:\"We'll connect you with our catering partner\",   t:\"custom\",p:0,    i:\"\ud83c\udf74\" },\n  };\n\n  var SETUP_DEPS = [\"plates\",\"budVases\",\"fauxFlorals\",\"realFlowers\",\"lamps\",\"napkins\",\"utensils\",\"glasses\"];\n  var DAY_LABELS = { weekday:\"Weekday\", sunday:\"Sunday\", saturday:\"Saturday\" };\n  var MO = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n  var DN = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];\n  var DS = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];\n\n  \/\/ State\n  var S = { day:\"saturday\", block:\"evening\", guests:30, pkg:\"essentials\", adds:{}, xh:0, ct:0, formOpen:false, date:null, cy:new Date().getFullYear(), cm:new Date().getMonth(), avail:{}, loading:false };\n\n  \/\/ Helpers\n  function $(id){ return document.getElementById(id) }\n  function fmt(n){ return \"$\"+n.toLocaleString(undefined,{minimumFractionDigits:2,maximumFractionDigits:2}) }\n  function blk(){ var b=BLOCKS[S.day]||[]; return b.find(function(x){return x.key===S.block})||b[0] }\n  function vp(){ return blk().price }\n  function hrs(){ return blk().hours }\n  function tbl(){ var g=S.guests; return g<=14?2:g<=20?3:g<=28?4:g<=34?5:6 }\n  function cost(k){ var a=ADDONS[k]; if(a.t===\"pp\")return a.p*S.guests; if(a.t===\"tbl\")return a.p*tbl(); if(a.t===\"flat\")return a.p; return 0 }\n  function dayKey(ds){ var w=new Date(ds+\"T12:00:00\").getDay(); return w===6?\"saturday\":w===0?\"sunday\":\"weekday\" }\n\n  function subtotal(){\n    var s=vp(), p=PKGS[S.pkg];\n    if(p.pp) s+=p.pp*S.guests;\n    Object.keys(S.adds).forEach(function(k){ if(S.adds[k]&&!p.inc.includes(k)&&ADDONS[k].t!==\"custom\") s+=cost(k) });\n    s+=S.xh*EXTRA_HR; s+=S.ct*40; return s;\n  }\n\n  function alaPrice(p){ var s=vp(); p.inc.forEach(function(k){ if(ADDONS[k]) s+=cost(k) }); return s }\n\n  function customNames(){\n    var r=[]; Object.keys(S.adds).forEach(function(k){ if(S.adds[k]&&ADDONS[k]&&ADDONS[k].t===\"custom\") r.push(ADDONS[k].n) }); return r;\n  }\n\n  function enforceSetup(){ if(SETUP_DEPS.some(function(k){return!!S.adds[k]})) S.adds.setup=true }\n\n  \/\/ Calendar\n  function ck(y,m){ return y+\"-\"+String(m+1).padStart(2,\"0\") }\n  function fetchAv(y,m){\n    var k=ck(y,m); if(S.avail[k])return;\n    S.loading=true; renderCal();\n    fetch(CAL_WORKER+\"\/availability?month=\"+k)\n      .then(function(r){return r.json()})\n      .then(function(d){S.avail[k]=d.busyDates||[]})\n      .catch(function(){S.avail[k]=[]})\n      .finally(function(){S.loading=false;renderCal()});\n  }\n  function busy(ds){ var d=S.avail[ds.substring(0,7)]||[]; var e=d.find(function(x){return x.date===ds}); return e?e.blocks:[] }\n  function isFull(ds){ var b=busy(ds); if(b.includes(\"fullday\"))return true; if(dayKey(ds)===\"saturday\")return b.includes(\"morning\")&&b.includes(\"evening\"); return false }\n  function isPartial(ds){ return busy(ds).length>0&&!isFull(ds) }\n  function availBlocks(ds){ var b=busy(ds),all=BLOCKS[dayKey(ds)]||[]; if(b.includes(\"fullday\"))return[]; return all.filter(function(x){ if(x.key===\"fullday\")return!b.includes(\"morning\")&&!b.includes(\"evening\"); return!b.includes(x.key) }) }\n\n  \/\/ Render\n  function renderCal(){\n    var g=$(\"calGrid\"),l=$(\"calMonthLabel\"); l.textContent=MO[S.cm]+\" \"+S.cy;\n    if(S.loading){g.innerHTML='<div class=\"cal-loading\" style=\"grid-column:1\/-1\">Loading availability...<\/div>';return}\n    var h=\"\"; DS.forEach(function(d){h+='<div class=\"cal-header\">'+d+'<\/div>'});\n    var fd=new Date(S.cy,S.cm,1).getDay(),dm=new Date(S.cy,S.cm+1,0).getDate(),td=new Date();td.setHours(0,0,0,0);\n    for(var i=0;i<fd;i++)h+='<div class=\"cal-day cal-empty\"><\/div>';\n    for(var d=1;d<=dm;d++){\n      var ds=S.cy+\"-\"+String(S.cm+1).padStart(2,\"0\")+\"-\"+String(d).padStart(2,\"0\");\n      var dobj=new Date(S.cy,S.cm,d),past=dobj<td,today=dobj.getTime()===td.getTime(),sel=S.date===ds;\n      var full=!past&&isFull(ds),part=!past&&!full&&isPartial(ds);\n      var c=\"cal-day\";if(past)c+=\" cal-past\";if(today)c+=\" cal-today\";if(sel)c+=\" cal-selected\";if(full)c+=\" cal-busy-full\";else if(part)c+=\" cal-busy-partial\";\n      var dot=\"\";if(!past){var col=full?\"#c0392b\":part?\"#daa520\":\"#6B8F71\";dot='<span class=\"cal-dot\" style=\"background:'+col+'\"><\/span>'}\n      var oc=past||full?\"\":\" onclick=\\\"selectDate('\"+ds+\"')\\\"\";\n      h+='<div class=\"'+c+'\"'+oc+'>'+d+dot+'<\/div>';\n    }\n    g.innerHTML=h;\n    var dd=$(\"dateDisplay\");\n    if(S.date){var sd=new Date(S.date+\"T12:00:00\");dd.textContent=DN[sd.getDay()]+\", \"+MO[sd.getMonth()]+\" \"+sd.getDate()+\", \"+sd.getFullYear()}\n    else dd.textContent=\"Select a date to see pricing\";\n  }\n\n  function renderBlocks(){\n    var c=$(\"blockSelector\"),hi=$(\"blockHint\");\n    if(!S.date){c.innerHTML=\"\";hi.textContent=\"\";return}\n    var all=BLOCKS[S.day]||[],av=availBlocks(S.date),avk=av.map(function(x){return x.key});\n    if(all.length<=1){c.innerHTML=\"\";var b=blk();hi.textContent=S.day===\"weekday\"?\"Weekday events include \"+b.hours+\" hours with flexible start time \u00b7 $\"+b.price:b.sub+\" \u00b7 $\"+b.price}\n    else{c.innerHTML=\"\";all.forEach(function(o){var ok=avk.includes(o.key),btn=document.createElement(\"button\");btn.className=\"block-btn\"+(S.block===o.key?\" selected\":\"\");if(!ok){btn.style.opacity=\"0.4\";btn.style.cursor=\"not-allowed\";btn.style.textDecoration=\"line-through\"}btn.innerHTML='<div class=\"block-label\">'+o.label+'<\/div><div class=\"block-price\">'+o.sub+' \u00b7 $'+o.price+(!ok?' \u00b7 Booked':'')+'<\/div>';btn.onclick=function(){if(!ok)return;S.block=o.key;S.xh=0;render()};c.appendChild(btn)});hi.textContent=\"\"}\n    var ed=$(\"extraHoursDesc\");if(ed){var b=blk();ed.textContent=S.block===\"fullday\"?\"Full day already included \u2014 no extra hours needed\":\"$\"+EXTRA_HR+\" per additional hour beyond \"+b.hours+\"h\"}\n  }\n\n  function renderGuest(){$(\"guestBadge\").textContent=S.guests;var t=tbl();$(\"tableHint\").textContent=\"\u2248 \"+t+\" rectangular 6ft table\"+(t!==1?\"s\":\"\")}\n\n  function renderPkgs(){\n    var c=$(\"packageCards\");c.innerHTML=\"\";var v=vp();\n    Object.entries(PKGS).forEach(function([k,p]){\n      var sel=S.pkg===k,tot=v+(p.pp?p.pp*S.guests:0);\n      var card=document.createElement(\"div\");card.className=\"pkg-card\"+(sel?\" selected\":\"\");card.style.borderColor=sel?p.color:\"\";card.style.boxShadow=sel?\"0 4px 16px \"+p.color+\"22\":\"\";\n      card.onclick=function(){S.pkg=k;S.adds={};render()};\n      var inc=p.inc.length?'<div class=\"pkg-includes\">Includes: '+p.inc.map(function(x){return ADDONS[x]?ADDONS[x].n:x}).join(\" \u00b7 \")+'<\/div>':\"\";\n      var sav=\"\";if(p.pp>0){var a=alaPrice(p);if(tot<a)sav='<div class=\"pkg-savings\">Save $'+(a-tot).toLocaleString()+' vs \u00e0 la carte<\/div>'}\n      var img=p.img?'<img decoding=\"async\" class=\"pkg-img\" src=\"'+p.img+'\" alt=\"'+p.name+'\">':'<div class=\"pkg-img-placeholder\">Photo coming soon<\/div>';\n      card.innerHTML=img+'<div class=\"pkg-body\"><div class=\"pkg-top\"><div class=\"pkg-info\"><div class=\"pkg-tier\" style=\"color:'+p.color+'\">'+p.tier+'<\/div><div class=\"pkg-name\">'+p.name+'<\/div><div class=\"pkg-desc\">'+p.desc+'<\/div><\/div><div class=\"pkg-price-col\"><div class=\"pkg-price\" style=\"color:'+p.color+'\">$'+tot.toLocaleString()+'<\/div><div class=\"pkg-tax-note\">before tax<\/div>'+sav+'<\/div><\/div>'+inc+'<\/div>';\n      c.appendChild(card);\n    });\n  }\n\n  function renderAddOns(){\n    var p=PKGS[S.pkg],c=$(\"addOnsList\"),card=$(\"addOnsCard\");\n    var items=Object.entries(ADDONS).filter(function([k]){return!p.inc.includes(k)});\n    if(!items.length){card.style.display=\"none\";return}\n    card.style.display=\"\";c.innerHTML=\"\";\n    items.forEach(function([k,a]){\n      var cust=a.t===\"custom\",cs=cost(k),forced=k===\"setup\"&&SETUP_DEPS.some(function(x){return!!S.adds[x]}),chk=!!S.adds[k];\n      var row=document.createElement(\"label\");row.className=\"addon-row\";\n      var desc=a.d;if(forced)desc+=' \u00b7 <span style=\"color:var(--amber);font-weight:600\">Required with your selections<\/span>';\n      row.innerHTML='<div class=\"addon-left\"><input type=\"checkbox\" '+(chk?'checked':'')+(forced?' disabled style=\"opacity:.6\"':'')+'><div class=\"addon-img-placeholder\">'+a.i+'<\/div><div><div class=\"addon-name\">'+a.n+'<\/div><div class=\"addon-desc\">'+desc+'<\/div><\/div><\/div><div class=\"addon-price'+(cust?' custom':'')+'\">'+(cust?'Get a quote':'+$'+cs)+'<\/div>';\n      row.querySelector(\"input\").addEventListener(\"change\",function(){S.adds[k]=this.checked;enforceSetup();render()});\n      c.appendChild(row);\n    });\n  }\n\n  function renderTotal(){\n    var s=subtotal(),t=s*TAX;$(\"subtotalVal\").textContent=fmt(s);$(\"taxVal\").textContent=fmt(t);$(\"totalVal\").textContent=fmt(s+t);\n    var cn=customNames(),n=$(\"customNote\");\n    if(cn.length){n.innerHTML=\"\u2726 \"+cn.join(\", \")+\" \u2014 we'll connect you with our partners for a custom quote.\";n.style.display=\"\"}else n.style.display=\"none\";\n  }\n\n  function renderHours(){\n    $(\"hourVal\").textContent=S.xh;$(\"cocktailVal\").textContent=S.ct;\n    var c=$(\"extraHoursCard\");c.style.opacity=S.block===\"fullday\"?\"0.4\":\"1\";c.style.pointerEvents=S.block===\"fullday\"?\"none\":\"\";\n  }\n\n  function renderFormSummary(){\n    if(!S.formOpen)return;\n    var s=subtotal(),tot=s+s*TAX,p=PKGS[S.pkg],b=blk(),th=hrs()+S.xh;\n    var bl=b.key!==\"standard\"?\" \"+b.label:\"\";\n    var h='<strong>'+DAY_LABELS[S.day]+bl+'<\/strong> \u00b7 <strong>'+p.name+'<\/strong> \u00b7 '+S.guests+' guests \u00b7 '+th+'h \u00b7 <strong>'+fmt(tot)+'<\/strong> (incl. tax)';\n    var names=[];Object.keys(S.adds).forEach(function(k){if(S.adds[k]&&ADDONS[k]&&!p.inc.includes(k))names.push(ADDONS[k].n)});\n    if(S.ct>0)names.push(S.ct+\" cocktail table\"+(S.ct>1?\"s\":\"\"));\n    if(names.length)h+='<br>Add-ons: '+names.join(', ');\n    $(\"formSummary\").innerHTML=h;\n  }\n\n  function render(){renderCal();renderBlocks();renderGuest();renderPkgs();renderAddOns();renderHours();renderTotal();renderFormSummary()}\n\n  \/\/ Actions\n  window.selectDate=function(ds){var av=availBlocks(ds);if(!av.length)return;S.date=ds;S.day=dayKey(ds);S.block=av[0].key;S.xh=0;render()};\n  window.calNav=function(d){S.cm+=d;if(S.cm>11){S.cm=0;S.cy++}if(S.cm<0){S.cm=11;S.cy--}fetchAv(S.cy,S.cm);renderCal()};\n  window.changeHours=function(d){if(S.block===\"fullday\")return;S.xh=Math.max(0,S.xh+d);render()};\n  window.changeCocktail=function(d){S.ct=Math.max(0,Math.min(4,S.ct+d));render()};\n  window.toggleForm=function(){S.formOpen=!S.formOpen;$(\"bookingForm\").classList.toggle(\"open\",S.formOpen);$(\"bookingCta\").textContent=S.formOpen?\"Close Form \u00d7\":\"Request to Book \u2192\";if(S.formOpen)renderFormSummary()};\n\n  \/\/ Validation\n  var FIELDS=[[\"fFirst\",\"errFirst\"],[\"fLast\",\"errLast\"],[\"fEmail\",\"errEmail\"],[\"fPhone\",\"errPhone\"]];\n\n  function clearErr(){$(\"formError\").style.display=\"none\";FIELDS.forEach(function(f){$(f[0]).classList.remove(\"invalid\");$(f[1]).style.display=\"none\"})}\n  function showErr(fid,eid,msg){$(fid).classList.add(\"invalid\");var e=$(eid);e.textContent=msg;e.style.display=\"block\"}\n\n  window.submitBooking=async function(){\n    var fn=$(\"fFirst\").value.trim(),ln=$(\"fLast\").value.trim(),em=$(\"fEmail\").value.trim(),ph=$(\"fPhone\").value.trim(),btn=$(\"submitBtn\");\n    clearErr();var err=0;\n    if(!fn){showErr(\"fFirst\",\"errFirst\",\"First name is required\");err++}\n    if(!ln){showErr(\"fLast\",\"errLast\",\"Last name is required\");err++}\n    if(!em){showErr(\"fEmail\",\"errEmail\",\"Email is required\");err++}\n    else if(!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(em)){showErr(\"fEmail\",\"errEmail\",\"Please enter a valid email\");err++}\n    if(!ph){showErr(\"fPhone\",\"errPhone\",\"Phone number is required\");err++}\n    else if(!\/^[\\d\\s\\(\\)\\-\\+\\.]{7,20}$\/.test(ph)){showErr(\"fPhone\",\"errPhone\",\"Please enter a valid phone number\");err++}\n\n    if(err){\n      $(\"formError\").textContent=\"Please fix the highlighted fields above.\";$(\"formError\").style.display=\"block\";\n      var fi=document.querySelector(\".invalid\");if(fi)fi.scrollIntoView({behavior:\"smooth\",block:\"center\"});\n      FIELDS.forEach(function(f){$(f[0]).addEventListener(\"input\",function(){this.classList.remove(\"invalid\");$(f[1]).style.display=\"none\"},{once:true})});\n      return;\n    }\n\n    var payload={client:{firstName:fn,lastName:ln,email:em,phone:ph},event:buildPayload()};\n    btn.disabled=true;btn.innerHTML='<span class=\"spinner\"><\/span> Submitting...';\n    try{\n      var r=await fetch(WORKER,{method:\"POST\",headers:{\"Content-Type\":\"application\/json\"},body:JSON.stringify(payload)});\n      var res=await r.json();if(!r.ok)throw new Error(res.error||res.detail||\"Submission failed\");\n      $(\"bookingForm\").classList.remove(\"open\");$(\"bookingCta\").style.display=\"none\";$(\"successMsg\").style.display=\"\";\n    }catch(e){$(\"formError\").textContent=e.message||\"Something went wrong. Please try again or email us directly.\";$(\"formError\").style.display=\"block\"}\n    finally{btn.disabled=false;btn.innerHTML=\"Submit Inquiry\"}\n  };\n\n  function buildPayload(){\n    var s=subtotal(),tx=s*TAX,p=PKGS[S.pkg],b=blk(),t=tbl();\n    var adds=[];\n    Object.keys(S.adds).forEach(function(k){\n      if(!S.adds[k])return;var a=ADDONS[k];if(a.t===\"custom\"||p.inc.includes(k))return;\n      var u=1,up=a.p,det=\"\";\n      if(a.t===\"pp\"){u=S.guests;det=S.guests+\" \u00d7 $\"+a.p}\n      if(a.t===\"tbl\"){u=t;det=t+\" \u00d7 $\"+a.p}\n      if(a.t===\"flat\")det=\"flat rate\";\n      adds.push({name:a.n,unitPrice:up,units:u,cost:cost(k),detail:det});\n    });\n    return{\n      day:S.day,block:S.block,blockLabel:b.label||b.key,venuePrice:b.price,includedHours:b.hours,\n      packageKey:S.pkg,packageName:p.name,packagePerPerson:p.pp||0,\n      packageTotal:b.price+(p.pp?p.pp*S.guests:0),\n      guests:S.guests,tables:t,addOns:adds,extraHours:S.xh,cocktailTables:S.ct,\n      hasRealFlowers:!!S.adds.realFlowers,hasBarService:!!S.adds.barService,hasCatering:!!S.adds.catering,\n      subtotal:s,tax:tx,total:s+tx,\n      notes:$(\"fNotes\")?$(\"fNotes\").value.trim():\"\",\n      date:S.date||null,\n      eventType:$(\"fEventType\")?$(\"fEventType\").value:null\n    };\n  }\n\n  \/\/ Init\n  $(\"guestSlider\").addEventListener(\"input\",function(){S.guests=parseInt(this.value);render()});\n  fetchAv(S.cy,S.cm);\n  var nm=S.cm+1,ny=S.cy;if(nm>11){nm=0;ny++}fetchAv(ny,nm);\n  render();\n})();\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Montreal Event space A Space That Shapes Itself Around Your Gathering Luma Lofts is a natural-light event space in Montreal perfect for intimate gatherings, workshops, and small celebrations. It accommodates&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":3118,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-10109","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Event Venue: Explore Luma Lofts for Small Events - Luma Lofts<\/title>\n<meta name=\"description\" content=\"Host your next small celebration at Luma Lofts, the ideal event venue in Montreal for, a wedding ceremony, baby shower and networking events.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/lumalofts.ca\/fr\/weddings\/event-venues-workshops\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Event Venues &amp; Workshops\" \/>\n<meta property=\"og:description\" content=\"Host your next small celebration at Luma Lofts, the ideal event venue in Montreal for, a wedding ceremony, baby shower and networking events.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lumalofts.ca\/fr\/weddings\/event-venues-workshops\/\" \/>\n<meta property=\"og:site_name\" content=\"Luma Lofts\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/lumaloft\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-31T20:07:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimation du temps de lecture\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/\",\"url\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/\",\"name\":\"Event Venue: Explore Luma Lofts for Small Events - Luma Lofts\",\"isPartOf\":{\"@id\":\"https:\/\/lumalofts.ca\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg\",\"datePublished\":\"2025-08-20T14:15:49+00:00\",\"dateModified\":\"2026-08-31T20:07:23+00:00\",\"description\":\"Host your next small celebration at Luma Lofts, the ideal event venue in Montreal for, a wedding ceremony, baby shower and networking events.\",\"breadcrumb\":{\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#primaryimage\",\"url\":\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg\",\"contentUrl\":\"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/lumalofts.ca\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Weddings\",\"item\":\"https:\/\/lumalofts.ca\/weddings\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Event Venues &amp; Workshops\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/lumalofts.ca\/#website\",\"url\":\"https:\/\/lumalofts.ca\/\",\"name\":\"Luma Lofts \u2013 Creative Studio Space in Montreal\",\"description\":\"Creative Studio Space in Montreal\",\"publisher\":{\"@id\":\"https:\/\/lumalofts.ca\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/lumalofts.ca\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-CA\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\/\/lumalofts.ca\/#organization\",\"name\":\"Luma Lofts\",\"url\":\"https:\/\/lumalofts.ca\/\",\"logo\":{\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#local-main-organization-logo\"},\"sameAs\":[\"https:\/\/www.facebook.com\/lumaloft\/\",\"https:\/\/www.instagram.com\/lumalofts\/\"],\"telephone\":[],\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#local-main-organization-logo\",\"url\":\"https:\/\/lumalofts.ca\/wp-content\/uploads\/cropped-LUMA-logo.png\",\"contentUrl\":\"https:\/\/lumalofts.ca\/wp-content\/uploads\/cropped-LUMA-logo.png\",\"width\":512,\"height\":512,\"caption\":\"Luma Lofts\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Event Venue: Explore Luma Lofts for Small Events - Luma Lofts","description":"Host your next small celebration at Luma Lofts, the ideal event venue in Montreal for, a wedding ceremony, baby shower and networking events.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/lumalofts.ca\/fr\/weddings\/event-venues-workshops\/","og_locale":"fr_CA","og_type":"article","og_title":"Event Venues &amp; Workshops","og_description":"Host your next small celebration at Luma Lofts, the ideal event venue in Montreal for, a wedding ceremony, baby shower and networking events.","og_url":"https:\/\/lumalofts.ca\/fr\/weddings\/event-venues-workshops\/","og_site_name":"Luma Lofts","article_publisher":"https:\/\/www.facebook.com\/lumaloft\/","article_modified_time":"2026-08-31T20:07:23+00:00","og_image":[{"url":"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Estimation du temps de lecture":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/","url":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/","name":"Event Venue: Explore Luma Lofts for Small Events - Luma Lofts","isPartOf":{"@id":"https:\/\/lumalofts.ca\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#primaryimage"},"image":{"@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#primaryimage"},"thumbnailUrl":"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg","datePublished":"2025-08-20T14:15:49+00:00","dateModified":"2026-08-31T20:07:23+00:00","description":"Host your next small celebration at Luma Lofts, the ideal event venue in Montreal for, a wedding ceremony, baby shower and networking events.","breadcrumb":{"@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/"]}]},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#primaryimage","url":"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg","contentUrl":"https:\/\/lumalofts.ca\/wp-content\/uploads\/Pam-Kay-Montreal-Dubai-Photographer-12-782x1043.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/lumalofts.ca\/"},{"@type":"ListItem","position":2,"name":"Weddings","item":"https:\/\/lumalofts.ca\/weddings\/"},{"@type":"ListItem","position":3,"name":"Event Venues &amp; Workshops"}]},{"@type":"WebSite","@id":"https:\/\/lumalofts.ca\/#website","url":"https:\/\/lumalofts.ca\/","name":"Luma Lofts \u2013 Creative Studio Space in Montreal","description":"Creative Studio Space in Montreal","publisher":{"@id":"https:\/\/lumalofts.ca\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/lumalofts.ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-CA"},{"@type":["Organization","Place"],"@id":"https:\/\/lumalofts.ca\/#organization","name":"Luma Lofts","url":"https:\/\/lumalofts.ca\/","logo":{"@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#local-main-organization-logo"},"image":{"@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/lumaloft\/","https:\/\/www.instagram.com\/lumalofts\/"],"telephone":[],"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],"opens":"09:00","closes":"17:00"}]},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/lumalofts.ca\/weddings\/event-venues-workshops\/#local-main-organization-logo","url":"https:\/\/lumalofts.ca\/wp-content\/uploads\/cropped-LUMA-logo.png","contentUrl":"https:\/\/lumalofts.ca\/wp-content\/uploads\/cropped-LUMA-logo.png","width":512,"height":512,"caption":"Luma Lofts"}]}},"_links":{"self":[{"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/pages\/10109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/comments?post=10109"}],"version-history":[{"count":103,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/pages\/10109\/revisions"}],"predecessor-version":[{"id":10430,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/pages\/10109\/revisions\/10430"}],"up":[{"embeddable":true,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/pages\/3118"}],"wp:attachment":[{"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/media?parent=10109"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/categories?post=10109"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lumalofts.ca\/fr\/wp-json\/wp\/v2\/tags?post=10109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}