<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="en" />

<meta property="og:image" content="https://w2.chabad.org/media/images/1381/Nife13815054.png" itemprop="image" width="150" height="150" />
<meta property="og:image:width" content="150" />
<meta property="og:image:height" content="150" />
<meta name="keywords" content="Pesach" />
<meta name="title" content="Pesach - Chabad of Puerto Vallarta" />
<meta property="og:type" content="website" />
<meta name="scope-aids" content="3431758-3431766-3437896-5412415" />
<meta name="article-keywords" content="23157-8495-8497-16403-16669-2170-2898-20962" />
<meta name="scope-aid" content="3431758" />
<meta name="scope-aid" content="3431766" />
<meta name="scope-aid" content="3437896" />
<meta name="scope-aid" content="5412415" />
<meta name="article-keyword" content="23157" />
<meta name="article-keyword" content="8495" />
<meta name="article-keyword" content="8497" />
<meta name="article-keyword" content="16403" />
<meta name="article-keyword" content="16669" />
<meta name="article-keyword" content="2170" />
<meta name="article-keyword" content="2898" />
<meta name="article-keyword" content="20962" />
<meta property="og:url" content="https://www.chabadvallarta.com/templates/section_cdo/aid/5412415/jewish/Pesach.htm" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:site" content="@chabad" />
<meta property="og:title" content="Pesach" /><link rel="canonical" href="https://www.chabadvallarta.com/templates/section_cdo/aid/5412415/jewish/Pesach.htm" />
<link rel="icon" type="image/png" href="https://www.chabadvallarta.com/media/images/1381/Nife13815054.png" />
<link rel="Stylesheet" href="/css/fonts/font-awesome/font-awesome-5.css?v=2D6ABDDB" id="kfont-awesome" type="text/css"/>
<link rel="Stylesheet" href="/css/DefaultGrid.css?v=A13D74E8" id="kgrid" type="text/css"/>
<link rel="Stylesheet" href="/css/Elements.css?v=3A4C63F4" id="k6" type="text/css"/>
<link rel="Stylesheet" href="/css/vendor/ds/tokens/sites.css?v=72A49647" id="ksites-ds-css" type="text/css"/>
<link rel="Stylesheet" href="/css/new/main.css?v=BB63DD50" id="k7" type="text/css"/>
<link rel="Stylesheet" href="https://w2.chabad.org/css/cco/minisites/global.css" id="k20962" type="text/css"/>
<link rel="Stylesheet" href="/css/old/global.css?v=43DDBA77" id="k2898" type="text/css"/>
<link rel="Stylesheet" href="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/pesach-minisite.css?v=9/8/2026" id="k23157" type="text/css"/>
<link rel="Stylesheet" href="/css/cco/home/default/prettyPhoto.min.css?v=E5A10EA0" id="kprettyPhoto" type="text/css"/>

<script>$q=[];$j=function(f){$q.push(f);}</script>
	
 
	
	<style type="text/css">
		body{margin:0;}
	</style>
	
	


<script>
	window.dataLayer = window.dataLayer || [];
	dataLayer.push({"event":"datalayer-initialized","page":{"numberOfComments":0,"publicationDate":"2022-02-22","primaryArticleId":5412415,"title":"Pesach","author":"","authorId":0,"contentLevel1":"My Site","contentLevel2":"Jewish Holidays","contentLevel3":"Pesach","siteName":"Chabad of Puerto Vallarta"},"time":{"upcomingHoliday":"Yom Kippur","daysToUpcomingHoliday":3,"hebrewDate":"5787-07-07"}});
		dataLayer.push({ 'articleHierarchy': '-3431758-3431766-3437896-5412415-', 'keywords': '-k20962-k2898-k2170-k16669-k16403-k8497-k8495-k23157-', 'k': '-3431758-3431766-3437896-5412415--k20962-k2898-k2170-k16669-k16403-k8497-k8495-k23157-' });
	
</script>
<script>

(function(c,h,a,b,a,d){c[a]=c[a]||[];c[a].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=h.getElementsByTagName(b)[0],
j=h.createElement(b);j.async=true;
j.src='https://w6.chabad.org/mitzvah-tank.js';f.parentNode.insertBefore(j,f);
})(window,document,0,'script','dataLayer');</script>

	<!-- Start of StatCounter Code -->
	<script type="text/javascript">
	var sc_project = 11104187;var sc_partition = 62;var sc_invisible = 1;var sc_remove_link=1;var sc_security = "b78a377d";var sc_https = 1;
	</script>
	<script type="text/javascript" src="https://secure.statcounter.com/counter/counter_xhtml.js" defer async></script>
	<noscript><img src="//c63.statcounter.com/counter.php?sc_project=11104187&amp;java=0&amp;security=b78a377d&amp;invisible=1" border="0" /> </noscript>
	<!-- End of StatCounter Code -->


<!-- GetButton.io widget -->

<!-- /GetButton.io widget -->

<meta name="google-site-verification" content="2azzqEaKys0qwo3YGVMIHr7BjYXz23pc89yKen8SwDI" />
<link rel="icon" type="image/png" href="https://chabadvallarta.com/media/images/1160/AKcK11605551.png" />

<link href='https://webmk.co/sites/general/cdo-normalize.css' rel='stylesheet' type='text/css'>


<script type="text/javascript">
    (function () {
        var options = {
            whatsapp: "+523221417279", // WhatsApp number
            company_logo_url: "//static.getbutton.io/img/flag.png", // URL of company logo (png, jpg, gif)
            greeting_message: "", // Text of greeting message
            call_to_action: "", // Call to action
            button_color: "#FF6550", // Color of button
            position: "right", // Position may be 'right' or 'left'
            ga: true, // Google Analytics enabled
            branding: false, // Show branding string
            mobile: true, // Mobile version enabled
            desktop: true, // Desktop version enabled
            greeting: false, // Greeting message enabled
            shift_vertical: 0, // Vertical position, px
            shift_horizontal: 0, // Horizontal position, px
            domain: "chabadvallarta.com", // site domain
            key: "HMuJ7eutR9Wbhfr8Yn3Dcg", // pro-widget key
        };
        var proto = document.location.protocol, host = "getbutton.io", url = proto + "//static." + host;
        var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = url + '/widget-send-button/js/init.js';
        s.onload = function () { WhWidgetSendButton.init(host, proto, options); };
        var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);
    })();
</script><script src="https://webmk.co/sites/chabad-vallarta/vallarta-script.js"></script><title>
	Pesach - Chabad of Puerto Vallarta
</title></head>
<body class="lang_en dir_ltr cco_body cco_templateless_page section_root">
	
	
		<div width="100%" class="cco_templateless_template" style="z-index:100 !important;display:block !important;left:0px !important;top:0px !important;height:30px!important;width:100% !important;line-height:30px !important; position:relative !important; margin-bottom:0 !important; padding:0;text-indent: 25px;" align="Left"><a href="//www.ChabadVallarta.com" style="display:block!important;font-size:14px !important;">&laquo; Back to&nbsp;Chabad of Puerto Vallarta</a></div>
	
	<div class="cco_templatelates_content">
		
	<div class="co_content_container clearfix local_content" id="co_content_container">
		<div class="clearfix">
			<!-- BEGIN HEADER --><style>
    @import url('https://fonts.googleapis.com/css2?family=Assistant:wght@300;400;700');
    /* --- Add these styles for Hebrew Font --- */

/* General rule for body text when Hebrew */
body:lang(he) {
  font-family: 'Assistant', Montserrat, sans-serif; /* Use Assistant first, fallback to Montserrat */
}

/* Apply Assistant specifically to elements that used Montserrat */
:lang(he) .zmanim,
:lang(he) .textWrapper div, /* Includes .big and .wrapper-message */
:lang(he) .custom_message .message,
:lang(he) .co_calendar_text,
:lang(he) #footerContainer,
:lang(he) .footer,
:lang(he) .cco_templateless_template a,
:lang(he) .article-header__subtitle,
:lang(he) html body.cco_body .holidayDates,
:lang(he) html body.cco_body .holidayDates p,
:lang(he) div#chabad_head .chabad_navigator_bar ul li a {
     font-family: 'Assistant', Montserrat, sans-serif !important; /* Use !important to ensure override if needed */
}

/* Apply Assistant specifically to elements that used Oswald/Anton/Yellowtail (Headings, Captions etc.) */
:lang(he) .co_calendar_head,
:lang(he) .co_photo_gallery_head,
:lang(he) .custom_message .title,
:lang(he) .feature_caption,
:lang(he) .feature_caption a,
:lang(he) .features_title,
:lang(he) .prep-title,
:lang(he) .prep-title a, /* Added prep-title a */
:lang(he) .prepResource-title,
:lang(he) .sPromo-wrap .caption,
:lang(he) [class^=widget-],
:lang(he) .chabad_header .headerTitle,
:lang(he) .chabad_header .headerTitle a,
:lang(he) .article-header__title,
:lang(he) .centerName, /* Was Yellowtail */
:lang(he) .co_date,
:lang(he) .co_title_calendar a,
:lang(he) .photo_title {
     font-family: 'Assistant', Oswald, Arimo, Anton, sans-serif !important; /* Use !important to ensure override if needed */
     /* You might want a different Hebrew heading font here if Assistant looks too plain for titles */
}

:lang(he) .zmanim .time {
    float: left; /* Reverse float direction */
}

:lang(he) #co_calendar .item {
    float: right; /* Reverse float direction */
}

/* Add more RTL adjustments as needed based on testing */

/* --- End of Hebrew Font styles --- */
</style>
<div id="chabad_body_page">
<div id="chabad_main_content">
<div id="chabad_head">


<div class="chabad_header">
<div class="headerTitle">
<a href="/5412415" style="text-decoration:none">

PESACH

</a>
</div>
<div class="centerName">

At
Chabad of Puerto Vallarta

</div>
<div class="holidayDates">



<div class="widget-1 holiday_date custom v260 feed">
<div class="wrapper">

<div class="widget_header">
<h5>Holiday Date</h5>    
</div>
<div class="widget_content">
April 21 - 29, 2027</div></div>
</div>


</div>
</div>


<div id="navigation" class="chabad_navigator_bar">
<div class="chabad_menu_content">
<ul id="menu" class="navi">
<li class="item parent selected">
<a href="/article.asp?aid=5412415" class="parent selected">Home</a>
|
</li>
<li class="item parent">
<a href="/article.asp?aid=5412417" class="parent">SEDER & HOLIDAY MEALS</a>
|
</li>
<li class="item parent">
<a href="/article.asp?aid=5467653" class="parent">PASSOVER STORE</a>
|
</li>
<li class="item parent">
<a href="/article.asp?aid=7311726" class="parent">Seating Map Seder 2026</a>
</li>

</ul>
</div>
</div>



</div>
<div id="chabad_body_content">
<div class="chabad_left_column">
<div detached="true" type="static" id="ContentArea" name="content_area" actions="edit,delete" class="chabad_left_column"><!-- END HEADER -->
			
			
			<div class="clearfix bh mobile-only align_right">ב"ה</div>
			
			<div class="body_wrapper clearfix co_body">
				<div class="" id="co_body_container">
					
					<div id="ContentBody">
						
						
							<div class="content-area-parent no_margin">
								
	  

<div class="large_banner wrap-image">
<div class="bannerContainer">

<a href="/5412417" style="left: 0px; right: -2px; top: 0px;" ></a>

<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_flyer1.jpg" />
<div class="textWrapper">
<span>

<p class="big">Join us for the Pesach Seder & Holiday Meals</p>

<p class="wrapper-message">Celebrate Passover with family and friends, relive the exodus, discover the eternal meaning of the Haggadah, and enjoy a community Seder with hand-baked Shmurah Matzah, wine, and a wonderful dinner spiced with unique traditional customs.</p> 
</span>                     
<div class="bannerCta">

<button>RSVP</button></div>
</div>
</div>
</div>



<div class="sPromo-wrap sPromo-flex">

<a href="/5467653" ></a>

<img src="https://w2.chabad.org/media/images/1183/nmRi11833363.jpg" border="0" />
<div class="caption">
Passover Groceries</div>

</div>



<div class="sPromo-wrap sPromo-flex">

<a href="/5412417" ></a>

<img src="https://w2.chabad.org/media/images/1085/SQxv10855570.jpg" border="0" />
<div class="caption">
Passover RSVP</div>

</div>


<div class="sPromo-wrap sPromo-flex">

<a href="/6828703" ></a>

<img src="https://w2.chabad.org/media/images/1187/bcPc11872798.jpg" border="0" />
<div class="caption">
Passover Appeal</div>

</div>



<div class="custom_message">
<div class="titleIcon">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_pyramid.png" /></div>
<div class="title titleIcon">

What is Pesach?
</div>
<div class="message">
 
The eight-day festival of Passover is celebrated in the early spring, from the 15th through the 22nd of the Hebrew month of Nissan. Passover (Pesach) commemorates the emancipation of the Israelites from slavery in ancient Egypt. Pesach is observed by avoiding leaven, and highlighted by the Seder meals that include four cups of wine, eating matzah and bitter herbs, and retelling the story of the Exodus                                                              
</div>
<div class="read-more_link">

<a href="/871715">Read More</a>

</div>

</div>



<div class="zmanim">
<div class="prepResource-title">

Pesach Times</div>
<div class="zman-1">
<div class="zman-icon">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_chametz.png" />
</div>
<div class="zman-box">
<div class="title">
Finish eating Chametz before</div>
<div class="time">MM
April 1st 2026, 11:00 AM</div>
<div class="desc">
The absolute deadline for eating chametz is the morning before Passover, it is forbidden to eat chametz until the close of the festival in eight days.</div>
</div>
</div>
<div class="zman-2">
<div class="zman-icon">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_flame.png" />
</div>
<div class="zman-box">
<div class="title">
Sell and Burn Chametz before</div>
<div class="time">MM
April 1st 2026, 12:02 PM</div>
<div class="desc">

<p>The burning of the chametz will take place on Wednesday.</p></div>
</div>

</div>

</div>




<div class="pesach-resources">
<div class="titleIcon">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_seder.png" /></div>
<div class="prepResource-title">
Pesach Prep</div>
<div class="prep-item">
<div class="prepIcon">
<a href="/1753">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_cleaning.png" /></a>
</div>
<div class="prep-title">

<a href="/1753">Passover Cleaning</a></div>
</div>
<div class="prep-item">
<div class="prepIcon">
<a href="/111191">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_sell-chametz.png" /></a>
</div>
<div class="prep-title">

<a href="/111191">Sell Your Chametz</a></div>
</div>
<div class="prep-item">
<div class="prepIcon">
<a href="/265986">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_order-matzah.png" /></a>
</div>
<div class="prep-title">

<a href="/265986">Order Shmurah Matzah</a></div>
</div>
<div class="prep-item">
<div class="prepIcon">
<a href="/1980">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_seder-prep.png" /></a>
</div>
<div class="prep-title">

<a href="/1980">Seder Preparations</a></div>
</div>

</div>






<div id="co_calendar">
<div class="co_calendar_head">
<div>Upcoming events</div>
</div>
<div class="co_calendar_body">
<div class="co_calendar_gradient">
<div class="co_calendar_text calendar-width">

<div class="item first large-width">
<div class="co_date">Sep. 20, 2026</div>
<div class="co_title_calendar">
<a href="/calendar/view/events.asp?tdate=9/20/2026&sectionid=4306506&mosadid=10089&cat=0">
Yom Kippur Kol Nidrei
</a>
</div>
<div class="co_text_calendar">Kol Nidrei Services</div>
</div>

<div class="item last large-width">
<div class="co_date">Sep. 21, 2026</div>
<div class="co_title_calendar">
<a href="/calendar/view/events.asp?tdate=9/21/2026&sectionid=4306506&mosadid=10089&cat=0">
Yom Kippur Services and Break-fast
</a>
</div>
<div class="co_text_calendar">Yom Kippur Services and Break-fast</div>
</div>

</div>
</div>
</div>
<div class="co_calendar_footer" ></div>
</div>


              
<div class="latest_features">
<div class="titleIcon">
<img src="https://w2.chabad.org/images/Shluchim/minisites/themes/pesach/Pesach_matzah.png" /></div>
<div class="features_title titleIcon">
Learn More about Pesach</div>
<div class="co_content">

<div class="co_features">
<div class="wrap-image">
<a href="/1846">
<img class="statimg" src="https://w2.chabad.org/media/images/1004/tLsP10046106.jpg" />
</a>
<div class="wrap-image2"></div>
</div>
<div class="feature_caption">
<a href="/1846">How-To</a></div>
</div>
<div class="co_features">
<div class="wrap-image">
<a href="/1735">
<img class="statimg" src="https://w2.chabad.org/media/images/948/rRyi9480135.jpg" />
</a>
<div class="wrap-image2"></div>
</div>
<div class="feature_caption">
<a href="/1735">The Haggadah</a></div>
</div>
<div class="co_features">
<div class="wrap-image">
<a href="/1827">
<img class="statimg" src="https://w2.chabad.org/media/images/996/dqmA9966216.jpg" />
</a>
<div class="wrap-image2"></div>
</div>
<div class="feature_caption">
<a href="/1827">Pesach Story</a></div>
</div>
<div class="co_features">
<div class="wrap-image">
<a href="/1844">
<img class="statimg" src="https://w2.chabad.org/media/images/925/tuxn9252434.jpg" />
</a>
<div class="wrap-image2"></div>
</div>
<div class="feature_caption">
<a href="/1844">Pesach Study</a></div>
</div>
<div class="co_features">
<div class="wrap-image">
<a href="/32593">
<img class="statimg" src="https://w2.chabad.org/media/images/948/KKon9480101.jpg" />
</a>
<div class="wrap-image2"></div>
</div>
<div class="feature_caption">
<a href="/32593">Pesach Recipes</a></div>
</div>
<div class="co_features">
<div class="wrap-image">
<a href="/1923">
<img class="statimg" src="https://w2.chabad.org/media/images/877/OnTm8771266.jpg" />
</a>
<div class="wrap-image2"></div>
</div>
<div class="feature_caption">
<a href="/1923">Pesach Multimedia</a></div>
</div>
</div>
</div>







</div>
						
						<div class="break_floats"></div>
						
					</div>
				</div>
				
				
				
			</div>
			
			<!-- BEGIN FOOTER --></div></div>
<div id="border_bottom"></div>
</div>
</div>
</div>
<style>
@import url('https://fonts.googleapis.com/css2?family=Assistant:wght@300;400;700');
/* --- Add these styles for Hebrew Font --- */

/* General rule for body text when Hebrew */
body:lang(he) {
font-family: 'Assistant', Montserrat, sans-serif; /* Use Assistant first, fallback to Montserrat */
}

/* Apply Assistant specifically to elements that used Montserrat */
:lang(he) .zmanim,
:lang(he) .textWrapper div, /* Includes .big and .wrapper-message */
:lang(he) .custom_message .message,
:lang(he) .co_calendar_text,
:lang(he) #footerContainer,
:lang(he) .footer,
:lang(he) .cco_templateless_template a,
:lang(he) .article-header__subtitle,
:lang(he) html body.cco_body .holidayDates,
:lang(he) html body.cco_body .holidayDates p,
:lang(he) div#chabad_head .chabad_navigator_bar ul li a {
font-family: 'Assistant', Montserrat, sans-serif !important; /* Use !important to ensure override if needed */
}

/* Apply Assistant specifically to elements that used Oswald/Anton/Yellowtail (Headings, Captions etc.) */
:lang(he) .co_calendar_head,
:lang(he) .co_photo_gallery_head,
:lang(he) .custom_message .title,
:lang(he) .feature_caption,
:lang(he) .feature_caption a,
:lang(he) .features_title,
:lang(he) .prep-title,
:lang(he) .prep-title a, /* Added prep-title a */
:lang(he) .prepResource-title,
:lang(he) .sPromo-wrap .caption,
:lang(he) [class^=widget-],
:lang(he) .chabad_header .headerTitle,
:lang(he) .chabad_header .headerTitle a,
:lang(he) .article-header__title,
:lang(he) .centerName, /* Was Yellowtail */
:lang(he) .co_date,
:lang(he) .co_title_calendar a,
:lang(he) .photo_title {
font-family: 'Assistant', Oswald, Arimo, Anton, sans-serif !important; /* Use !important to ensure override if needed */
/* You might want a different Hebrew heading font here if Assistant looks too plain for titles */
}

:lang(he) .zmanim .time {
float: left; /* Reverse float direction */
}

:lang(he) #co_calendar .item {
float: right; /* Reverse float direction */
}

/* Add more RTL adjustments as needed based on testing */

/* --- End of Hebrew Font styles --- */
</style>
<script type="text/javascript" src="https://w2.Chabad.org/images/Shluchim/minisites/themes/form-redesign/form-script.js?v=1"></script>
<!-- END FOOTER -->
		</div>
		
		<aside class="page-tools-sidebar js-page-tools-sidebar hide_for_print">
<div class="page-tools js-page-tools-menu">
<div class="page-tools__section page-tools__section--share">
<a class="page-tools__tool js-share-popup page-tools__tool--facebook" data-share-url="https://www.facebook.com/dialog/share?app_id=188669250943&amp;display=popup&amp;href=https%3a%2f%2fwww.chabadvallarta.com%2ftemplates%2fsection_cdo%2faid%2f5412415%2fjewish%2fPesach.htm%23utm_medium%3dpage_tools%26utm_content%3ddesktop%26utm_source%3dFB">
				<i class="fa fa-facebook"></i>
			</a>
<a class="page-tools__tool js-share-popup page-tools__tool--twitter" data-share-url="https://twitter.com/intent/tweet?text=Pesach+-+Chabad+of+Puerto+Vallarta&amp;url=https%3a%2f%2fwww.chabadvallarta.com%2ftemplates%2fsection_cdo%2faid%2f5412415%2fjewish%2fPesach.htm%23utm_medium%3dpage_tools%26utm_content%3ddesktop%26utm_source%3dtwitter&amp;via=Chabad">
				<i class="fa fa-twitter"></i>
			</a>
<a class="page-tools__tool js-share-popup page-tools__tool--whatsapp d-lg-none js-share-whatsapp" data-share-url="whatsapp://send?text=Pesach+-+Chabad+of+Puerto+Vallarta https%3a%2f%2fwww.chabadvallarta.com%2ftemplates%2fsection_cdo%2faid%2f5412415%2fjewish%2fPesach.htm%23utm_medium%3dpage_tools%26utm_content%3ddesktop%26utm_source%3dwhatsapp">
				<i class="fa fa-whatsapp">
					<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" fill="#128c7e" width="1em" height="1em"><path d="M25 2C12.318 2 2 12.318 2 25c0 3.96 1.023 7.854 2.963 11.29L2.037 46.73c-.096.343-.003.711.245.966.191.197.451.304.718.304.08 0 .161-.01.24-.029l10.896-2.699C17.463 47.058 21.21 48 25 48c12.682 0 23-10.318 23-23S37.682 2 25 2zm11.57 31.116c-.492 1.362-2.852 2.605-3.986 2.772-1.018.149-2.306.213-3.72-.231-.857-.27-1.957-.628-3.366-1.229-5.923-2.526-9.791-8.415-10.087-8.804-.295-.389-2.411-3.161-2.411-6.03s1.525-4.28 2.067-4.864c.542-.584 1.181-.73 1.575-.73s.787.005 1.132.021c.363.018.85-.137 1.329 1.001.492 1.168 1.673 4.037 1.819 4.33.148.292.246.633.05 1.022s-.294.632-.59.973-.62.76-.886 1.022c-.296.291-.603.606-.259 1.19s1.529 2.493 3.285 4.039c2.255 1.986 4.158 2.602 4.748 2.894.59.292.935.243 1.279-.146.344-.39 1.476-1.703 1.869-2.286s.787-.487 1.329-.292c.542.194 3.445 1.604 4.035 1.896.59.292.984.438 1.132.681.148.242.148 1.41-.344 2.771z"/></svg>
				</i>
			</a>
<a class="page-tools__tool js-share-popup page-tools__tool--pinterest d-none d-lg-block" data-share-url="http://pinterest.com/pin/create/button/?url=https%3a%2f%2fwww.chabadvallarta.com%2ftemplates%2fsection_cdo%2faid%2f5412415%2fjewish%2fPesach.htm%23utm_medium%3dpage_tools%26utm_content%3ddesktop%26utm_source%3dpinterest&amp;description=Pesach+-+Chabad+of+Puerto+Vallarta">
				<i class="fa fa-pinterest"></i>
			</a>
<a class="page-tools__tool" onclick="showEmailLayer(this);">
<i class="fa fa-envelope"></i>
</a>
</div>
<div class="page-tools__section page-tools__section--other js-page-tool-other">
<div class="page-tools__tool popover-parent d-lg-block">
<div class="popover popover--right align_left nowrap">
<div class="popover__content">
<label class="bold bottom_margin block">
Print Options:
</label>
<form class="vcenter" name="print-form" onsubmit="coPrint(event, 3437896);return false;">
<div>
<label><input type="checkbox" name="print-green"><span title="Save paper and ink">Print without images <i class="fa fa-leaf text-green"></i></span></label>
</div>
<br/>
<div class="center">
<button class="co-button page-tools__print-button">Print</button>
</div>
</form>
</div>
</div>
<i class="fa fa-print"></i>
</div>
</div>
</div>
<div class="js-fab-wrapper fab-wrapper">
<div class="fab">
<i class="fab-icon"></i>
</div>
</div>
</aside>
<!-- END CACHE -->
	</div>

	</div>

	<div id="BodyContainer">
		<div class="g960 footer">
			<div class="poweredby large_bottom_margin">
				



	<div class="footer3">
		<span class="footer-title" >Chabad of Puerto Vallarta</span>
		<div class="footer-address">
			<span class="footer-street">Francisco Medina Asencio 1951 Local 1a</span>
			<span class="footer-city-state">Puerto Vallarta, JAL 48333</span>
		</div>
			<span class="footer-country">Mexico</span><span>52-322-141-7279</span>
	</div>
	<img src="https://w2.chabad.org/images/global/spacer.gif" width="1" height="6" border="0" /><br />



Powered by <a href="https://www.chabad.org/" target="_new" class="">Chabad.org</a> &copy; 1993-2026 <a href="/4026210" target="_blank" class="privacy-link">Privacy Policy</a>




			</div>
		</div>
	</div>
	
	

	
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/os/jquery-latest.min.js?v=278824AF"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/os/jquery.prettyPhoto.js?v=DEFC22CC"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/co/dist/CoLib.js?v=CC07618E"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/WebComponents/bundles/magen-cdo-global.js?v=5457FBE7"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/custom/minisites.js?v=F38E4DA5"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/custom/subscribeprompt.js?v=86D84DC2"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/modules/pagetools.js?v=930B07AB"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/custom/deprecated.js?v=D506A83E"></script>
<script type="text/javascript" src="https://w2.chabad.org/scripts/js/OverrideJSDocumentWrite.js?v=9A0227AA"></script><script>$j = $j.fn ? $j : jQuery;$j(()=>{$q.forEach(f=>{try{f.call(window);}catch(ex){console.error(ex);}});})</script>
	
<script  language="javascript" type="text/javascript"> Co.Settings      = {CacheClassName:'js-cache-default',MosadName:'Chabad of Puerto Vallarta'}; Co.ArticleId     = '5412415';Co.SectionId     = 3437896;Co.PartnerSiteId = 0;Co.SiteId        = 10089;Co.IsMobilePage  = false;Co.IsResponsive  = false;Co.DbDomain      = 'ChabadVallarta.com';Co.LanguageCode  = '';Co.LoginStatus   = 'None';</script>
	
	
 




<script>var _msdaf_id= 'f0736218b3749'</script><script src='https://app.dafwidget.com/api/js/source.js'></script><script>
(function () {

  // ============================================================
  // GATE ON URL
  // ============================================================
  if (!window.location.href.includes('7418518')) return;

  // ============================================================
  // CONFIG — Google Sheet published as CSV.
  // Columns: Item Name, Image URL  (match on the item name WITHOUT the price)
  // File > Share > Publish to web > (this sheet) > CSV
  // ============================================================
  var SHEET_CSV = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vT8uOBS4hwLW0OCJMFARCg503mTDQX9O9JN0F6H2ZPXVjSWOjj_hJMParRB7pPo70EevF0-VcogA9te/pub?gid=0&single=true&output=csv';

  // ============================================================
  // CONDITIONAL SUB-FIELDS
  //   [ conditional <li> id , EXACT item name (data-pv-name) ]
  // ============================================================
  var SUB_FIELDS = [
    ['id_74', 'Grilled Salmon'],
    ['id_75', 'Grilled Chicken'],
    ['id_76', 'Shnitzel']
  ];
  // ============================================================
  // FONTS
  // ============================================================
  var fontLink = document.createElement('link');
  fontLink.rel  = 'stylesheet';
  fontLink.href = 'https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800&family=Playfair+Display:wght@600;700;800&display=swap';
  document.head.appendChild(fontLink);

  // ============================================================
  // STYLES
  // ============================================================
  var style = document.createElement('style');
  style.textContent = `
    :root {
      --pv-primary:        #b48a80;   /* warm terracotta/rose from old form */
      --pv-primary-dark:   #9a6f65;
      --pv-primary-light:  rgba(180,138,128,0.45);
      --pv-primary-faint:  rgba(180,138,128,0.06);
      --pv-primary-border: rgba(180,138,128,0.35);
      --pv-primary-bg:     rgba(180,138,128,0.13);
      --pv-text-dark:  #3b3b3b;
      --pv-text-med:   #535353;
      --pv-text-light: #8b8b8b;
      --pv-border:       #e0d6d3;
      --pv-border-light: #efe9e7;
      --pv-bg-input: #efe9e7;
      --pv-bg-light: #faf7f6;
      --pv-shadow:   0px 2px 10px rgba(0,0,0,0.05);
      --pv-radius: 12px;
    }

    /* ── SHELL ─────────────────────────────────── */
    #formContainer .form-all {
      font-family: 'Poppins', sans-serif !important;
      width: 100% !important;
      max-width: 1040px !important;
      margin: 0 auto !important;
      padding: 30px 20px 100px !important;
      background: #fff !important;
      box-shadow: none !important;
    }
li#id_72 { display: none !important; }
    .co_body .content .form-all li.form-input-wide,
    .co_body .content .form-all .form-line { padding: 0 !important; }
    .co_body .content .form-all .form-line { grid-template-columns: unset !important; }
    .form-section { list-style: none !important; padding: 0 !important; margin: 0 !important; }
    .form-all .form-label, .form-all .form-label-left, .form-all .form-label-right { width: auto !important; float: none !important; }
    .form-all .label-message { display: none !important; }
    #GenFormStyles { display: none !important; }

    /* ── SECTION HEADERS ───────────────────────── */
    .form-all .form-input-wide .form-header-group {
      margin: 50px 0 20px !important; background: transparent !important; border: none !important; padding: 0 !important; text-align: center !important;
    }
    #cid_1 .form-header-group { margin-top: 10px !important; }
    .form-all h2.form-header {
      font-family: 'Playfair Display', serif !important; font-weight: 700 !important;
      font-size: 34px !important; color: var(--pv-primary) !important;
      text-transform: capitalize !important; margin: 0 !important; padding: 0 !important;
      border: none !important; background: transparent !important; line-height: 1.15 !important;
    }
    .form-all .form-subHeader {
      font-family: 'Poppins', sans-serif !important; font-weight: 400 !important;
      font-size: 15px !important; color: var(--pv-text-light) !important;
      margin-top: 8px !important; text-transform: none !important;
    }

    /* ── ITEM GRID: 2 PER ROW ──────────────────── */
    .pv-item-grid {
      display: grid !important; grid-template-columns: repeat(2, 1fr) !important;
      gap: 16px !important; width: 100% !important; margin-bottom: 6px !important;
      align-items: start !important;
    }
    li.form-line.pv-menu-item {
      border: 1px solid var(--pv-border) !important; border-radius: var(--pv-radius) !important;
      box-shadow: var(--pv-shadow) !important; overflow: hidden !important;
      display: flex !important; align-items: center !important; padding: 0 !important;
      min-height: 120px !important; position: relative !important;
      transition: border-color 0.25s, box-shadow 0.25s !important; background: #fff !important; margin: 0 !important;
    }
    li.form-line.pv-menu-item.pv-selected {
      border: 2px solid var(--pv-primary) !important; box-shadow: 0 0 0 1px var(--pv-primary) !important;
    }
    .pv-item-card { padding: 10px !important; display: flex !important; align-items: center !important; width: 100% !important; height: 100% !important; min-width: 0 !important; gap: 12px !important; }
    .pv-item__img { width: 92px !important; height: 92px !important; border-radius: 8px !important; object-fit: cover !important; flex-shrink: 0 !important; background: var(--pv-bg-light) !important; display: block !important; }
    .pv-item__info { display: flex !important; flex-direction: column !important; gap: 2px !important; flex: 1 !important; min-width: 0 !important; }
    .pv-item__name { font-family: 'Poppins', sans-serif !important; font-weight: 700 !important; font-size: 16px !important; color: var(--pv-text-dark) !important; text-transform: capitalize !important; line-height: 1.2 !important; margin: 0 !important; padding: 0 !important; background: transparent !important; border: none !important; }
    .pv-item__desc { font-family: 'Poppins', sans-serif !important; font-weight: 400 !important; font-size: 12px !important; color: var(--pv-text-light) !important; margin: 2px 0 0 !important; padding: 0 !important; line-height: 1.35 !important; }
    .pv-item__price { font-family: 'Poppins', sans-serif !important; font-weight: 700 !important; font-size: 17px !important; color: var(--pv-primary) !important; margin-top: 6px !important; }
    .pv-item__ctrl { display: flex !important; flex-direction: column !important; align-items: flex-end !important; flex-shrink: 0 !important; }
    .pv-qty-control { display: flex !important; align-items: center !important; gap: 2px !important; background: var(--pv-bg-input) !important; border: 1px solid var(--pv-primary-border) !important; border-radius: 8px !important; padding: 3px 4px !important; height: 44px !important; width: 118px !important; box-sizing: border-box !important; transition: all 0.25s !important; }
    .pv-qty-btn { width: 34px !important; height: 36px !important; background: #fff !important; border: none !important; border-radius: 6px !important; cursor: pointer !important; display: flex !important; align-items: center !important; justify-content: center !important; font-size: 20px !important; font-family: 'Poppins', sans-serif !important; color: var(--pv-text-dark) !important; line-height: 1 !important; flex-shrink: 0 !important; transition: background 0.15s, transform 0.1s !important; padding: 0 !important; }
    .pv-qty-btn:hover { background: #f0ebe9 !important; }
    .pv-qty-btn:active { transform: scale(0.9) !important; }
    .pv-qty-display { flex: 1 !important; display: flex !important; align-items: center !important; justify-content: center !important; font-family: 'Poppins', sans-serif !important; font-weight: 700 !important; font-size: 17px !important; color: var(--pv-text-dark) !important; background: rgba(255,255,255,0.5) !important; border-radius: 6px !important; height: 36px !important; user-select: none !important; }
    li.form-line.pv-menu-item.pv-selected .pv-qty-control { background: var(--pv-primary) !important; border-color: var(--pv-primary) !important; }
    li.form-line.pv-menu-item.pv-selected .pv-qty-btn { background: rgba(255,255,255,0.18) !important; color: #fff !important; }
    li.form-line.pv-menu-item.pv-selected .pv-qty-btn:hover { background: rgba(255,255,255,0.3) !important; }
    li.form-line.pv-menu-item.pv-selected .pv-qty-display { background: transparent !important; color: #fff !important; }

    /* ── NESTED CONDITIONAL SUB-FIELD (inside a card) ── */
    li.form-line.pv-menu-item.pv-has-sub {
      flex-direction: column !important; align-items: stretch !important; overflow: visible !important;
    }
    li.form-line.pv-menu-item.pv-has-sub .pv-item-card { width: 100% !important; height: auto !important; }
    li.form-line.pv-sub-field {
      width: 100% !important; margin: 0 !important; padding: 12px !important;
      box-sizing: border-box !important; border: none !important;
      border-top: 1px dashed var(--pv-border) !important;
      background: transparent !important; box-shadow: none !important;
      min-height: 0 !important; list-style: none !important; float: none !important;
    }
    li.form-line.pv-sub-field .form-label-left,
    li.form-line.pv-sub-field .form-label {
      position: static !important; opacity: 1 !important; width: 100% !important; height: auto !important;
      float: none !important; display: block !important; overflow: visible !important;
      pointer-events: auto !important; margin: 0 0 6px !important; padding: 0 !important; text-align: left !important;
    }
    li.form-line.pv-sub-field label {
      font-family: 'Poppins', sans-serif !important; font-weight: 600 !important;
      font-size: 13px !important; color: var(--pv-text-med) !important;
      float: none !important; width: auto !important; margin: 0 !important;
    }
    li.form-line.pv-sub-field .form-required { color: var(--pv-primary) !important; }
    li.form-line.pv-sub-field .form-input,
    li.form-line.pv-sub-field .form-input-wide {
      position: static !important; opacity: 1 !important; width: 100% !important; height: auto !important;
      float: none !important; display: block !important; max-width: 100% !important;
      overflow: visible !important; pointer-events: auto !important; padding: 0 !important;
    }
    li.form-line.pv-sub-field .form-dropdown,
    li.form-line.pv-sub-field select {
      width: 100% !important; max-width: 100% !important; height: 44px !important;
      border: 2px solid var(--pv-border-light) !important; border-radius: 10px !important;
      padding: 0 12px !important; font-family: 'Poppins', sans-serif !important;
      font-size: 14px !important; color: var(--pv-text-dark) !important;
      background: #fff !important; box-sizing: border-box !important; outline: none !important; box-shadow: none !important;
    }
    li.form-line.pv-sub-field .form-dropdown:focus,
    li.form-line.pv-sub-field select:focus { border-color: var(--pv-primary) !important; }

    /* ── SECTION BOX (Shabbat / grouped sections) ─ */
    .pv-section-box {
      border: 1px solid var(--pv-primary-border) !important; border-radius: 16px !important;
      background: var(--pv-primary-faint) !important; padding: 10px 26px 30px !important;
      margin: 40px 0 10px !important;
    }
    .pv-section-box .form-header-group { margin-top: 30px !important; }

    /* ── TOP NOTES BLOCK (#id_36) ──────────────── */
    #id_36 { margin-bottom: 20px !important; }
    #text_36 {
      border: 1px solid var(--pv-primary-border) !important; border-radius: var(--pv-radius) !important;
      background: var(--pv-primary-faint) !important; padding: 22px 28px !important;
      font-family: 'Poppins', sans-serif !important; color: var(--pv-text-dark) !important;
    }
    #text_36 p { font-family: 'Poppins', sans-serif !important; font-size: 14px !important; color: var(--pv-text-med) !important; margin: 0 0 8px !important; line-height: 1.5 !important; }
    #text_36 p b, #text_36 p strong { color: var(--pv-primary-dark) !important; }
    #text_36 ul { margin: 8px 0 0 !important; padding-left: 20px !important; }
    #text_36 li { font-family: 'Poppins', sans-serif !important; font-size: 13px !important; color: var(--pv-text-med) !important; line-height: 1.6 !important; margin-bottom: 4px !important; }

    /* ── DONATION (#id_57 control_amount) ──────── */
    #id_57 { margin-top: 15px !important; }
    #id_57 #label_57, #id_57 .form-label-left {
      display: block !important; float: none !important; width: 100% !important; text-align: center !important; margin-bottom: 14px !important;
    }
    #id_57 #label_57 label {
      font-family: 'Playfair Display', serif !important; font-weight: 700 !important;
      font-size: 22px !important; color: var(--pv-primary) !important;
    }
    #id_57 .form-input { width: 100% !important; max-width: 100% !important; float: none !important; }
    #id_57 .form-multiple-column {
      display: flex !important; flex-wrap: wrap !important; gap: 12px !important; justify-content: center !important; width: 100% !important;
    }
    #id_57 .clearfix { display: none !important; }
    #id_57 .form-radio-item {
      flex: 1 1 130px !important; max-width: 200px !important; clear: none !important; float: none !important;
      display: flex !important; align-items: center !important; justify-content: center !important; gap: 10px !important;
      background: var(--pv-bg-light) !important; border: 1px solid var(--pv-border) !important;
      border-radius: var(--pv-radius) !important; padding: 16px 18px !important; cursor: pointer !important;
      box-sizing: border-box !important; margin: 0 !important; transition: border-color 0.15s, background 0.15s !important;
    }
    #id_57 .form-radio-item:hover { border-color: var(--pv-primary) !important; }
    #id_57 .form-radio-item.pv-checked { border-color: var(--pv-primary) !important; background: var(--pv-primary-bg) !important; }
    #id_57 .form-radio, #id_57 input[type="radio"] {
      appearance: none !important; -webkit-appearance: none !important; width: 20px !important; height: 20px !important; min-width: 20px !important;
      border: 2px solid var(--pv-border) !important; border-radius: 50% !important; margin: 0 !important; cursor: pointer !important;
      position: relative !important; flex-shrink: 0 !important; background: #fff !important; transition: border-color 0.15s !important;
    }
    #id_57 input[type="radio"]:checked { border-color: var(--pv-primary) !important; }
    #id_57 input[type="radio"]:checked::after {
      content: '' !important; position: absolute !important; top: 50% !important; left: 50% !important;
      transform: translate(-50%, -50%) !important; width: 10px !important; height: 10px !important;
      border-radius: 50% !important; background: var(--pv-primary) !important;
    }
    #id_57 .form-radio-item label { font-family: 'Poppins', sans-serif !important; font-weight: 600 !important; font-size: 17px !important; color: var(--pv-text-dark) !important; cursor: pointer !important; margin: 0 !important; float: none !important; width: auto !important; }
    #id_57 .form-radio-other-input {
      appearance: auto !important; -webkit-appearance: auto !important; width: 90px !important; height: auto !important;
      border: 2px solid var(--pv-border-light) !important; border-radius: 8px !important; padding: 8px 10px !important;
      font-family: 'Poppins', sans-serif !important; font-size: 15px !important; background: #fff !important;
    }

    /* ── ORDER SUMMARY BOX ─────────────────────── */
    #pv-order-box-el {
      border: 1px solid var(--pv-primary-light) !important; border-radius: 14px !important;
      padding: 30px !important; margin-top: 55px !important; background: #fff !important; display: none;
    }
    .pv-order-box-title { font-family: 'Playfair Display', serif !important; font-weight: 700 !important; font-size: 28px !important; color: var(--pv-text-dark) !important; margin: 0 0 16px !important; }
    .pv-order-divider { width: 100% !important; height: 1px !important; background: var(--pv-border) !important; margin-bottom: 22px !important; }
    #id_67 { padding: 0 !important; margin: 0 !important; }
    .pv-order-items { display: flex !important; flex-direction: column !important; gap: 12px !important; margin-bottom: 18px !important; }
    .pv-order-line { display: flex !important; align-items: center !important; justify-content: space-between !important; padding-bottom: 8px !important; border-bottom: 1px dashed var(--pv-border-light) !important; animation: pvFadeUp 0.3s ease forwards !important; }
    @keyframes pvFadeUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
    .pv-order-line__left { display: flex !important; align-items: center !important; gap: 16px !important; }
    .pv-order-qty  { font-family:'Poppins',sans-serif !important; font-weight:700 !important; font-size:16px !important; color:var(--pv-primary) !important; }
    .pv-order-name { font-family:'Poppins',sans-serif !important; font-weight:400 !important; font-size:18px !important; color:var(--pv-text-dark) !important; }
    .pv-order-price{ font-family:'Poppins',sans-serif !important; font-weight:600 !important; font-size:18px !important; color:var(--pv-text-dark) !important; }
.pv-order-side {
      display: inline-block !important; margin-left: 10px !important;
      font-family: 'Poppins', sans-serif !important; font-weight: 500 !important;
      font-size: 12px !important; color: var(--pv-primary-dark) !important;
      background: var(--pv-primary-bg) !important; border-radius: 20px !important;
      padding: 3px 11px !important; vertical-align: middle !important; white-space: nowrap !important;
    }
    .pv-order-side--empty {
      color: var(--pv-text-light) !important; background: var(--pv-bg-light) !important;
      border: 1px dashed var(--pv-border) !important; font-style: italic !important;
    }

    /* ── NESTED CONDITIONAL SUB-FIELD (inside a card) ── */
    li.form-line.pv-menu-item.pv-has-sub {
      flex-direction: column !important; align-items: stretch !important; overflow: visible !important;
    }
    li.form-line.pv-menu-item.pv-has-sub .pv-item-card { width: 100% !important; height: auto !important; order: 1 !important; }
    li.form-line.pv-menu-item.pv-has-sub .form-label-left,
    li.form-line.pv-menu-item.pv-has-sub > .form-input { order: 0 !important; }
    li.form-line.pv-sub-field {
      width: 100% !important; margin: 0 !important; padding: 12px !important;
      box-sizing: border-box !important; border: none !important;
      border-top: 1px dashed var(--pv-border) !important;
      background: transparent !important; box-shadow: none !important;
      min-height: 0 !important; list-style: none !important; float: none !important;
      order: 2 !important;
    }
    li.form-line.pv-sub-field .form-label-left,
    li.form-line.pv-sub-field .form-label {
      position: static !important; opacity: 1 !important; width: 100% !important; height: auto !important;
      float: none !important; display: block !important; overflow: visible !important;
      pointer-events: auto !important; margin: 0 0 6px !important; padding: 0 !important; text-align: left !important;
    }
    li.form-line.pv-sub-field label {
      font-family: 'Poppins', sans-serif !important; font-weight: 600 !important;
      font-size: 13px !important; color: var(--pv-text-med) !important;
      float: none !important; width: auto !important; margin: 0 !important;
    }
    li.form-line.pv-sub-field .form-required { color: var(--pv-primary) !important; }
    li.form-line.pv-sub-field .form-input,
    li.form-line.pv-sub-field .form-input-wide {
      position: static !important; opacity: 1 !important; width: 100% !important; height: auto !important;
      float: none !important; display: block !important; max-width: 100% !important;
      overflow: visible !important; pointer-events: auto !important; padding: 0 !important;
    }
    li.form-line.pv-sub-field .form-dropdown,
    li.form-line.pv-sub-field select {
      width: 100% !important; max-width: 100% !important; height: 44px !important;
      border: 2px solid var(--pv-border-light) !important; border-radius: 10px !important;
      padding: 0 12px !important; font-family: 'Poppins', sans-serif !important;
      font-size: 14px !important; color: var(--pv-text-dark) !important;
      background: #fff !important; box-sizing: border-box !important; outline: none !important; box-shadow: none !important;
    }
    li.form-line.pv-sub-field .form-dropdown:focus,
    li.form-line.pv-sub-field select:focus { border-color: var(--pv-primary) !important; }
    li.form-line.pv-sub-field .form-error-message,
    li.form-line.pv-sub-field .form-error-arrow {
      position: static !important; margin-top: 6px !important; max-width: 100% !important;
      box-sizing: border-box !important; font-family: 'Poppins', sans-serif !important; font-size: 12px !important;
    }
    #id_67 {
      display: flex !important; align-items: center !important; justify-content: space-between !important;
      background: var(--pv-primary-bg) !important; border-radius: 8px !important; padding: 20px 22px !important; margin-top: 0 !important;
    }
    #id_67 #label_67 { width: auto !important; float: none !important; }
    #id_67 #label_67 label { font-family: 'Poppins', sans-serif !important; font-weight: 600 !important; font-size: 22px !important; color: var(--pv-text-dark) !important; }
    #id_67 #cid_67 { float: none !important; max-width: none !important; }
    #total_amount { font-family: 'Poppins', sans-serif !important; font-weight: 800 !important; font-size: 24px !important; color: var(--pv-primary) !important; }

    /* ── DELIVERY + CHECKOUT BOX ───────────────── */
    #pv-checkout-box-el {
      border: 1px solid var(--pv-primary-light) !important; border-radius: 14px !important;
      padding: 34px !important; margin-top: 40px !important; background: #fff !important;
    }
    #pv-checkout-box-el .form-header-group { margin-top: 0 !important; text-align: left !important; margin-bottom: 20px !important; }
    #pv-checkout-box-el h2.form-header { font-size: 26px !important; }
    #pv-checkout-box-el .form-line { display: flex !important; flex-direction: column !important; padding: 0 0 20px !important; width: 100% !important; }
    #pv-checkout-box-el .form-input, #pv-checkout-box-el .form-input-wide { width: 100% !important; float: none !important; max-width: 100% !important; display: block !important; }
    #pv-checkout-box-el .form-label-left { width: 100% !important; float: none !important; display: block !important; margin-bottom: 8px !important; }
    #pv-checkout-box-el .form-label-left label { font-family: 'Poppins', sans-serif !important; font-weight: 600 !important; font-size: 16px !important; color: var(--pv-text-med) !important; }
    #pv-checkout-box-el .form-textbox, #pv-checkout-box-el .form-dropdown {
      width: 100% !important; height: 52px !important; border: 2px solid var(--pv-border-light) !important;
      border-radius: var(--pv-radius) !important; padding: 0 16px !important; font-family: 'Poppins', sans-serif !important;
      font-size: 16px !important; color: var(--pv-text-dark) !important; outline: none !important;
      transition: border-color 0.15s !important; box-sizing: border-box !important; background: #fff !important; box-shadow: none !important;
    }
    #pv-checkout-box-el .form-textbox:focus, #pv-checkout-box-el .form-dropdown:focus { border-color: var(--pv-primary) !important; }
    #pv-checkout-box-el .form-textarea {
      width: 100% !important; min-height: 120px !important; border: 2px solid var(--pv-border-light) !important;
      border-radius: var(--pv-radius) !important; padding: 14px 16px !important; font-family: 'Poppins', sans-serif !important;
      font-size: 16px !important; color: var(--pv-text-dark) !important; outline: none !important; resize: vertical !important;
      transition: border-color 0.15s !important; box-sizing: border-box !important;
    }
    #pv-checkout-box-el .form-textarea:focus { border-color: var(--pv-primary) !important; }
    #pv-checkout-box-el .form-sub-label { font-family: 'Poppins', sans-serif !important; font-size: 12px !important; color: var(--pv-text-light) !important; margin-top: 4px !important; display: block !important; }
    /* date fields */
    #pv-checkout-box-el .date-fields { display: inline-flex !important; align-items: center !important; gap: 4px !important; background: #fff !important; border: 2px solid var(--pv-border-light) !important; border-radius: var(--pv-radius) !important; padding: 0 14px !important; height: 52px !important; }
    #pv-checkout-box-el .date-fields:focus-within { border-color: var(--pv-primary) !important; }
    #pv-checkout-box-el .date-fields input.form-textbox { border: none !important; height: auto !important; width: 40px !important; padding: 0 !important; text-align: center !important; background: transparent !important; }
    #pv-checkout-box-el #year_63 { width: 60px !important; }
    #pv-checkout-box-el .date-fields .form-sub-label { display: none !important; }
    #pv-checkout-box-el .date-fields img { width: 22px !important; cursor: pointer !important; flex-shrink: 0 !important; }
    /* whatsapp checkbox #id_65 */
    #id_65 .form-single-column { display: flex !important; gap: 12px !important; }
    #id_65 .clearfix { display: none !important; }
    #id_65 .form-checkbox-item { display: flex !important; align-items: center !important; gap: 10px !important; background: var(--pv-bg-light) !important; border: 1px solid var(--pv-border) !important; border-radius: 8px !important; padding: 12px 18px !important; cursor: pointer !important; clear: none !important; float: none !important; }
    #id_65 .form-checkbox { appearance: none !important; -webkit-appearance: none !important; width: 22px !important; height: 22px !important; min-width: 22px !important; border: 2px solid #bbb !important; border-radius: 4px !important; cursor: pointer !important; position: relative !important; background: #fff !important; margin: 0 !important; transition: all 0.2s !important; }
    #id_65 .form-checkbox:checked { background: var(--pv-primary) !important; border-color: var(--pv-primary) !important; }
    #id_65 .form-checkbox:checked::after { content: '' !important; position: absolute !important; left: 6px !important; top: 2px !important; width: 6px !important; height: 11px !important; border: solid #fff !important; border-width: 0 2px 2px 0 !important; transform: rotate(45deg) !important; }
    #id_65 .form-checkbox-item label { font-family: 'Poppins', sans-serif !important; font-weight: 500 !important; font-size: 15px !important; color: var(--pv-text-dark) !important; cursor: pointer !important; margin: 0 !important; float: none !important; width: auto !important; }
    /* whatsapp note #id_66 */
    #id_66 #text_66 p { font-family: 'Poppins', sans-serif !important; font-style: italic !important; font-size: 13px !important; color: var(--pv-text-med) !important; text-align: center !important; margin: 6px 0 0 !important; }

    /* opt-in checkbox #id_71 */
    #id_71 { padding: 0 0 20px !important; }
    #id_71 .form-label-hidden, #id_71 #label_71 { display: none !important; }
    #id_71 .form-input { width: 100% !important; float: none !important; max-width: 100% !important; }
    #id_71 .form-checkbox-item { display: flex !important; align-items: center !important; gap: 12px !important; background: var(--pv-bg-light) !important; border: 1px solid var(--pv-border) !important; border-radius: var(--pv-radius) !important; padding: 14px 18px !important; cursor: pointer !important; clear: none !important; float: none !important; }
    #id_71 .form-checkbox { appearance: none !important; -webkit-appearance: none !important; width: 22px !important; height: 22px !important; min-width: 22px !important; border: 2px solid #bbb !important; border-radius: 4px !important; cursor: pointer !important; position: relative !important; background: #fff !important; margin: 0 !important; flex-shrink: 0 !important; transition: all 0.2s !important; }
    #id_71 .form-checkbox:checked { background: var(--pv-primary) !important; border-color: var(--pv-primary) !important; }
    #id_71 .form-checkbox:checked::after { content: '' !important; position: absolute !important; left: 6px !important; top: 2px !important; width: 6px !important; height: 11px !important; border: solid #fff !important; border-width: 0 2px 2px 0 !important; transform: rotate(45deg) !important; }
    #id_71 label { font-family: 'Poppins', sans-serif !important; font-weight: 500 !important; font-size: 15px !important; color: var(--pv-text-dark) !important; cursor: pointer !important; margin: 0 !important; float: none !important; width: auto !important; }

    /* payment #id_68 */
    #id_68 .form-payment-methods { display: none !important; }
    #id_68 .form-address-table { width: 100% !important; }
    #id_68 th { font-family: 'Poppins', sans-serif !important; text-align: left !important; padding: 16px 0 8px !important; color: var(--pv-text-dark) !important; font-size: 17px !important; font-weight: 600 !important; }
    #id_68 .cc-icons { display: flex !important; gap: 8px !important; margin: 6px 0 !important; }
    #id_68 .form-sub-label-container { display: block !important; margin-bottom: 10px !important; }
    #id_68 .form-textbox, #id_68 .form-dropdown {
      width: 100% !important; height: 50px !important; border: 2px solid var(--pv-border-light) !important;
      border-radius: var(--pv-radius) !important; padding: 0 14px !important; font-family: 'Poppins', sans-serif !important;
      font-size: 15px !important; box-sizing: border-box !important; background: #fff !important;
    }
    #id_68 .form-textbox:focus, #id_68 .form-dropdown:focus { border-color: var(--pv-primary) !important; outline: none !important; }
    #id_68 .form-sub-label { font-family: 'Poppins', sans-serif !important; font-size: 12px !important; color: var(--pv-text-light) !important; margin-top: 4px !important; display: block !important; }

    /* confirmation note #id_69 */
    #id_69 #text_69 p { font-family: 'Poppins', sans-serif !important; font-weight: 600 !important; font-size: 14px !important; color: var(--pv-text-dark) !important; text-align: center !important; margin: 10px 0 !important; }

    /* submit */
    .form-buttons-wrapper { text-indent: 0 !important; text-align: center !important; }
    .form-submit-button {
      width: 100% !important; background: var(--pv-primary) !important; border: none !important; border-radius: 14px !important;
      padding: 22px !important; font-family: 'Poppins', sans-serif !important; font-weight: 600 !important; font-size: 22px !important;
      color: #fff !important; cursor: pointer !important; display: block !important; transition: background 0.2s, transform 0.1s !important; margin: 10px auto 0 !important;
    }
    .form-submit-button:hover { background: var(--pv-primary-dark) !important; }
    .form-submit-button:active { transform: scale(0.99) !important; }

    @media (max-width: 768px) {
      .pv-item-grid { grid-template-columns: 1fr !important; }
      #formContainer .form-all { padding: 20px 12px 80px !important; }
      .pv-section-box { padding: 6px 14px 20px !important; }
      .form-all h2.form-header { font-size: 26px !important; }
      .pv-item__img { width: 76px !important; height: 76px !important; }
      .pv-item__name { font-size: 14px !important; }
      .pv-qty-control { width: 108px !important; }
      #pv-order-box-el, #pv-checkout-box-el { padding: 20px !important; }
    }
  `;
  document.head.appendChild(style);

  // ============================================================
  // INIT
  // ============================================================
  function ready(fn){ if(document.readyState!=='loading'){fn();} else {document.addEventListener('DOMContentLoaded',fn);} }

  ready(function () {

    // 1. Transform every number input into a card
    document.querySelectorAll('input[data-type="input-number"]').forEach(function (input) {
      var li = input.closest('li.form-line');
      if (li) transformToCard(li, input);
    });

    // 1b. Move conditional sub-fields INSIDE their parent item card
    //     (must run before grid grouping so the run isn't broken)
    SUB_FIELDS.forEach(function (pair) { nestConditional(pair[0], pair[1]); });

    // 2. Group consecutive item cards into 2-col grids (per section)
    groupItemsIntoGrids();

    // 3. Box up the Shabbat section (headers 24 + 25 through the last Shabbos item #id_35)
    boxSection('cid_24', ['cid_24','cid_25','id_26','id_27','id_28','id_29','id_30','id_31','id_32','id_33','id_34','id_35']);

    // 4. Donation radio styling
    setupDonation();

    // 5. Order summary
    setupOrderSummary();
    wrapOrderSection();

    // 6. Delivery + checkout box
    wrapCheckoutSection();

    updateOrderSummary();

    // 7. Images
    if (SHEET_CSV && SHEET_CSV.indexOf('http') === 0) fetchImages();
  });

  // ============================================================
  // NEST A CONDITIONAL FIELD INSIDE ITS ITEM CARD
  //   condId   = the <li> id of the conditional field (e.g. 'id_74')
  //   nameMatch= EXACT item name, matches data-pv-name (e.g. 'Grilled Salmon')
  //   The form's conditional engine still toggles display on the <li>
  //   by id — moving it in the DOM doesn't break that.
  // ============================================================
  function nestConditional(condId, nameMatch) {
    var cond = document.getElementById(condId);
    if (!cond) return;

    var needle = nameMatch.toLowerCase().trim();
    var host = null;
    document.querySelectorAll('li.form-line.pv-menu-item').forEach(function (li) {
      if (host) return;
      var n = (li.getAttribute('data-pv-name') || '').toLowerCase().trim();
      if (n === needle) host = li;   // exact match, not substring
    });
    if (!host) { console.warn('[PV] No card matched "' + nameMatch + '" for ' + condId); return; }

    cond.classList.add('pv-sub-field');
    host.classList.add('pv-has-sub');

    // Put (or re-put) the conditional li directly after the card content.
    function place() {
      if (cond.parentNode === host && cond.previousElementSibling &&
          cond.previousElementSibling.classList.contains('pv-item-card')) return;
      var cardEl = host.querySelector('.pv-item-card');
      if (cardEl && cardEl.nextSibling) host.insertBefore(cond, cardEl.nextSibling);
      else host.appendChild(cond);
    }
    place();

    // Refresh the order summary when the side changes
    var sel = cond.querySelector('select');
    if (sel) {
      sel.addEventListener('change', updateOrderSummary);
      sel.addEventListener('input',  updateOrderSummary);
    }

    // The form's conditional engine re-inserts the field at its original
    // position when it shows it — watch for that and move it back.
    var target = document.querySelector('.form-all .form-section') || document.body;
    new MutationObserver(function () { place(); })
      .observe(target, { childList: true, subtree: true });
  }
  // ============================================================
  // CARD TRANSFORM
  // ============================================================
  function transformToCard(li, input) {
    var labelEl = li.querySelector('.form-label-left label:not(.label-message)');
    if (!labelEl) return;
    var raw        = labelEl.textContent.trim();
    var priceMatch = raw.match(/\$(\d+(?:\.\d+)?)/);
    var price      = priceMatch ? parseFloat(priceMatch[1]) : 0;
    var name       = raw.replace(/\s*\$\d+(?:\.\d+)?\s*$/, '').trim();
    var subEl      = li.querySelector('.form-sub-label');
    var desc       = subEl ? subEl.textContent.trim() : '';

    li.classList.add('pv-menu-item');
    li.setAttribute('data-pv-name', name);

    var labelLeft = li.querySelector('.form-label-left');
    var formInput = li.querySelector('.form-input');
    if (labelLeft) labelLeft.style.cssText = 'position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;';
    if (formInput) formInput.style.cssText = 'position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;';

    var descHTML = desc ? '<p class="pv-item__desc">' + desc + '</p>' : '';
    var card = document.createElement('div');
    card.className = 'pv-item-card';
    card.innerHTML =
      '<img class="pv-item__img" src="" alt="' + name + '">' +
      '<div class="pv-item__info">' +
        '<h3 class="pv-item__name">' + name + '</h3>' +
        descHTML +
        '<span class="pv-item__price">$' + price.toFixed(2) + '</span>' +
      '</div>' +
      '<div class="pv-item__ctrl">' +
        '<div class="pv-qty-control">' +
          '<button type="button" class="pv-qty-btn pv-qty-minus">\u2212</button>' +
          '<span class="pv-qty-display">0</span>' +
          '<button type="button" class="pv-qty-btn pv-qty-plus">+</button>' +
        '</div>' +
      '</div>';
    li.appendChild(card);

    var minusBtn = card.querySelector('.pv-qty-minus');
    var plusBtn  = card.querySelector('.pv-qty-plus');
    var display  = card.querySelector('.pv-qty-display');

    function setQty(n) {
      input.value = n > 0 ? n : '';
      display.textContent = n;
      li.classList.toggle('pv-selected', n > 0);
      if (window.$j) window.$j(input).trigger('change').trigger('keyup');
      ['input','change','keyup'].forEach(function(evt){ input.dispatchEvent(new Event(evt, { bubbles: true })); });
      updateOrderSummary();
    }
    plusBtn.addEventListener('click', function(){ setQty(parseInt(input.value || '0') + 1); });
    minusBtn.addEventListener('click', function(){
      var cur = parseInt(input.value || '0');
      if (cur > 0) setQty(cur - 1);
    });
  }

  // ============================================================
  // GROUP ITEMS INTO 2-COL GRIDS
  //   Walk the form-section; consecutive .pv-menu-item <li>s get
  //   wrapped in a .pv-item-grid div. A non-item breaks the run.
  // ============================================================
  function groupItemsIntoGrids() {
    var section = document.querySelector('.form-all .form-section');
    if (!section) return;
    var children = [].slice.call(section.children);
    var run = [];
    function flush() {
      if (run.length === 0) return;
      var grid = document.createElement('div');
      grid.className = 'pv-item-grid';
      run[0].parentNode.insertBefore(grid, run[0]);
      run.forEach(function(li){ grid.appendChild(li); });
      run = [];
    }
    children.forEach(function(li){
      if (li.classList && li.classList.contains('pv-menu-item')) {
        run.push(li);
      } else {
        flush();
      }
    });
    flush();
  }

  // ============================================================
  // BOX A SECTION (wraps a set of <li> ids in a styled container)
  //   Also re-grids items inside the box.
  // ============================================================
  function boxSection(anchorId, ids) {
    var anchor = document.getElementById(anchorId);
    if (!anchor) return;
    var box = document.createElement('div');
    box.className = 'pv-section-box';
    anchor.parentNode.insertBefore(box, anchor);
    ids.forEach(function(id){
      var el = document.getElementById(id);
      if (el) box.appendChild(el);
    });
    // re-grid items now inside the box
    var run = [];
    function flush() {
      if (run.length === 0) return;
      var grid = document.createElement('div');
      grid.className = 'pv-item-grid';
      run[0].parentNode.insertBefore(grid, run[0]);
      run.forEach(function(li){ grid.appendChild(li); });
      run = [];
    }
    [].slice.call(box.children).forEach(function(li){
      if (li.classList && li.classList.contains('pv-menu-item')) run.push(li);
      else flush();
    });
    flush();
  }

  // ============================================================
  // DONATION (#id_57 control_amount)
  // ============================================================
  function setupDonation() {
    document.querySelectorAll('#cid_57 .form-radio-item').forEach(function(item){
      item.addEventListener('click', function(e){
        if (e.target.closest('label') || e.target.type === 'radio' || e.target.tagName === 'INPUT') return;
        var r = item.querySelector('input[type="radio"]');
        if (r) r.click();
      });
    });
    document.querySelectorAll('#cid_57 input[type="radio"]').forEach(function(radio){
      radio.addEventListener('change', function(){
        document.querySelectorAll('#cid_57 .form-radio-item').forEach(function(item){
          var inp = item.querySelector('input[type="radio"]');
          item.classList.toggle('pv-checked', !!(inp && inp.checked));
        });
        updateOrderSummary();
      });
    });
    // "Other" custom donation input recalcs total
    var otherInput = document.getElementById('input_57');
    var otherRadio = document.getElementById('other_57');
    if (otherInput) {
      otherInput.addEventListener('input', updateOrderSummary);
      otherInput.addEventListener('focus', function(){ if (otherRadio) { otherRadio.checked = true; otherRadio.dispatchEvent(new Event('change', {bubbles:true})); } });
    }
    // JotForm keeps #input_57 disabled until Other is picked; keep it usable
    setInterval(function(){
      if (otherRadio && otherRadio.checked && otherInput && otherInput.hasAttribute('disabled')) otherInput.removeAttribute('disabled');
    }, 400);
  }

  // ============================================================
  // ORDER SUMMARY
  // ============================================================
  function setupOrderSummary() {
    // create the container that lives inside the order box
    var holder = document.createElement('div');
    holder.id = 'pv-order-items-holder';
    holder.innerHTML = '<div id="pv-order-items" class="pv-order-items"></div>';
    // will be moved into the order box by wrapOrderSection
    window.__pvOrderHolder = holder;
  }

  function wrapOrderSection() {
    // total is #id_67. Put an order box before it.
    var totalLi = document.getElementById('id_67');
    if (!totalLi) return;
    var box = document.createElement('div');
    box.id = 'pv-order-box-el';
    box.innerHTML = '<div class="pv-order-box-title">Your Order</div><div class="pv-order-divider"></div>';
    totalLi.parentNode.insertBefore(box, totalLi);
    if (window.__pvOrderHolder) box.appendChild(window.__pvOrderHolder.firstChild);
    box.appendChild(totalLi);
  }

  function updateOrderSummary() {
    var container = document.getElementById('pv-order-items');
    var orderBox  = document.getElementById('pv-order-box-el');
    var html = '', hasItems = false;

    document.querySelectorAll('input[data-type="input-number"]').forEach(function (input) {
      var qty = parseInt(input.value || '0');
      if (qty <= 0) return;
      hasItems = true;
      var li      = input.closest('li.form-line');
      var name    = li ? (li.getAttribute('data-pv-name') || 'Item') : 'Item';
      var priceEl = li ? li.querySelector('.pv-item__price') : null;
      var pNum    = priceEl ? parseFloat(priceEl.textContent.replace('$','')) : 0;

      // nested conditional side, if this item has one
      var subSel  = li ? li.querySelector('.pv-sub-field select') : null;
      var sideTxt = (subSel && subSel.value) ? subSel.value.trim() : '';
      var sideHTML = sideTxt
        ? '<span class="pv-order-side">' + sideTxt + '</span>'
        : (subSel ? '<span class="pv-order-side pv-order-side--empty">choose a side</span>' : '');

      html +=
        '<div class="pv-order-line">' +
          '<div class="pv-order-line__left">' +
            '<span class="pv-order-qty">' + qty + '\u00d7</span>' +
            '<span class="pv-order-name">' + name + sideHTML + '</span>' +
          '</div>' +
          '<span class="pv-order-price">$' + (qty * pNum).toFixed(2) + '</span>' +
        '</div>';
    });

    // donation
    var donChecked = document.querySelector('#cid_57 input[type="radio"]:checked');
    var donVal = 0, donIsOther = false;
    if (donChecked) {
      if (donChecked.id === 'other_57') { donIsOther = true; }
      else donVal = parseFloat(donChecked.value || '0');
    }
    var otherInput = document.getElementById('input_57');
    if (donIsOther && otherInput) donVal = parseFloat(otherInput.value || '0');
    if (donVal > 0) {
      hasItems = true;
      html +=
        '<div class="pv-order-line">' +
          '<div class="pv-order-line__left">' +
            '<span class="pv-order-qty">\u2764</span>' +
            '<span class="pv-order-name">Community Support Donation</span>' +
          '</div>' +
          '<span class="pv-order-price">$' + donVal.toFixed(2) + '</span>' +
        '</div>';
    }

    if (container) container.innerHTML = html;
    if (orderBox)  orderBox.style.display = hasItems ? 'block' : 'none';

    writeOrderSummaryField();
  }

 // ============================================================
  // WRITE PLAIN-TEXT SUMMARY INTO HIDDEN FIELD #input_72
  //   Feeds the CMS receipt/email via <<input_72>>
  // ============================================================
  function writeOrderSummaryField() {
    var field = document.getElementById('input_72');
    if (!field) return;

    var lines = [];
    var itemsTotal = 0;

    document.querySelectorAll('input[data-type="input-number"]').forEach(function (input) {
      var qty = parseInt(input.value || '0');
      if (qty <= 0) return;
      var li      = input.closest('li.form-line');
      var name    = li ? (li.getAttribute('data-pv-name') || 'Item') : 'Item';
      var priceEl = li ? li.querySelector('.pv-item__price') : null;
      var pNum    = priceEl ? parseFloat(priceEl.textContent.replace('$','')) : 0;
      var lineTot = qty * pNum;
      itemsTotal += lineTot;

      // include the chosen side (nested conditional dropdown) if present
      var sideTxt = '';
      var subSel = li ? li.querySelector('.pv-sub-field select') : null;
      if (subSel) sideTxt = subSel.value ? ' (Side: ' + subSel.value.trim() + ')' : ' (Side: not selected)';

      lines.push(qty + ' x ' + name + sideTxt + ' - $' + lineTot.toFixed(2));
    });

    // donation
    var donChecked = document.querySelector('#cid_57 input[type="radio"]:checked');
    var donVal = 0, donIsOther = false;
    if (donChecked) {
      if (donChecked.id === 'other_57') donIsOther = true;
      else donVal = parseFloat(donChecked.value || '0');
    }
    var otherInput = document.getElementById('input_57');
    if (donIsOther && otherInput) donVal = parseFloat(otherInput.value || '0');
    if (donVal > 0) {
      itemsTotal += donVal;
      lines.push('Community Support Donation - $' + donVal.toFixed(2));
    }

    if (lines.length) lines.push('Order Total: $' + itemsTotal.toFixed(2));

    field.value = lines.join('\n');

    if (window.$j) window.$j(field).trigger('change');
    ['input','change','keyup'].forEach(function (evt) {
      field.dispatchEvent(new Event(evt, { bubbles: true }));
    });
  }

  // ============================================================
  // CHECKOUT BOX (Delivery header #id_59 through payment #id_68)
  // ============================================================
  function wrapCheckoutSection() {
    var anchor = document.getElementById('cid_59'); // Delivery header
    if (!anchor) return;
    var box = document.createElement('div');
    box.id = 'pv-checkout-box-el';
    anchor.parentNode.insertBefore(box, anchor);
    ['id_73','cid_59','id_60','id_61','id_62','id_63','id_70','id_64','id_65','id_66','id_68','id_69','id_71','id_2'].forEach(function(id){
      var el = document.getElementById(id);
      if (el) box.appendChild(el);
    });
  }

  // ============================================================
  // FETCH IMAGES FROM GOOGLE SHEET
  //   CSV columns: Item Name, Image URL  (name WITHOUT price)
  // ============================================================
  function fetchImages() {
    var allImgs = document.querySelectorAll('.pv-item__img');
    fetch(SHEET_CSV)
      .then(function (r) { return r.text(); })
      .then(function (csv) {
        var map = {};
        csv.split('\n').slice(1).forEach(function (row) {
          var clean = row.replace(/^\uFEFF/, '').replace(/\r/g, '').trim();
          if (!clean) return;
          var commaIdx = clean.indexOf(',');
          if (commaIdx === -1) return;
          var rawName = clean.substring(0, commaIdx).replace(/^"|"$/g, '').trim();
          var rawUrl  = clean.substring(commaIdx + 1).replace(/^"|"$/g, '').trim();
          if (rawName && rawUrl) map[rawName.toLowerCase().normalize('NFC')] = rawUrl;
        });
        var matched = 0, missed = [];
        allImgs.forEach(function (img) {
          var card = img.closest('.pv-item-card');
          var nameEl = card ? card.querySelector('.pv-item__name') : null;
          if (!nameEl) return;
          var nm = nameEl.textContent.trim().toLowerCase().normalize('NFC');
          if (map[nm]) { img.src = map[nm]; matched++; }
          else missed.push(nameEl.textContent.trim());
        });
        console.log('[PV] Matched ' + matched + ' images, missed:', missed);
      })
      .catch(function (e) { console.error('[PV] Sheet fetch failed:', e); });
  }

})();
</script><script>
//<![CDATA[
/* =========================================================
   CHABAD PUERTO VALLARTA — SPONSORSHIP FORM SCRIPT
   One script for ALL four sponsorship forms.
   Paste into the Custom JS of each form page AND each
   thank-you (response) page — it routes itself by article ID.

   Arrives from the card as:
     ...Sponsorship.htm#id=2026-01-03|SHABBAT_LUNCH&date=2026-01-03
        &type=SHABBAT_LUNCH&event=Parashat%20Vayechi
        &label=Shabbat%20Kiddush%20Lunch&price=500&season=High

   What it does on the form page:
     - fills and locks Title (input_1) with the Parsha / event name
     - fills and locks the date (month_3 / day_3 / year_3)
     - hides the wrong season checkbox and ticks the right one
     - shows a small banner confirming what is being sponsored

   What it does on the response page:
     - scrapes the submitted name + dedication
     - POSTs to Apps Script, which marks that exact row Taken
   ========================================================= */

(function () {
    'use strict';

    /* ================= CONFIG ================= */

    var WEB_APP_URL = "https://script.google.com/macros/s/AKfycbzzfgRqHGsn8nO6hywMtOFJg_IBQ1m3iLVfXeH5dvUkJ2qdoEfIW8UKCEuZIVqGyZLZdA/exec";

    /* All four forms share the same field IDs, so only the tag differs.
       To add a form later: add its article ID here, and put the form's
       URL in the Settings tab against the matching Type. */
    var FORMS = {
        "7481233": { type: "FRIDAY_NIGHT"  },   // Friday Night Dinner
        "7481210": { type: "SHABBAT_LUNCH" },   // Shabbos Day Kiddush
        "7481235": { type: "ROSH_CHODESH"  },   // Women's Rosh Chodesh Luncheon
        "7481236": { type: "TEQUILA"       }    // Tefillin & Tequila Breakfast
    };

    /* Field IDs as they appear in the ChabadOne form markup. */
    var FIELDS = {
        title:      "input_1",                          // "Title" textbox — gets the Parsha / event name
        dateMonth:  "month_3",
        dateDay:    "day_3",
        dateYear:   "year_3",
        datePicker: "input_3_pick",                     // calendar icon, hidden once locked
        optionsBox: "cid_6",                            // wrapper holding the season checkboxes
        nameFirst:  "first_4",
        nameLast:   "last_4"
    };

    /* Response-page table labels. Extra spellings are tolerated below. */
    var SCRAPE = {
        first: ["Full Name - First Name", "Full Name First Name", "First Name"],
        last:  ["Full Name - Last Name", "Full Name Last Name", "Last Name"],
        notes: ["Dedications", "Dedication"],
        title: ["Title"]
    };

    var STORAGE_KEY = 'kd_sponsorship_context';
    var BRAND = { burgundy: '#69001f', gold: '#d6a851', teal: '#48a9b8' };

    /* ================= SHARED ================= */

    function currentAid() {
        var m = window.location.href.match(/\/aid\/(\d+)/);
        return m ? m[1] : '';
    }

    function isResponsePage() {
        return window.location.href.indexOf('ArticleCcoResponse_cdo') !== -1;
    }

    function readHashParams() {
        var raw = window.location.hash.replace(/^#/, '');
        if (!raw) return null;
        var p = new URLSearchParams(raw);
        if (!p.get('date') && !p.get('id')) return null;
        return {
            id:     p.get('id')     || '',
            date:   p.get('date')   || '',
            type:   p.get('type')   || '',
            event:  p.get('event')  || '',
            label:  p.get('label')  || '',
            price:  p.get('price')  || '',
            season: p.get('season') || ''
        };
    }

    function saveContext(ctx) {
        try { sessionStorage.setItem(STORAGE_KEY, JSON.stringify(ctx)); } catch (e) { }
    }

    function loadContext() {
        try {
            var raw = sessionStorage.getItem(STORAGE_KEY);
            return raw ? JSON.parse(raw) : null;
        } catch (e) { return null; }
    }

    function splitYmd(ymd) {
        var m = String(ymd || '').match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/);
        return m ? { y: Number(m[1]), m: Number(m[2]), d: Number(m[3]) } : null;
    }

    function pad2(n) { return ('0' + n).slice(-2); }

    /* ================= FORM PAGE ================= */

    function injectStyles() {
        var style = document.createElement('style');
        style.innerHTML = [
            "@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&family=Newsreader:opsz,wght@6..72,400;6..72,700&display=swap');",
            ".userform-form, .userform-form *, .form-all, .form-all * { font-family:'Manrope',Arial,sans-serif !important; }",
            ".form-label,.form-sub-label,.form-radio-item label,.form-checkbox-item label,.form-payment-methods label,.form-address-table th { color:" + BRAND.burgundy + " !important; font-weight:600 !important; }",
            ".co_body .content .form-all .form-dropdown { height:40px !important; }",
            ".form-sub-label { font-weight:400 !important; color:#5a5158 !important; margin-top:4px !important; }",
            ".form-textbox,.form-dropdown,.form-textarea { font-family:'Manrope',Arial,sans-serif !important; border:1px solid #e6dcd8 !important; border-radius:6px !important; padding:10px 12px !important; color:" + BRAND.burgundy + " !important; background-color:#fff !important; transition:border-color .3s ease, box-shadow .3s ease !important; }",
            ".form-textbox:focus,.form-dropdown:focus,.form-textarea:focus { border-color:" + BRAND.gold + " !important; outline:none !important; box-shadow:0 0 0 2px rgba(214,168,81,.25) !important; }",
            ".form-submit-button { background-color:" + BRAND.burgundy + " !important; color:#fff !important; border:1px solid " + BRAND.burgundy + " !important; border-radius:6px !important; padding:14px 32px !important; font-weight:700 !important; font-size:16px !important; font-family:'Manrope',Arial,sans-serif !important; cursor:pointer !important; transition:background-color .4s ease, border-color .4s ease, transform .2s ease !important; width:100% !important; max-width:300px !important; margin:0 auto !important; display:block !important; }",
            ".form-submit-button:hover { background-color:" + BRAND.gold + " !important; border-color:" + BRAND.gold + " !important; transform:translateY(-2px) !important; }",
            ".form-checkbox-item, .form-radio-item { margin-bottom:12px !important; }",
            "#total_amount { font-family:'Newsreader',Georgia,serif !important; color:" + BRAND.burgundy + " !important; font-size:26px !important; font-weight:bold !important; }",
            ".kf-locked { background-color:#f2ecea !important; color:#5a5158 !important; pointer-events:none !important; opacity:.75 !important; font-weight:bold !important; }",
            ".kf-hidden-option { display:none !important; }",
            ".kf-banner { background:#faf7f4 !important; border:1px solid #e6dcd8 !important; border-left:4px solid " + BRAND.gold + " !important; border-radius:6px !important; padding:16px 20px !important; margin:0 0 22px 0 !important; font-family:'Manrope',Arial,sans-serif !important; color:" + BRAND.burgundy + " !important; font-size:15px !important; line-height:1.6 !important; }",
            ".kf-banner .kf-banner-label { display:block !important; font-size:11px !important; letter-spacing:.1em !important; text-transform:uppercase !important; color:#9c7629 !important; font-weight:700 !important; margin-bottom:6px !important; }",
            ".kf-banner .kf-banner-main { font-family:'Newsreader',Georgia,serif !important; font-size:20px !important; font-weight:700 !important; display:block !important; }",
            ".kf-banner .kf-banner-sub { font-size:14px !important; color:#5a5158 !important; display:block !important; margin-top:4px !important; }",
            ".kf-banner .kf-banner-price { color:" + BRAND.teal + " !important; font-weight:700 !important; }"
        ].join('\n');
        document.head.appendChild(style);
    }

    function lockField(el) {
        if (!el) return;
        el.classList.add('kf-locked');
        el.setAttribute('tabindex', '-1');
        if ('readOnly' in el) el.readOnly = true;
    }

    function money(n) {
        var v = Number(String(n).replace(/[^0-9.]/g, '')) || 0;
        return '$' + v.toLocaleString('en-US');
    }

    function prettyDate(ymd) {
        var p = splitYmd(ymd);
        if (!p) return ymd;
        var d = new Date(p.y, p.m - 1, p.d, 12, 0, 0);
        var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
        var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
        return days[d.getDay()] + ', ' + months[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear();
    }

    function showBanner(ctx) {
        var host = document.querySelector('.form-all') || document.querySelector('.userform-form');
        if (!host) return;

        var sub = [];
        if (ctx.event) sub.push(ctx.event);
        if (ctx.date)  sub.push(prettyDate(ctx.date));

        var priceBit = '';
        if (ctx.price) {
            priceBit = ' · <span class="kf-banner-price">' + money(ctx.price) +
                       (ctx.season ? ' (' + ctx.season.toLowerCase() + ' season)' : '') + '</span>';
        }

        var div = document.createElement('div');
        div.className = 'kf-banner';
        div.innerHTML =
            '<span class="kf-banner-label">You are sponsoring</span>' +
            '<span class="kf-banner-main">' + (ctx.label || 'Sponsorship') + '</span>' +
            '<span class="kf-banner-sub">' + sub.join(' · ') + priceBit + '</span>';

        host.parentNode.insertBefore(div, host);
    }

    function fillTitle(ctx) {
        var el = document.getElementById(FIELDS.title);
        if (!el || !ctx.event) return;
        el.value = ctx.event;
        lockField(el);
    }

    function fillDate(ctx) {
        var p = splitYmd(ctx.date);
        if (!p) return;

        var m = document.getElementById(FIELDS.dateMonth);
        var d = document.getElementById(FIELDS.dateDay);
        var y = document.getElementById(FIELDS.dateYear);

        if (m) { m.value = pad2(p.m); m.dispatchEvent(new Event('change', { bubbles: true })); lockField(m); }
        if (d) { d.value = pad2(p.d); d.dispatchEvent(new Event('change', { bubbles: true })); lockField(d); }
        if (y) { y.value = String(p.y); y.dispatchEvent(new Event('change', { bubbles: true })); lockField(y); }

        var pick = document.getElementById(FIELDS.datePicker);
        if (pick) pick.style.display = 'none';
    }

    /* Text of the <label> that belongs to a checkbox. */
    function labelTextFor(box) {
        var lab = document.getElementById('label_' + box.id) ||
                  document.querySelector('label[for="' + box.id + '"]');
        return lab ? lab.textContent.trim() : '';
    }

    /* Pull the first dollar figure out of a string: "…( $1,800)" -> "1800" */
    function priceIn(text) {
        var m = String(text).match(/\$\s*([\d,]+)/);
        return m ? m[1].replace(/,/g, '') : '';
    }

    function hideOption(box) {
        var item = box.closest ? box.closest('.form-checkbox-item') : null;
        if (item) {
            var next = item.nextElementSibling;
            item.classList.add('kf-hidden-option');
            if (next && next.classList.contains('clearfix')) next.classList.add('kf-hidden-option');
        } else {
            box.style.display = 'none';
        }
        if (box.checked) box.checked = false;
    }

    /* Ticks a box for real so JotForm's own handler recalculates the total.
       Retried once because Userform.init binds its handlers on jQuery ready. */
    function tickOption(box, attempt) {
        attempt = attempt || 0;
        if (box.checked) return;
        try { box.click(); } catch (e) { }
        if (!box.checked && attempt < 3) {
            setTimeout(function () { tickOption(box, attempt + 1); }, 250);
        }
    }

    /* Hides the season the visitor is NOT in, and ticks the one they are.
       Matches on the dollar amount first (exact), falling back to the
       words "high season" / "low season". */
    function applySeason(ctx) {
        var wrap = document.getElementById(FIELDS.optionsBox);
        if (!wrap) return;

        var boxes = Array.prototype.slice.call(wrap.querySelectorAll('input[type="checkbox"]'));
        if (!boxes.length) return;

        // Flat-price form (Tequila, Rosh Chodesh) — just tick the single option
        if (boxes.length === 1) {
            setTimeout(function () { tickOption(boxes[0]); }, 300);
            return;
        }

        var wantPrice  = String(ctx.price || '').replace(/[^0-9]/g, '');
        var wantSeason = String(ctx.season || '').toLowerCase();
        var chosen = null;

        if (wantPrice) {
            boxes.forEach(function (b) {
                var text = (b.value || '') + ' ' + labelTextFor(b);
                if (priceIn(text) === wantPrice) chosen = b;
            });
        }

        if (!chosen && wantSeason) {
            boxes.forEach(function (b) {
                var text = ((b.value || '') + ' ' + labelTextFor(b)).toLowerCase();
                if (text.indexOf(wantSeason + ' season') !== -1) chosen = b;
            });
        }

        if (!chosen) {
            // Prices in Settings and in the JotForm have drifted apart.
            console.warn('Season option not matched — showing all options. ' +
                         'Check that the Settings prices match the form checkbox amounts.',
                         { price: ctx.price, season: ctx.season });
            return;
        }

        boxes.forEach(function (b) { if (b !== chosen) hideOption(b); });
        setTimeout(function () { tickOption(chosen); }, 300);
    }

    function handleFormPage(cfg) {
        var ctx = readHashParams();
        if (!ctx) return;    // someone opened the form directly — leave it untouched

        ctx.type = ctx.type || cfg.type;
        saveContext(ctx);

        injectStyles();
        showBanner(ctx);
        fillTitle(ctx);
        fillDate(ctx);
        applySeason(ctx);
    }

    /* ================= RESPONSE PAGE ================= */

    function scrapeTable() {
        var found = {};
        document.querySelectorAll('tr').forEach(function (row) {
            var labelCell = row.querySelector('.field_name');
            var valueCell = row.querySelector('.field_value');
            if (!labelCell || !valueCell) return;
            found[labelCell.innerText.trim()] = valueCell.innerText.trim();
        });
        return found;
    }

    /* Exact match first, then a loose contains match, so a renamed field
       label on one form doesn't silently drop the sponsor's name. */
    function pick(table, candidates) {
        for (var i = 0; i < candidates.length; i++) {
            if (table[candidates[i]]) return table[candidates[i]];
        }
        var keys = Object.keys(table);
        for (var j = 0; j < candidates.length; j++) {
            var want = candidates[j].toLowerCase();
            for (var k = 0; k < keys.length; k++) {
                if (keys[k].toLowerCase().indexOf(want) !== -1 && table[keys[k]]) return table[keys[k]];
            }
        }
        return '';
    }

    function handleResponsePage(cfg) {
        var ctx = readHashParams() || loadContext();
        if (!ctx || !ctx.date) {
            console.warn('Sponsorship context missing — nothing recorded to the sheet.');
            return;
        }

        var table = scrapeTable();
        var name  = (pick(table, SCRAPE.first) + ' ' + pick(table, SCRAPE.last)).trim() ||
                    pick(table, ['Name']) || 'Anonymous Sponsor';

        var payload = {
            id:     ctx.id || (ctx.date + '|' + (ctx.type || cfg.type)),
            date:   ctx.date,
            type:   ctx.type || cfg.type,
            event:  ctx.event || pick(table, SCRAPE.title),
            name:   name,
            notes:  pick(table, SCRAPE.notes),
            price:  ctx.price  || '',
            season: ctx.season || ''
        };

        fetch(WEB_APP_URL, {
            method: 'POST',
            mode: 'no-cors',
            headers: { 'Content-Type': 'text/plain;charset=utf-8' },
            body: JSON.stringify(payload)
        }).then(function () {
            console.log('Sponsorship recorded:', payload.id);
            try { sessionStorage.removeItem(STORAGE_KEY); } catch (e) { }
        }).catch(function (err) {
            console.error('Sponsorship sync failed:', err);
        });
    }

    /* ================= ROUTER ================= */

    document.addEventListener('DOMContentLoaded', function () {
        var cfg = FORMS[currentAid()];
        if (!cfg) return;   // not one of our sponsorship forms
        if (isResponsePage()) handleResponsePage(cfg);
        else handleFormPage(cfg);
    });

})();
//]]>
</script><script>
// --- HOMEPAGE UPCOMING EVENTS (Chabad Vallarta) ---
// Replaces the native ChabadOne "Upcoming Events" widget in the middle .g320
// column (between the sneak-peek column and the Facebook likebox).
//
// Layout: text only (no images, no calendar links). Two events shown at a time,
// swipe/arrow through up to 10, then a View All button.
if (window.location.pathname === '/' || window.location.pathname === '/default.aspx') {

  (function() {

    // ---------------------------------------------------------------------
    // TODO: swap this for the real "all upcoming events" page when it exists.
    // ---------------------------------------------------------------------
    const VIEW_ALL_URL = 'https://www.chabadvallarta.com/templates/articlecco_cdo/aid/7500580/jewish/Upcoming-Events.htm';

    const MAX_EVENTS = 10;      // hard cap on how many events to load
    const EVENTS_PER_PAGE = 2;  // how many show at once

    /**
     * Fetches and parses the events page HTML.
     */
    function getEventsPage() {
      const url = 'https://www.chabadvallarta.com/templates/events.htm?t=' + new Date().getTime();
      return fetch(url)
        .then(response => {
          if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
          }
          return response.text();
        })
        .then(htmlText => {
          const parser = new DOMParser();
          return parser.parseFromString(htmlText, 'text/html');
        })
        .catch(error => {
          console.error("Error fetching events page:", error);
          return null;
        });
    }

    /**
     * Splits an event name on the [L] marker.
     *   "Rosh Hashana Community Dinner [L] RSVP"
     *     -> title: "Rosh Hashana Community Dinner", actionText: "RSVP"
     * No marker => whole string is the title, action falls back to "Learn More".
     */
    function parseTitleAndAction(rawTitle) {
      const normalized = (rawTitle || '').replace(/\s+/g, ' ').trim();
      const markerIndex = normalized.indexOf('[L]');

      if (markerIndex === -1) {
        return { title: normalized || 'Event', actionText: 'Learn More' };
      }

      const title = normalized.slice(0, markerIndex).trim();
      const label = normalized.slice(markerIndex + 3).trim();

      return {
        title: title || 'Event',
        actionText: label || 'Learn More'
      };
    }

    /**
     * 5 digits or fewer is an event id; anything longer is an article id.
     */
    function buildEventUrl(id) {
      const base = 'https://www.chabadvallarta.com';
      if (id.length <= 5) {
        return `${base}/tools/events/register_cdo/eventid/${id}`;
      }
      return `${base}/templates/articlecco_cdo/aid/${id}`;
    }

    /**
     * Robustly parses date strings like "Month Day, Year".
     */
    function parseRobustDate(dateStr) {
      const months = {
        january: 0, february: 1, march: 2, april: 3, may: 4, june: 5,
        july: 6, august: 7, september: 8, october: 9, november: 10, december: 11
      };
      if (!dateStr) return null;

      const cleanedStr = dateStr.replace(/,/g, '').trim().replace(/\s+/g, ' ');
      const parts = cleanedStr.split(' ');
      if (parts.length < 3) return null;

      const monthName = parts[0].toLowerCase();
      const day = parseInt(parts[1], 10);
      const year = parseInt(parts[2], 10);

      if (months.hasOwnProperty(monthName) && !isNaN(day) && !isNaN(year)) {
        return new Date(year, months[monthName], day);
      }
      return null;
    }

    /**
     * Compact date for a narrow column: "FRI, SEP 11"
     */
    function formatEventDate(dateStr) {
      if (!dateStr) return '';
      // Incoming: "Friday, September 11, 2026"
      const parts = dateStr.split(',');
      if (parts.length < 2) return dateStr.toUpperCase();

      const dayName = parts[0].trim().slice(0, 3);
      const monthDay = parts[1].trim().split(' ');
      const monthShort = (monthDay[0] || '').slice(0, 3);
      const dayNum = monthDay[1] || '';

      return `${dayName}, ${monthShort} ${dayNum}`.trim().toUpperCase();
    }

    /**
     * Finds the native Upcoming Events widget's content area, which we take over.
     */
    function findHostWidget() {
      const widget = document.querySelector('.widget-4.upcoming_events');
      if (!widget) return null;

      const content = widget.querySelector('.widget_content');
      if (!content) return null;

      return { widget, content };
    }

    const runTransformation = () => {
      const host = findHostWidget();
      if (!host) {
        console.error("Native .upcoming_events widget not found — nothing to replace.");
        return;
      }

      getEventsPage().then(eventsDocument => {
        if (!eventsDocument) return;

        const today = new Date();
        today.setHours(0, 0, 0, 0);

        const upcomingEvents = [];
        const allDateGroups = Array.from(eventsDocument.querySelectorAll('#calendar .list_item'));

        for (const dateGroupEl of allDateGroups) {
          if (upcomingEvents.length >= MAX_EVENTS) break;

          const dateEl = dateGroupEl.querySelector('.date');
          if (!dateEl) continue;

          const dateText = dateEl.textContent.trim();
          const parsableDateText = dateText.split(',').slice(1).join(',').trim();
          const eventDate = parseRobustDate(parsableDateText);

          if (eventDate && eventDate >= today) {
            const individualEventsInGroup = dateGroupEl.querySelectorAll('.category_item');
            individualEventsInGroup.forEach(eventEl => {
              if (upcomingEvents.length < MAX_EVENTS) {
                upcomingEvents.push({ el: eventEl, date: eventDate, rawDate: dateText });
              }
            });
          }
        }

        if (upcomingEvents.length === 0) {
          console.log("No upcoming events found to display.");
          return;
        }

        // --- TAKE OVER THE NATIVE WIDGET ---
        // ChabadOne's fixWidgetBodyHeight() pins an inline height on .widget_content
        // and enscroll adds a scrollbar track as a sibling. Clear both out.
        host.widget.querySelectorAll('.enscroll-track').forEach(track => {
          if (track.parentElement) track.parentElement.remove();
        });
        host.content.classList.remove('make_scrollable', 'list_format');
        host.content.classList.add('injected-vp-events');
        host.content.innerHTML = '';

        // --- BUILD ONE ITEM PER EVENT ---
        const buildItem = ({ el: eventEl, rawDate }) => {
          const titleEl = eventEl.querySelector('.event_name');
          const rawTitle = titleEl ? titleEl.textContent : '';
          const { title, actionText } = parseTitleAndAction(rawTitle);

          const formattedDate = formatEventDate(rawDate);

          const timeEl = eventEl.querySelector('.event_options > div');
          let timeText = timeEl ? timeEl.textContent.trim().toUpperCase() : '';
          if (timeText) {
            timeText = timeText.replace(/(\d)([AP]M)$/, '$1 $2');
          }
          const metaLine = timeText ? `${formattedDate} · ${timeText}` : formattedDate;

          let eventUrl = '#';
          const facebookLinkEl = eventEl.querySelector('a[href*="//www.facebook.com/events/"]');
          if (facebookLinkEl) {
            const fbHref = facebookLinkEl.href;
            const match = fbHref.match(/events\/(\d+)/);
            if (match && match[1]) {
              eventUrl = buildEventUrl(match[1]);
            }
          }

          const item = document.createElement('a');
          item.className = 'vp-event-item';
          item.href = eventUrl;
          item.innerHTML = `
            <div class="vp-event-date">${metaLine}</div>
            <div class="vp-event-title">${title}</div>
            <div class="vp-event-action">${actionText} →</div>
          `;
          return item;
        };

        // --- GROUP INTO PAGES OF 2 ---
        const viewport = document.createElement('div');
        viewport.className = 'vp-events-viewport';
        const track = document.createElement('div');
        track.className = 'vp-events-track';

        const totalPages = Math.ceil(upcomingEvents.length / EVENTS_PER_PAGE);

        for (let p = 0; p < totalPages; p++) {
          const page = document.createElement('div');
          page.className = 'vp-events-page';

          upcomingEvents
            .slice(p * EVENTS_PER_PAGE, (p + 1) * EVENTS_PER_PAGE)
            .forEach(ev => page.appendChild(buildItem(ev)));

          track.appendChild(page);
        }

        viewport.appendChild(track);
        host.content.appendChild(viewport);

        // --- DESKTOP NAV: arrows + page counter ---
        const nav = document.createElement('div');
        nav.className = 'vp-events-nav';
        nav.innerHTML = `
          <button class="vp-nav-arrow prev" aria-label="Previous events">❮</button>
          <span class="vp-nav-counter"></span>
          <button class="vp-nav-arrow next" aria-label="Next events">❯</button>
        `;
        host.content.appendChild(nav);

        // --- MOBILE SWIPE HINT ---
        const swipeHint = document.createElement('div');
        swipeHint.className = 'vp-swipe-hint';
        swipeHint.innerHTML = '<span>Swipe for more events</span> <span class="vp-hint-arrow">→</span>';
        host.content.appendChild(swipeHint);

        // --- VIEW ALL BUTTON ---
        const viewAll = document.createElement('a');
        viewAll.className = 'vp-events-viewall';
        viewAll.href = VIEW_ALL_URL;
        viewAll.textContent = 'View All Events';
        host.content.appendChild(viewAll);

        // --- PAGING (desktop) ---
        const prevButton = nav.querySelector('.prev');
        const nextButton = nav.querySelector('.next');
        const counter = nav.querySelector('.vp-nav-counter');

        let currentPage = 0;

        const updateCarousel = () => {
          // One page per view: shift by exactly 100% per step, so there's no
          // pixel math to get wrong and the column width is never exceeded.
          track.style.transform = `translateX(-${currentPage * 100}%)`;
          counter.textContent = `${currentPage + 1} / ${totalPages}`;
          prevButton.disabled = currentPage === 0;
          nextButton.disabled = currentPage >= totalPages - 1;
        };

        prevButton.addEventListener('click', () => {
          if (currentPage > 0) {
            currentPage--;
            updateCarousel();
          }
        });

        nextButton.addEventListener('click', () => {
          if (currentPage < totalPages - 1) {
            currentPage++;
            updateCarousel();
          }
        });

        // Only one page? Hide the nav and hint entirely.
        if (totalPages <= 1) {
          nav.style.setProperty('display', 'none', 'important');
          swipeHint.style.setProperty('display', 'none', 'important');
        }

        updateCarousel();
      });
    };

    const injectCSS = () => {
      const style = document.createElement('style');
      style.textContent = `
        @import url('https://fonts.googleapis.com/css2?family=Raleway:wght@400;600;700;900&display=swap');

        /* Take over the native widget body. ChabadOne's fixWidgetBodyHeight()
           pins an inline height here, so !important is required to release it. */
        .widget-4.upcoming_events .widget_content.injected-vp-events {
          height: auto !important;
          max-height: none !important;
          overflow: visible !important;
          box-sizing: border-box !important;
          padding: 0 !important;
          font-family: 'Raleway', sans-serif !important;
        }

        /* Viewport: strictly the column's width, never wider */
        .injected-vp-events .vp-events-viewport {
          position: relative !important;
          width: 100% !important;
          max-width: 100% !important;
          overflow: hidden !important;
          box-sizing: border-box !important;
        }

        .injected-vp-events .vp-events-track {
          display: flex !important;
          width: 100% !important;
          transition: transform 0.4s ease-in-out !important;
        }

        /* Each page is exactly one viewport wide and holds 2 stacked events */
        .injected-vp-events .vp-events-page {
          flex: 0 0 100% !important;
          width: 100% !important;
          max-width: 100% !important;
          min-width: 0 !important;
          box-sizing: border-box !important;
          display: flex !important;
          flex-direction: column !important;
          gap: 10px !important;
        }

        /* --- EVENT ITEM (text only) --- */
        .injected-vp-events .vp-event-item {
          display: block !important;
          box-sizing: border-box !important;
          background: #ffffff !important;
          border: 1px solid #eee !important;
          border-left: 4px solid #4db2b8 !important;
          border-radius: 6px !important;
          padding: 12px 14px !important;
          text-decoration: none !important;
          transition: background-color 0.2s, border-left-color 0.2s !important;
        }
        .injected-vp-events .vp-event-item:hover {
          background: #fdfaf0 !important;
          border-left-color: #690122 !important;
          text-decoration: none !important;
        }

        .injected-vp-events .vp-event-date {
          display: inline-block !important;
          background: #ffe799 !important;
          color: #690122 !important;
          font-size: 10px !important;
          font-weight: 700 !important;
          letter-spacing: 0.5px !important;
          padding: 3px 8px !important;
          border-radius: 10px !important;
          margin-bottom: 7px !important;
        }

        .injected-vp-events .vp-event-title {
          font-size: 14px !important;
          font-weight: 700 !important;
          color: #690122 !important;
          line-height: 1.35 !important;
          margin-bottom: 5px !important;
          display: -webkit-box !important;
          -webkit-line-clamp: 2 !important;
          -webkit-box-orient: vertical !important;
          overflow: hidden !important;
        }

        .injected-vp-events .vp-event-action {
          font-size: 11px !important;
          font-weight: 700 !important;
          color: #4db2b8 !important;
        }

        /* --- DESKTOP NAV --- */
        .injected-vp-events .vp-events-nav {
          display: flex !important;
          align-items: center !important;
          justify-content: center !important;
          gap: 12px !important;
          margin-top: 12px !important;
        }
        .injected-vp-events .vp-nav-arrow {
          background: #ffffff !important;
          border: 1px solid #ddd !important;
          border-radius: 50% !important;
          width: 28px !important;
          height: 28px !important;
          line-height: 1 !important;
          padding: 0 !important;
          font-size: 12px !important;
          color: #690122 !important;
          cursor: pointer !important;
          display: flex !important;
          align-items: center !important;
          justify-content: center !important;
          transition: all 0.2s !important;
        }
        .injected-vp-events .vp-nav-arrow:hover:not(:disabled) {
          background: #4db2b8 !important;
          border-color: #4db2b8 !important;
          color: #ffffff !important;
        }
        .injected-vp-events .vp-nav-arrow:disabled {
          opacity: 0.3 !important;
          cursor: not-allowed !important;
        }
        .injected-vp-events .vp-nav-counter {
          font-size: 11px !important;
          font-weight: 700 !important;
          color: #690122 !important;
          min-width: 44px !important;
          text-align: center !important;
        }

        /* Swipe hint: mobile only (arrows take over on desktop) */
        .injected-vp-events .vp-swipe-hint {
          display: none !important;
          text-align: center !important;
          margin-top: 10px !important;
          font-size: 11px !important;
          font-weight: 600 !important;
          color: #690122 !important;
          align-items: center !important;
          justify-content: center !important;
          gap: 6px !important;
        }
        .injected-vp-events .vp-hint-arrow {
          font-size: 14px !important;
          font-weight: bold !important;
          color: #4db2b8 !important;
        }

        /* --- VIEW ALL BUTTON --- */
        .injected-vp-events .vp-events-viewall {
          display: block !important;
          box-sizing: border-box !important;
          width: 100% !important;
          margin-top: 12px !important;
          background-color: #4db2b8 !important;
          color: #ffffff !important;
          text-align: center !important;
          padding: 11px 10px !important;
          border-radius: 6px !important;
          font-size: 12px !important;
          font-weight: 700 !important;
          letter-spacing: 0.5px !important;
          text-transform: uppercase !important;
          text-decoration: none !important;
          transition: background-color 0.2s !important;
        }
        .injected-vp-events .vp-events-viewall:hover {
          background-color: #690122 !important;
          color: #ffffff !important;
          text-decoration: none !important;
        }

        /* --- MOBILE: native swipe instead of transform paging --- */
        @media (max-width: 768px) {
          .injected-vp-events .vp-events-viewport {
            overflow-x: auto !important;
            scroll-snap-type: x mandatory !important;
            -webkit-overflow-scrolling: touch !important;
            scrollbar-width: none !important;
            -ms-overflow-style: none !important;
          }
          .injected-vp-events .vp-events-viewport::-webkit-scrollbar {
            display: none !important;
          }
          .injected-vp-events .vp-events-track {
            transform: none !important;
          }
          .injected-vp-events .vp-events-page {
            scroll-snap-align: start !important;
          }
          .injected-vp-events .vp-events-nav {
            display: none !important;
          }
          .injected-vp-events .vp-swipe-hint {
            display: flex !important;
          }
        }
      `;
      document.head.appendChild(style);
    };

    if (document.readyState === 'complete' || document.readyState === 'interactive') {
      runTransformation();
    } else {
      window.addEventListener('DOMContentLoaded', runTransformation);
    }
    injectCSS();

  })();

}
</script>
</body>
</html>