<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY amp   "&#38;">
<!ENTITY copy   "&#169;">
<!ENTITY gt   "&#62;">
<!ENTITY hellip "&#8230;">
<!ENTITY laquo  "&#171;">
<!ENTITY lsaquo   "&#8249;">
<!ENTITY lsquo   "&#8216;">
<!ENTITY lt   "&#60;">
<!ENTITY nbsp   "&#160;">
<!ENTITY quot   "&#34;">
<!ENTITY raquo  "&#187;">
<!ENTITY rsaquo   "&#8250;">
<!ENTITY rsquo   "&#8217;">
]>

<!--
11/4/25 This is the cleaned up version of the redesign.
-->

<xsl:stylesheet version="3.0" expand-text="yes"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns:xs="http://www.w3.org/2001/XMLSchema"
				xmlns:ou="http://omniupdate.com/XSL/Variables"
				xmlns:fn="http://omniupdate.com/XSL/Functions"
				xmlns:ouc="http://omniupdate.com/XSL/Variables"
				xmlns:xlink="https://www.w3.org/1999/xlink"
				xmlns:map="http://www.w3.org/2005/xpath-functions/map"
				xmlns:func="http://www.w3.org/2005/xpath-functions"
				xmlns:h="http://www.w3.org/1999/xhtml"
				exclude-result-prefixes="xs ou fn ouc xlink map func h">

	<xsl:import href="widget-1.xsl"/>

	<xsl:template name="publish-output">
		<xsl:call-template name="common-header"/>
	</xsl:template>

	<xsl:template name="common-footer" />

	<xsl:template name="common-header" expand-text="yes">
		<xsl:choose>
			<xsl:when test="$ou:action = 'pub'">
				<xsl:if test="$lang = 'php'">
					<xsl:processing-instruction name="php">include $_SERVER['DOCUMENT_ROOT'].'\includes\notices.inc';?</xsl:processing-instruction>
				</xsl:if>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="unparsed-text(concat($ou:httproot,'includes/notices.inc'))" disable-output-escaping="yes" />
			</xsl:otherwise>
		</xsl:choose>

		<header class="sticky-top">
			<!-- Layer 1: Top Bar -->
			<div id="top-banner" class="d-none d-xl-block bg-light py-2">
				<div class="container d-flex justify-content-end">
					<ul class="list-inline mb-0">
						<li class="list-inline-item px-2">
							<a href="/students/index.php" class="text-dark"><i class="fas fa-user mr-1"></i>Current Students</a>
						</li>
						<li class="list-inline-item px-2">
							<a href="https://my.charteroak.edu/ICS/" class="text-dark"><i class="fas fa-edit mr-1"></i>Register for Classes</a>
						</li>
					</ul>
				</div>
			</div>
			<!-- Layer 2: Branding & CTAs -->
			<div id="main-header" class="bg-white py-3 d-none d-lg-block">
				<div class="container d-flex justify-content-between align-items-center">
					<a href="/" class="navbar-brand">
						<img src="{ou:pcf-param('logo-img')}" alt="{ou:pcf-param('logo-alt')}" class="img-fluid" width="216" height="76"/>
					</a>
					<div class="d-flex align-items-center">
						<form class="form-inline d-none d-lg-flex mr-3" action="/search/#content" role="search" aria-label="Sitewide search">
							<label for="site-search" class="sr-only">Search</label>
							<input id="site-search" class="form-control form-control-sm mr-2" type="search" name="q" placeholder="Search" aria-label="Search"/>
							<button class="btn btn-outline-primary btn-sm" type="submit"><i class="fas fa-search" aria-hidden="true"></i><span class="sr-only">Submit search</span></button>
						</form>
						<xsl:if test="ou:pcf-param('btn-1-url')!= ''" >
							<a href="{ou:pcf-param('btn-1-url')}" class="btn ca-button navy d-none d-md-inline-block">{ou:pcf-param('btn-1-text')}</a>
						</xsl:if>
						<xsl:if test="ou:pcf-param('btn-2-url')!= ''" >
							<a href="{ou:pcf-param('btn-2-url')}" class="btn ca-button bright-blue ml-2 d-none d-md-inline-block">{ou:pcf-param('btn-2-text')}</a>
						</xsl:if>
					</div>
				</div>
			</div>
			<!-- Layer 3: Main Navigation -->
			<nav class="navbar navbar-expand-lg navbar-light" id="main-nav" role="navigation" aria-label="Main Site Navigation">
				<div class="container">
					<a class="navbar-brand d-lg-none" href="/">
						<img src="https://www.charteroak.edu/_resources/images/COSC_Logo_horizontal.jpg" alt="Charter Oak State College" class="img-fluid" width="250"/>
					</a>
					<button class="navbar-toggler collapsed custom-toggler"
							type="button"
							data-toggle="collapse"
							data-target="#navbarContent"
							aria-controls="navbarContent"
							aria-expanded="false"
							aria-label="Toggle navigation">
						<span class="toggler-bar top"></span>
						<span class="toggler-bar middle"></span>
						<span class="toggler-bar bottom"></span>
					</button>
					<div class="collapse navbar-collapse position-relative" id="navbarContent">
						<ul class="navbar-nav mx-auto">
							<!-- Desktop: Mega Menu (lg and up) -->
							<li class="nav-item dropdown megamenu-li position-static d-none d-lg-block">
								<a
								   class="nav-link dropdown-toggle"
								   href="#"
								   id="programsDropdown"
								   role="button"
								   data-toggle="dropdown"
								   aria-haspopup="true"
								   aria-expanded="false"
								   aria-controls="programsMenu"
								   >
									Academic Programs
								</a>
								<div id="programsMenu" class="dropdown-menu megamenu megamenu--programs" role="region" aria-labelledby="programsDropdown" aria-hidden="true">
									<div class="row">
										<div class="col-md-3">
											<div class="list-group"
												 id="program-category-tabs"
												 role="tablist"
												 aria-label="Program categories"
												 aria-orientation="vertical"
												 aria-describedby="placeholder-label"
												 >
												<a class="list-group-item list-group-item-action" id="tab-Business" role="tab" aria-selected="false" aria-controls="Business" data-toggle="list" href="#Business">Business</a>
												<a class="list-group-item list-group-item-action" id="tab-ECE" role="tab" aria-selected="false" aria-controls="School_of_Education" data-toggle="list" href="#School_of_Education">Education, School of</a>
												<a class="list-group-item list-group-item-action" id="tab-Healthcare" role="tab" aria-selected="false" aria-controls="Healthcare" data-toggle="list" href="#Healthcare">Healthcare</a>
												<a class="list-group-item list-group-item-action" id="tab-Human_Services" role="tab" aria-selected="false" aria-controls="Human_Services" data-toggle="list" href="#Human_Services">Human Services and Behavioral Sciences</a>
												<a class="list-group-item list-group-item-action" id="tab-Technology" role="tab" aria-selected="false" aria-controls="Technology" data-toggle="list" href="#Technology">Technology</a>
												<a class="list-group-item list-group-item-action" id="tab-Additional_Degrees" role="tab" aria-selected="false" aria-controls="Additional_Degrees" data-toggle="list" href="#Additional_Degrees">Additional Degrees</a>
											</div>
										</div>
										<div class="col-md-9">
											<div class="tab-content" id="program-content" aria-live="polite">
												<div class="tab-pane fade show active" id="placeholder" role="tabpanel" aria-labelledby="placeholder-label">
													<p id="placeholder-label" class="text-muted mb-0">Please select a category to view programs.</p>
												</div>
												<!--Business-->
												<div class="tab-pane fade" id="Business" role="tabpanel" aria-labelledby="tab-Business">
													<xsl:apply-templates select="ouc:div[@label='business-programs']"/>
												</div>
												<!--School of Education-->
												<div class="tab-pane fade" id="School_of_Education" role="tabpanel" aria-labelledby="tab-ECE">
													<xsl:apply-templates select="ouc:div[@label='school-of-education-programs']"/>
												</div>
												<!--Healthcare-->
												<div class="tab-pane fade" id="Healthcare" role="tabpanel" aria-labelledby="tab-Healthcare">
													<xsl:apply-templates select="ouc:div[@label='healthcare-programs']"/>
												</div>
												<!--Human Services-->
												<div class="tab-pane fade" id="Human_Services" role="tabpanel" aria-labelledby="tab-Human_Services">
													<xsl:apply-templates select="ouc:div[@label='human-services-programs']"/>
												</div>
												<!--Technology-->
												<div class="tab-pane fade" id="Technology" role="tabpanel" aria-labelledby="tab-Technology">
													<xsl:apply-templates select="ouc:div[@label='technology-programs']"/>
												</div>
												<!--Additional-->
												<div class="tab-pane fade" id="Additional_Degrees" role="tabpanel" aria-labelledby="tab-Additional_Degrees">
													<xsl:apply-templates select="ouc:div[@label='additional-degree-programs']"/>
												</div>
											</div>
										</div>
									</div>
								</div>
							</li>
							<!-- Mobile: Accordion (below lg) -->
							<li class="nav-item d-lg-none w-100">
								<div id="mobilePrograms" class="accordion" role="region" aria-label="Academic Programs">
									<div class="card bg-transparent border-bottom border-top-0 border-left-0 border-right-0 rounded-0 mt-3">
										<div class="card-header px-0 bg-transparent border-0" id="headingPrograms">
											<h5 class="mb-0">
												<button class="btn btn-link nav-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#collapsePrograms" aria-expanded="false" aria-controls="collapsePrograms">
													Academic Programs
													<i class="fa-solid fa-caret-down"></i>
												</button>
											</h5>
										</div>
										<div id="collapsePrograms" class="collapse" aria-labelledby="headingPrograms" data-parent="#navbarContent">
											<div class="card-body pt-0 pl-0 pr-0">
												<div id="mobileProgramsAccordion" class="accordion" aria-label="Program categories">
													<!-- Category: Business -->
													<div class="card bg-transparent border-0">
														<div class="card-header px-0 bg-transparent border-0" id="mobileHeadBusiness">
															<h6 class="mb-0">
																<button class="btn btn-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#mobileCollapseBusiness" aria-expanded="false" aria-controls="mobileCollapseBusiness">
																	Business
																	<i class="fa-solid fa-caret-down"></i>
																</button>
															</h6>
														</div>
														<div id="mobileCollapseBusiness" class="p-2 collapse" aria-labelledby="mobileHeadBusiness" data-parent="#mobileProgramsAccordion" role="tabpanel">
															<xsl:apply-templates select="ouc:div[@label='business-programs']"/>
														</div>
													</div>
													<!-- Category: School of Education -->
													<div class="card bg-transparent border-0">
														<div class="card-header px-0 bg-transparent border-0" id="mobileHeadECE">
															<h6 class="mb-0">
																<button class="btn btn-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#mobileCollapseECE" aria-expanded="false" aria-controls="mobileCollapseECE">
																	Education, School of
																	<i class="fa-solid fa-caret-down"></i>
																</button>
															</h6>
														</div>
														<div id="mobileCollapseECE" class="p-2 collapse" aria-labelledby="mobileHeadECE" data-parent="#mobileProgramsAccordion" role="tabpanel">
															<xsl:apply-templates select="ouc:div[@label='school-of-education-programs']"/>
														</div>
													</div>
													<!-- Category: Healthcare -->
													<div class="card bg-transparent border-0">
														<div class="card-header px-0 bg-transparent border-0" id="mobileHeadHealthcare">
															<h6 class="mb-0">
																<button class="btn btn-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#mobileCollapseHealthcare" aria-expanded="false" aria-controls="mobileCollapseHealthcare">
																	Healthcare
																	<i class="fa-solid fa-caret-down"></i>
																</button>
															</h6>
														</div>
														<div id="mobileCollapseHealthcare" class="p-2 collapse" aria-labelledby="mobileHeadHealthcare" data-parent="#mobileProgramsAccordion" role="tabpanel">
															<xsl:apply-templates select="ouc:div[@label='healthcare-programs']"/>												
														</div>
													</div>
													<!-- Category: Human Services -->
													<div class="card bg-transparent border-0">
														<div class="card-header px-0 bg-transparent border-0" id="mobileHeadHumanServices">
															<h6 class="mb-0">
																<button class="btn btn-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#mobileCollapseHumanServices" aria-expanded="false" aria-controls="mobileCollapseHumanServices">
																	Human Services and Behavioral Sciences
																	<i class="fa-solid fa-caret-down"></i>
																</button>
															</h6>
														</div>
														<div id="mobileCollapseHumanServices" class="p-2 collapse" aria-labelledby="mobileHeadHumanServices" data-parent="#mobileProgramsAccordion" role="tabpanel">
															<xsl:apply-templates select="ouc:div[@label='human-services-programs']"/>
														</div>
													</div>
													<!-- Category: Technology -->
													<div class="card bg-transparent border-0">
														<div class="card-header px-0 bg-transparent border-0" id="mobileHeadTechnology">
															<h6 class="mb-0">
																<button class="btn btn-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#mobileCollapseTechnology" aria-expanded="false" aria-controls="mobileCollapseTechnology">
																	Technology
																	<i class="fa-solid fa-caret-down"></i>
																</button>
															</h6>
														</div>
														<div id="mobileCollapseTechnology" class="p-2 collapse" aria-labelledby="mobileHeadTechnology" data-parent="#mobileProgramsAccordion" role="tabpanel">
															<xsl:apply-templates select="ouc:div[@label='technology-programs']"/>
														</div>
													</div>
													<!-- Category: Additional Degrees -->
													<div class="card bg-transparent border-0">
														<div class="card-header px-0 bg-transparent border-0" id="mobileHeadAdditionalDegrees">
															<h6 class="mb-0">
																<button class="btn btn-link d-flex justify-content-between align-items-center w-100" type="button" data-toggle="collapse" data-target="#mobileCollapseAdditionalDegrees" aria-expanded="false" aria-controls="mobileCollapseAdditionalDegrees">
																	Additional Degrees
																	<i class="fa-solid fa-caret-down"></i>
																</button>
															</h6>
														</div>
														<div id="mobileCollapseAdditionalDegrees" class="p-2 collapse" aria-labelledby="mobileHeadAdditionalDegrees" data-parent="#mobileProgramsAccordion" role="tabpanel">
															<xsl:apply-templates select="ouc:div[@label='additional-degree-programs']"/>
														</div>
													</div>
												</div>
											</div>
										</div>
									</div>
								</div>
							</li>
							<!-- Additional Nav Items (shared) -->
							<li class="nav-item dropdown d-none d-lg-block">
								<a class="nav-link dropdown-toggle" href="#" id="getStartedDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
									Get Started
								</a>
								<div class="dropdown-menu p-2" aria-labelledby="getStartedDropdown">
									<xsl:apply-templates select="ouc:div[@label='get-started-links']"/>
								</div>
							</li>
							<li class="nav-item dropdown d-none d-lg-block">
								<a class="nav-link dropdown-toggle" href="#" id="altCreditDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
									Alternate Ways to Earn Credit
								</a>
								<div class="dropdown-menu p-2" aria-labelledby="altCreditDropdown">
									<xsl:apply-templates select="ouc:div[@label='alternate-ways-links']"/>
								</div>
							</li>
							<li class="nav-item dropdown d-none d-lg-block">
								<a class="nav-link dropdown-toggle" href="#" id="tuitionDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
									Tuition Info
								</a>
								<div class="dropdown-menu p-2" aria-labelledby="tuitionDropdown">
									<xsl:apply-templates select="ouc:div[@label='tuition-info-links']"/>
								</div>
							</li>
							<li class="nav-item dropdown d-none d-lg-block">
								<a class="nav-link dropdown-toggle" href="#" id="aboutDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
									About Us
								</a>
								<div class="dropdown-menu p-2" aria-labelledby="aboutDropdown">
									<xsl:apply-templates select="ouc:div[@label='about-us-links']"/>
								</div>
							</li>
							<!-- Mobile Accordion: Get Started -->
							<li class="nav-item d-lg-none w-100">
								<div id="mobileGetStarted" class="accordion" role="region" aria-label="Get Started">
									<div class="card bg-transparent border-bottom border-top-0 border-left-0 border-right-0 rounded-0">
										<div class="card-header px-0 bg-transparent border-0" id="headingGetStarted">
											<h5 class="mb-0">
												<button class="btn btn-link nav-link d-flex justify-content-between align-items-center w-100" type="button"
														data-toggle="collapse" data-target="#collapsedropGetStarted" aria-expanded="false" aria-controls="collapsedropGetStarted">
													Get Started
													<i class="fa-solid fa-caret-down"></i>
												</button>
											</h5>
										</div>
										<div id="collapsedropGetStarted" class="collapse" aria-labelledby="headingGetStarted" data-parent="#navbarContent">
											<div class="card-body p-3">
												<xsl:apply-templates select="ouc:div[@label='get-started-links']"/>
											</div>
										</div>
									</div>
								</div>
							</li>
							<!-- Mobile Accordion: Alternate Ways to Earn Credit -->
							<li class="nav-item d-lg-none w-100">
								<div id="mobileAltCredit" class="accordion" role="region" aria-label="Alternate Credit">
									<div class="card bg-transparent border-bottom border-top-0 border-left-0 border-right-0 rounded-0">
										<div class="card-header px-0 bg-transparent border-0" id="headingAltCredit">
											<h5 class="mb-0">
												<button class="btn btn-link nav-link d-flex justify-content-between align-items-center w-100" type="button"
														data-toggle="collapse" data-target="#collapsedropAltCredit" aria-expanded="false" aria-controls="collapsedropAltCredit">
													Alternate Ways to Earn Credit
													<i class="fa-solid fa-caret-down"></i>
												</button>
											</h5>
										</div>
										<div id="collapsedropAltCredit" class="collapse" aria-labelledby="headingAltCredit" data-parent="#navbarContent">
											<div class="card-body p-3">
												<xsl:apply-templates select="ouc:div[@label='alternate-ways-links']"/>
											</div>
										</div>
									</div>
								</div>
							</li>
							<!-- Mobile Accordion: Tuition Info -->
							<li class="nav-item d-lg-none w-100">
								<div id="mobileTuition" class="accordion" role="region" aria-label="Tuition Info">
									<div class="card bg-transparent border-bottom border-top-0 border-left-0 border-right-0 rounded-0">
										<div class="card-header px-0 bg-transparent border-0" id="headingTuition">
											<h5 class="mb-0">
												<button class="btn btn-link nav-link d-flex justify-content-between align-items-center w-100" type="button"
														data-toggle="collapse" data-target="#collapsedropTuition" aria-expanded="false" aria-controls="collapsedropTuition">
													Tuition Info
													<i class="fa-solid fa-caret-down"></i>
												</button>
											</h5>
										</div>
										<div id="collapsedropTuition" class="collapse" aria-labelledby="headingTuition" data-parent="#navbarContent">
											<div class="card-body p-3">
												<xsl:apply-templates select="ouc:div[@label='tuition-info-links']"/>
											</div>
										</div>
									</div>
								</div>
							</li>
							<!-- Mobile Accordion: About Us -->
							<li class="nav-item d-lg-none w-100">
								<div id="mobileAbout" class="accordion" role="region" aria-label="About Us">
									<div class="card bg-transparent border-bottom border-top-0 border-left-0 border-right-0 rounded-0">
										<div class="card-header px-0 bg-transparent border-0" id="headingAbout">
											<h5 class="mb-0">
												<button class="btn btn-link nav-link d-flex justify-content-between align-items-center w-100" type="button"
														data-toggle="collapse" data-target="#collapsedropAbout" aria-expanded="false" aria-controls="collapsedropAbout">
													About Us
													<!-- <span class="ml-2" aria-hidden="true">▾</span> --><i class="fa-solid fa-caret-down"></i>
												</button>
											</h5>
										</div>
										<div id="collapsedropAbout" class="collapse" aria-labelledby="headingAbout" data-parent="#navbarContent">
											<div class="card-body p-3">
												<xsl:apply-templates select="ouc:div[@label='about-us-links']"/>
											</div>
										</div>
									</div>
								</div>
							</li>
							<!--Mobile current students and registration-->
							<li class="nav-item d-lg-none my-3 py-2"><a href="#" class="text-dark"><i class="fas fa-user mr-2"></i>Current Students</a></li>
							<li class="nav-item d-lg-none my-1 py-2"><a href="#" class="text-dark"><i class="fas fa-edit mr-2"></i>Register for Classes</a></li>
							<!-- Mobile search (visible on mobile only) -->
							<li class="nav-item d-lg-none">
								<hr class="d-lg-none"/>
								<div id="mobileSearch" class="px-3 pt-3 pb-3 mt-3">
									<form role="search" action="/search" method="get" class="input-group">
										<label for="site-search-mobile" class="sr-only">Search</label>
										<input
											   id="site-search-mobile"
											   name="q"
											   type="search"
											   class="form-control"
											   placeholder="Search programs, pages…"
											   aria-label="Search site"/>
										<div class="input-group-append">
											<button class="btn btn-outline-secondary" type="submit" aria-label="Submit search">
												<span class="fas fa-search" aria-hidden="true"></span>
											</button>
										</div>
									</form>
								</div>
								<hr class="d-lg-none"/>
							</li>
							<li>
								<!-- Mobile CTAs with phone underneath -->
								<div id="mobileCtas" class="d-lg-none px-3 pt-2 pb-3">
									<div class="ctas-grid">
										<a href="/request-info" class="ca-button bright-blue mobile" aria-label="Request information">
											Request Info
										</a>
										<a href="/apply" class="ca-button navy mobile" aria-label="Apply now">
											Apply Now
										</a>
									</div>
									<div class="phone-row">
										<a href="tel:18667277662" class="cta-phone" aria-label="Call Charter Oak at 1 866 727 7662">
											<span class="fas fa-phone" aria-hidden="true"></span>
											<span class="sr-only">Phone: </span>(860) 515-3800
										</a>
									</div>
								</div>
							</li>
						</ul>
					</div>
				</div>
			</nav>
		</header>
	</xsl:template>

	<!-- NEW 10/4/25 -->

	<!-- =========================================
SCOPED KEYS (per <table class="nav-links">)
========================================= -->

	<!-- All rows, keyed by the table node they belong to -->
	<xsl:key name="kRowsByTable"
			 match="table[@class='nav-links']/tbody/tr"
			 use="generate-id(ancestor::table[@class='nav-links'][1])"/>

	<!-- First row for each distinct Group, per table -->
	<xsl:key name="kGroupsByTable"
			 match="table[@class='nav-links']/tbody/tr"
			 use="concat(generate-id(ancestor::table[@class='nav-links'][1]),
				  '||', normalize-space(td[1]))"/>

	<!-- ===============================
Two-column renderer for tab pane
- Left: Bachelor's, Master's
- Right: Associates, Certificates
- Fallback: flat list split 50/50
=============================== -->
	<xsl:template match="table[@class='nav-links']">
		<!-- Params stay the same -->
		<xsl:param name="left-groups"  select="'bachelors|masters'"/>
		<xsl:param name="right-groups" select="'associate|associates|certificates|certificate'"/>

		<!-- Identify THIS table and fetch only its rows -->
		<xsl:variable name="TID"  select="generate-id(.)"/>
		<xsl:variable name="rows" select="key('kRowsByTable', $TID)"/>
		<xsl:variable name="has-groups" select="$rows[normalize-space(td[1])!='']"/>

		<div class="row">
			<xsl:choose>
				<!-- ===== CASE A: Grouped (degrees present) ===== -->
				<xsl:when test="$has-groups">
					<!-- LEFT COL -->
					<div class="col-md-6">
						<!-- Distinct groups within THIS table -->
						<xsl:for-each select="$rows[normalize-space(td[1])!='']
											  [generate-id() = generate-id(
											  key('kGroupsByTable',
											  concat($TID,'||', normalize-space(td[1])))[1]
											  )]">
							<xsl:sort select="normalize-space(td[1])"/>

							<!-- Raw and normalized group names -->
							<xsl:variable name="groupRaw" select="normalize-space(td[1])"/>
							<xsl:variable name="groupKey"
										  select="translate(translate(translate($groupRaw,
												  'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),
												  &quot;'&quot;, ''), '’', '')"/>

							<xsl:variable name="in-left"
										  select="contains(concat('|', $left-groups,  '|'), concat('|', $groupKey, '|'))"/>
							<xsl:variable name="in-right"
										  select="contains(concat('|', $right-groups, '|'), concat('|', $groupKey, '|'))"/>

							<!-- Default unknown groups -> LEFT -->
							<xsl:if test="$in-left or not($in-right)">
								<h6 class="menu-heading"><xsl:value-of select="$groupRaw"/></h6>
								<ul class="list-unstyled">
									<!-- Only rows from THIS table and THIS group -->
									<xsl:for-each select="key('kRowsByTable', $TID)[normalize-space(td[1])=$groupRaw]">
										<li>
											<a class="dropdown-item" href="{normalize-space(td[3])}">
												<xsl:value-of select="normalize-space(td[2])"/>
											</a>
										</li>
									</xsl:for-each>
								</ul>
							</xsl:if>
						</xsl:for-each>
					</div>
					<!-- RIGHT COL -->
					<div class="col-md-6">
						<xsl:for-each select="$rows[normalize-space(td[1])!='']
											  [generate-id() = generate-id(
											  key('kGroupsByTable',
											  concat($TID,'||', normalize-space(td[1])))[1]
											  )]">
							<xsl:sort select="normalize-space(td[1])"/>

							<xsl:variable name="groupRaw" select="normalize-space(td[1])"/>
							<xsl:variable name="groupKey"
										  select="translate(translate(translate($groupRaw,
												  'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),
												  &quot;'&quot;, ''), '’', '')"/>
							<xsl:variable name="in-right"
										  select="contains(concat('|', $right-groups, '|'), concat('|', $groupKey, '|'))"/>

							<xsl:if test="$in-right">
								<h6 class="menu-heading"><xsl:value-of select="$groupRaw"/></h6>
								<ul class="list-unstyled">
									<xsl:for-each select="key('kRowsByTable', $TID)[normalize-space(td[1])=$groupRaw]">
										<li>
											<a class="dropdown-item" href="{normalize-space(td[3])}">
												<xsl:value-of select="normalize-space(td[2])"/>
											</a>
										</li>
									</xsl:for-each>
								</ul>
							</xsl:if>
						</xsl:for-each>
					</div>
				</xsl:when>
				<xsl:otherwise>
					<!-- Single column, flat list -->
					<div class="col-12">
						<ul class="list-unstyled">
							<xsl:for-each select="$rows">
								<li>
									<a class="dropdown-item" href="{normalize-space(td[3])}">
										<xsl:value-of select="normalize-space(td[2])"/>
									</a>
								</li>
							</xsl:for-each>
						</ul>
					</div>
				</xsl:otherwise>
			</xsl:choose>
		</div>
	</xsl:template>
</xsl:stylesheet>