.Stats_wrapper__6VKvM {
	--surface: var(--white);
	--surface-alt: var(--light-grey);
	--text: var(--black);
	--text-muted: var(--grey);
	--rule: #e0e0e0;
	--accent: var(--red);

	background-color: var(--surface);
	color: var(--text);

	border-top: 1px solid var(--rule);
	border-bottom: 1px solid var(--rule);
	padding: 60px 20px;
}

.Stats_wrapper__6VKvM[data-theme="dark"] {
	--surface: #111;
	--surface-alt: var(--dark-grey);
	--text: var(--white);
	--text-muted: #b0b0b0;
	--rule: #3a3a3a;
	--accent: #e5233a;
}

/*
	The mockup was `repeat(4, 1fr)`, but the Prismic group is unbounded — a 5th stat
	wrapped onto a row of its own and dragged a stray divider with it. Same auto-fit
	approach as `numbered`: the 300px floor is what caps it at 4 across, since at the
	1440px container five columns would need 1500px and cannot fit, while four (1200px)
	comfortably can. Below that it steps down on its own, and `row-gap` keeps wrapped
	rows apart at any count.
*/
.Stats_grid__S_61m {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
	grid-row-gap: 40px;
	row-gap: 40px;
	overflow: hidden;
}

/*
	globals.css:202-226 scopes list styling to `.wrapper ul`, and the app shell wraps
	everything in a bare <div class="wrapper"> — so that rule reaches into this module
	regardless of CSS-module hashing. It applies a 60px indent, 24px item margins, and
	a red ::before dot to every <li>. `list-style: none` does not remove a pseudo-
	element, so these are scoped one class deeper to outrank `.wrapper ul` (0,1,1).
*/
.Stats_wrapper__6VKvM .Stats_grid__S_61m {
	margin: 0;
	padding: 0;
	font-size: inherit;
}

.Stats_wrapper__6VKvM .Stats_grid__S_61m li {
	margin: 0;
	position: static;
}

.Stats_wrapper__6VKvM .Stats_grid__S_61m li::before {
	content: none;
}

/*
	globals.css:224 `.wrapper ul li:last-child` is (0,2,2) — the :last-child counts as
	a class — so it outranks the (0,2,1) rule above and its 20px bottom margin survived
	as dead space under the list. Needs its own selector at (0,3,2) to clear.
*/
.Stats_wrapper__6VKvM .Stats_grid__S_61m li:last-child {
	margin-bottom: 0;
}

/*
	Hairlines are drawn on the leading edge and pulled 1px outside the track, so the
	first item of *every* row has its rule clipped by the grid's `overflow: hidden`.
	Column-count-agnostic: a lone wrapped item sheds its divider instead of stranding
	one, which `border-right` on a fixed 4-up could not do.
*/
.Stats_stat__U5KpX {
	padding: 0 30px;
	border-left: 1px solid var(--rule);
	margin-left: -1px;
}

/*
	The shipped module hid the leading rule via the grid's overflow clip, but at
	fractional container widths the -1px margin rounds onto a visible pixel.
	:first-child removes it outright; wrapped-row leaders still rely on the clip.
*/
.Stats_stat__U5KpX:first-child {
	border-left: none;
	margin-left: 0;
	padding-left: 0;
}

.Stats_stat__U5KpX:last-child {
	padding-right: 0;
}

/*
	Values are mixed alphanumeric ("20", "38", "ISO", "USAR"), so no
	tabular-nums and no fixed width — the type has to sit happily on letters.
	The value sits on --text so the number reads as type, not a solid red block;
	only the suffix carries the accent.
*/
.Stats_value__SqZvq {
	font-family: var(--heading-font), sans-serif;
	font-size: clamp(40px, 4vw, 56px);
	font-weight: bold;
	line-height: 1;
	letter-spacing: -1px;
	color: var(--text);
}

.Stats_suffix__WqR7r {
	font-size: 0.5em;
	line-height: 1;
	vertical-align: super;
	letter-spacing: 0;
	margin-left: 2px;
	color: var(--accent);
}

.Stats_label__nMFcL {
	font-size: 16px;
	line-height: 1.4;
	color: var(--text-muted);
	margin-top: 12px;
}

@media screen and (max-width: 1024px) {
	.Stats_wrapper__6VKvM {
		padding: 50px 20px;
	}

	.Stats_grid__S_61m {
		grid-template-columns: repeat(2, 1fr);
	}

	.Stats_stat__U5KpX:nth-child(2n + 1) {
		border-left: none;
		margin-left: 0;
		padding-left: 0;
	}

	.Stats_stat__U5KpX:nth-child(2n) {
		padding-right: 0;
	}
}

@media screen and (max-width: 768px) {
	.Stats_wrapper__6VKvM {
		padding: 40px 20px;
	}

	.Stats_grid__S_61m {
		grid-template-columns: 1fr;
		row-gap: 0;
	}

	.Stats_stat__U5KpX {
		padding: 24px 0;
		border-left: none;
		margin-left: 0;
		border-bottom: 1px solid var(--rule);
	}

	.Stats_stat__U5KpX:first-child {
		padding-top: 0;
	}

	.Stats_stat__U5KpX:last-child {
		padding-bottom: 0;
		border-bottom: none;
	}
}

/*
	No theme block here on purpose: this partial always renders inside a themed
	`.wrapper` root, and CSS custom properties inherit, so `--text`,
	`--text-muted` and `--accent` resolve from the parent variation.
*/

.SectionHeader_header__B0sh_ {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 20px;
	max-width: 800px;
	margin-bottom: 60px;
}

.SectionHeader_eyebrow__atYle {
	font-size: 16px;
	line-height: 1.4;
	font-weight: bold;
	color: var(--accent);
}

.SectionHeader_heading__O85RJ {
	color: var(--text);
}

/*
	`.accent` is emitted by the default @prismicio/react serializer for the
	"accent" label on the heading field, so it is a global class name and needs
	:global() to survive CSS-module hashing. Scoped under `.heading` so it stays
	theme-aware — a bare rule in globals.css would be locked to `--red` and would
	fail the dark theme, where the accent lightens to #e5233a for contrast.
*/
.SectionHeader_heading__O85RJ .accent {
	color: var(--accent);
}

.SectionHeader_intro__zJWfS {
	color: var(--text-muted);
}

/*
	The intro is multi-paragraph rich text under a single wrapper, so paragraph
	rhythm is a sibling rule rather than the header's flex gap.
*/
.SectionHeader_intro__zJWfS p + p {
	margin-top: 20px;
}

@media screen and (max-width: 1024px) {
	.SectionHeader_header__B0sh_ {
		margin-bottom: 50px;
	}
}

@media screen and (max-width: 768px) {
	.SectionHeader_header__B0sh_ {
		gap: 16px;
		margin-bottom: 40px;
	}
}

.Numbered_wrapper___UBLf {
	--surface: var(--white);
	--surface-alt: var(--light-grey);
	--text: var(--black);
	--text-muted: var(--grey);
	--rule: #e0e0e0;
	--accent: var(--red);

	/*
		Icon-badge inks. The glyph does NOT ride --accent: the dark theme
		lightens --accent to #e5233a for text contrast, which reads pink at
		glyph mass on a military page. Decorative glyphs don't owe body-text
		contrast, so the badge pins to the deep reds. Flat rgba per theme.
	*/
	--badge-ink: var(--red);
	--badge-tint: rgba(189, 8, 27, 0.07);
	--badge-border: rgba(189, 8, 27, 0.35);

	background-color: var(--surface);
	color: var(--text);

	padding: 100px 20px;
}

.Numbered_wrapper___UBLf[data-theme="dark"] {
	--surface: #111;
	--surface-alt: var(--dark-grey);
	--text: var(--white);
	--text-muted: #b0b0b0;
	--rule: #3a3a3a;
	--accent: #e5233a;

	--badge-ink: #c8282a;
	--badge-tint: rgba(200, 40, 42, 0.12);
	--badge-border: rgba(200, 40, 42, 0.5);
}

/*
	Column count is driven by how many cards the editor adds, not hardcoded: auto-fit
	packs as many as fit and collapses the rest. The 280px floor is what caps it at 4
	across — at the 1440px container with a 30px gap, five columns would need
	5*280 + 4*30 = 1520px and cannot fit, so 4 is the ceiling by construction. Below
	that it degrades on its own (3-up ≈ 1000px, 2-up ≈ 650px, 1-up on mobile) with no
	breakpoint doing the work.
*/
.Numbered_grid__tpvHn {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
	grid-gap: 30px;
	gap: 30px;
}

/*
	Count-aware flow: auto-fit packs 4-across at the 1440 container, stranding
	counts divisible by three with an orphan row (6 -> 4+2). When the count
	divides by three, cap at 3-across so 6 flows 3x2 and 9 flows 3x3. The
	component stamps data-count from items.length.
*/
.Numbered_grid__tpvHn[data-count="3"],
.Numbered_grid__tpvHn[data-count="6"],
.Numbered_grid__tpvHn[data-count="9"] {
	grid-template-columns: repeat(3, 1fr);
}

/*
	globals.css:202-226 scopes list styling to `.wrapper ul`, and the app shell wraps
	everything in a bare <div class="wrapper"> — so that rule reaches into this module
	regardless of CSS-module hashing. It applies a 60px indent, 24px item margins, and
	a red ::before dot to every <li>. `list-style: none` does not remove a pseudo-
	element, so these are scoped one class deeper to outrank `.wrapper ul` (0,1,1).
*/
.Numbered_wrapper___UBLf .Numbered_grid__tpvHn {
	margin: 0;
	padding: 0;
	font-size: inherit;
}

.Numbered_wrapper___UBLf .Numbered_grid__tpvHn li {
	margin: 0;
	position: static;
}

.Numbered_wrapper___UBLf .Numbered_grid__tpvHn li::before {
	content: none;
}

/*
	globals.css:224 `.wrapper ul li:last-child` is (0,2,2) — the :last-child counts as
	a class — so it outranks the (0,2,1) rule above and its 20px bottom margin survived
	as dead space under the list. Needs its own selector at (0,3,2) to clear.
*/
.Numbered_wrapper___UBLf .Numbered_grid__tpvHn li:last-child {
	margin-bottom: 0;
}

/*
	`height: 100%` normalizes the cards. Grid items stretch by default, but the <li>
	was being sized by its own content because the global list rules were still acting
	on it; pinning the height makes every card in a row match the tallest, and the
	tag's `margin-top: auto` then lines the footer rules up across the row.
*/
.Numbered_card__Aceh0 {
	display: flex;
	flex-direction: column;
	align-items: stretch;
	height: 100%;
	overflow: hidden;
	background-color: var(--surface-alt);
	border-radius: var(--border-radius);
	box-shadow: var(--shadow);
}

/* --shadow is 0.07-alpha black: invisible on dark, so swap it for a hairline. */
.Numbered_wrapper___UBLf[data-theme="dark"] .Numbered_card__Aceh0 {
	box-shadow: none;
	border: 1px solid var(--rule);
}

/*
	Padding lives on .cardBody, not .card, so a card-top image can bleed to the
	edges (overflow:hidden on .card keeps its corners inside the radius). An
	imageless card is visually identical to the shipped layout.
*/
.Numbered_media__4kiH3 {
	position: relative;
	width: 100%;
	aspect-ratio: 16 / 9;
	border-bottom: 1px solid var(--rule);
}

.Numbered_cardBody__MgqIR {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	flex: 1 1 auto;
	padding: 30px 26px;
}

/*
	Icon badge — the source `.user-tile-icon`: a square accent-tinted box with a
	deep-red glyph (--badge-ink, not --accent, so it doesn't go pink on dark).
	Sized so swapping badge for number doesn't shift the title line.
*/
.Numbered_iconBadge__hnZfO {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	background-color: var(--badge-tint);
	border: 1px solid var(--badge-border);
	color: var(--badge-ink);
	margin-bottom: 12px;
}

.Numbered_number__XICZ5 {
	font-family: var(--heading-font), sans-serif;
	font-size: clamp(32px, 2.5vw, 40px);
	font-weight: bold;
	line-height: 1;
	letter-spacing: -1px;
	color: var(--accent);
	opacity: 0.3;
	margin-bottom: 12px;
}

/*
	The global h3 is 40px — set for full-width headings, far too large in a ~330px
	card. Overridden here along with the body size, so a 60-90 word description still
	holds a readable measure at 4-up.
*/
.Numbered_title__kBmt_ {
	font-size: 22px;
	line-height: 1.3;
	color: var(--text);
	margin-bottom: 14px;
}

/*
	The description is rich text under a wrapper div, so the type rules target the
	emitted paragraphs directly — globals' `p { font-size: 18px }` is an element
	selector and would beat inheritance from the wrapper.
*/
.Numbered_description__jM7Nt {
	color: var(--text-muted);
}

.Numbered_description__jM7Nt p {
	font-size: 16px;
	line-height: 1.7;
}

.Numbered_description__jM7Nt p + p {
	margin-top: 20px;
}

/*
	No longer borrows `.industryBtn` from CourseGrid — that class is styled as an actual
	filter control, so the outlined rounded chip read as a clickable button. These are
	non-interactive metadata ("Per Shift / Per Job"), so the affordance was a lie.
	Now plain text above a hairline. `margin-top: auto` pins it to the card foot so the
	rules line up across a row regardless of description length.
*/
.Numbered_tag__gPUXU {
	margin-top: auto;
	align-self: stretch;
	padding-top: 16px;
	border-top: 1px solid var(--rule);
	color: var(--text-muted);
	font-size: 14px;
	line-height: 1.4;
}

@media screen and (max-width: 1024px) {
	.Numbered_wrapper___UBLf {
		padding: 80px 20px;
	}

	/* Count-capped grids step 3-across down to 2-across (6 flows 2x3). */
	.Numbered_grid__tpvHn[data-count="3"],
	.Numbered_grid__tpvHn[data-count="6"],
	.Numbered_grid__tpvHn[data-count="9"] {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media screen and (max-width: 768px) {
	.Numbered_wrapper___UBLf {
		padding: 60px 20px;
	}

	/* data-count selectors carry (0,2,0), so the stack-to-one rule restates
	   them or it would lose the cascade. */
	.Numbered_grid__tpvHn,
	.Numbered_grid__tpvHn[data-count="3"],
	.Numbered_grid__tpvHn[data-count="6"],
	.Numbered_grid__tpvHn[data-count="9"] {
		grid-template-columns: 1fr;
		gap: 20px;
	}

	.Numbered_cardBody__MgqIR {
		padding: 40px 20px;
	}

	.Numbered_title__kBmt_,
	.Numbered_number__XICZ5,
	.Numbered_iconBadge__hnZfO {
		margin-bottom: 16px;
	}

	.Numbered_tag__gPUXU {
		margin-top: 24px;
	}
}

.Features_wrapper__1w2pc {
	--surface: var(--white);
	--surface-alt: var(--light-grey);
	--text: var(--black);
	--text-muted: var(--grey);
	--rule: #e0e0e0;
	--accent: var(--red);

	background-color: var(--surface);
	color: var(--text);

	padding: 100px 20px;
}

.Features_wrapper__1w2pc[data-theme="dark"] {
	--surface: #111;
	--surface-alt: var(--dark-grey);
	--text: var(--white);
	--text-muted: #b0b0b0;
	--rule: #3a3a3a;
	--accent: #e5233a;
}

.Features_grid__QBBfE {
	list-style: none;
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	grid-gap: 60px 50px;
	gap: 60px 50px;
}

/*
	globals.css:202-226 scopes list styling to `.wrapper ul`, and the app shell wraps
	everything in a bare <div class="wrapper"> — so that rule reaches into this module
	regardless of CSS-module hashing. It applies a 60px indent, 24px item margins, and
	a red ::before dot to every <li>. `list-style: none` does not remove a pseudo-
	element, so these are scoped one class deeper to outrank `.wrapper ul` (0,1,1).
*/
.Features_wrapper__1w2pc .Features_grid__QBBfE {
	margin: 0;
	padding: 0;
	font-size: inherit;
}

.Features_wrapper__1w2pc .Features_grid__QBBfE li {
	margin: 0;
	position: static;
}

.Features_wrapper__1w2pc .Features_grid__QBBfE li::before {
	content: none;
}

/*
	globals.css:224 `.wrapper ul li:last-child` is (0,2,2) — the :last-child counts as
	a class — so it outranks the (0,2,1) rule above and its 20px bottom margin survived
	as dead space under the list. Needs its own selector at (0,3,2) to clear.
*/
.Features_wrapper__1w2pc .Features_grid__QBBfE li:last-child {
	margin-bottom: 0;
}

.Features_feature__oxzge {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
}

/* Same idiom as slices/Modules/Modules.module.css `.title`. */
.Features_title__2KNtw {
	border-left: 6px solid var(--accent);
	padding-left: 20px;
	color: var(--text);
	margin-bottom: 20px;
}

.Features_description__7oau7 {
	color: var(--text-muted);
}

/*
	Paragraph rhythm is a sibling rule inside the rich-text wrapper, since the
	description is no longer one class per paragraph.
*/
.Features_description__7oau7 p + p {
	margin-top: 20px;
}

@media screen and (max-width: 1024px) {
	.Features_wrapper__1w2pc {
		padding: 80px 20px;
	}

	.Features_grid__QBBfE {
		gap: 50px 40px;
	}
}

@media screen and (max-width: 768px) {
	.Features_wrapper__1w2pc {
		padding: 60px 20px;
	}

	.Features_grid__QBBfE {
		grid-template-columns: 1fr;
		gap: 40px;
	}

	.Features_title__2KNtw {
		border-left-width: 4px;
		padding-left: 16px;
		margin-bottom: 16px;
	}
}

.Pills_wrapper__TyBzl {
	--surface: var(--white);
	--surface-alt: var(--light-grey);
	--text: var(--black);
	--text-muted: var(--grey);
	--rule: #e0e0e0;
	--accent: var(--red);

	background-color: var(--surface);
	color: var(--text);

	padding: 100px 20px;
}

.Pills_wrapper__TyBzl[data-theme="dark"] {
	--surface: #111;
	--surface-alt: var(--dark-grey);
	--text: var(--white);
	--text-muted: #b0b0b0;
	--rule: #3a3a3a;
	--accent: #e5233a;
}

.Pills_list__PGyf4 {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
}

/*
	globals.css:202-226 scopes list styling to `.wrapper ul`, and the app shell wraps
	everything in a bare <div class="wrapper"> — so that rule reaches into this module
	regardless of CSS-module hashing. It applies a 60px indent, 24px item margins, and
	a red ::before dot to every <li>. `list-style: none` does not remove a pseudo-
	element, so these are scoped one class deeper to outrank `.wrapper ul` (0,1,1).
*/
.Pills_wrapper__TyBzl .Pills_list__PGyf4 {
	margin: 0;
	padding: 0;
	font-size: inherit;
}

.Pills_wrapper__TyBzl .Pills_list__PGyf4 li {
	margin: 0;
	position: static;
}

.Pills_wrapper__TyBzl .Pills_list__PGyf4 li::before {
	content: none;
}

/*
	globals.css:224 `.wrapper ul li:last-child` is (0,2,2) — the :last-child counts as
	a class — so it outranks the (0,2,1) rule above and its 20px bottom margin survived
	as dead space under the list. Needs its own selector at (0,3,2) to clear.
*/
.Pills_wrapper__TyBzl .Pills_list__PGyf4 li:last-child {
	margin-bottom: 0;
}

/*
	Matches `.industryBtn` in slices/CourseGrid/CourseGrid.module.css, minus the
	interactive affordances — these are labels, not controls.
*/
.Pills_pill__asvfc {
	border: 2px solid var(--accent);
	border-radius: var(--border-radius);
	background-color: transparent;
	color: var(--text);
	font-size: 16px;
	line-height: 1.4;
	font-weight: bold;
	padding: 8px 20px;
}

@media screen and (max-width: 1024px) {
	.Pills_wrapper__TyBzl {
		padding: 80px 20px;
	}
}

@media screen and (max-width: 768px) {
	.Pills_wrapper__TyBzl {
		padding: 60px 20px;
	}

	.Pills_list__PGyf4 {
		gap: 12px;
	}

	.Pills_pill__asvfc {
		padding: 6px 16px;
	}
}


/*# sourceMappingURL=cce28ba14aee2e31.css.map*/