/* =========================================================================
   SIGNAL — Eduway design system · v0.2
   Personality: kinetic, editorial, confident, instrument-grade.
     · Crisp ivory surfaces over warm cream
     · Sharp geometry and tight grids over organic curves
     · Display-serif italic editorial moments over hand-drawn underlines
     · Mono brackets and counters over watercolor flourishes
     · Glow + sweep motion over soft layered shadows
     · Fireflower remains the flagship voice (locked from sunrise)
   Mirrors the tokens / accents / components defined in eduway-signal.html
   v0.2. Sunrise token names (--plum-*, --sage-*, --teal-*, --peach-*,
   --terracotta, --butter) are kept as aliases so existing section CSS
   resolves cleanly without rewrites.
   ========================================================================= */


/* -------------------------------------------------------------------------
   1. TOKENS
   ------------------------------------------------------------------------- */
:root {

	/* Brand — Fireflower (LOCKED, unchanged from sunrise) */
	--fire-50:  #FFF1DF;
	--fire-100: #FFDFB8;
	--fire-200: #FFC489;
	--fire-300: #FFA85B;
	--fire-400: #FF953A;
	--fire-500: #FF7F1C;   /* Primary CTA */
	--fire-600: #E5670F;   /* Hover/pressed */
	--fire-700: #B84F08;
	--fire-800: #823806;

	/* Ink — cooler, sharper than sunrise's plum */
	--ink-50:   #EEEDF4;
	--ink-100:  #D6D3E2;
	--ink-200:  #A8A2BF;
	--ink-300:  #6B6587;   /* Muted text */
	--ink-400:  #3F3A57;   /* Secondary text */
	--ink-500:  #25213B;
	--ink-700:  #15122A;
	--ink-900:  #0B0820;   /* Primary ink */
	--ink-950:  #050310;

	/* Volt — saturated kinetic teal (replaces sunrise petrol teal) */
	--volt-50:    #E0FFFA;
	--volt-100:   #B8FBEB;
	--volt-200:   #7BF0D6;
	--volt-300:   #3DDFB8;
	--volt-400:   #14C9A0;
	--volt-500:   #0BB395;   /* Electric secondary */
	--volt-600:   #088C75;
	--volt-700:   #06695A;

	/* Editorial accents */
	--spark:      #FFE74D;        /* Use sparingly: live pills, single highlights */
	--sunset:     #D94A1F;        /* Warm bridge fire→ink (replaces terracotta) */
	--fire-glow:  rgba(255,127,28,0.55);

	/* --- Sunrise compat aliases — every legacy name resolves cleanly --- */
	--plum-50:   var(--ink-50);
	--plum-100:  var(--ink-100);
	--plum-200:  var(--ink-200);
	--plum-300:  var(--ink-300);
	--plum-400:  var(--ink-400);
	--plum-500:  var(--ink-500);
	--plum-700:  var(--ink-700);
	--plum-900:  var(--ink-900);
	--plum-950:  var(--ink-950);

	--teal-50:    var(--volt-50);
	--teal-100:   var(--volt-100);
	--teal-200:   var(--volt-200);
	--teal-300:   var(--volt-300);
	--teal-400:   var(--volt-400);
	--teal-500:   var(--volt-500);
	--teal-700:   var(--volt-700);

	--sage-50:    var(--volt-50);
	--sage-100:   var(--volt-100);
	--sage-200:   var(--volt-200);
	--sage-300:   var(--volt-300);
	--sage-400:   var(--volt-400);
	--sage-500:   var(--volt-500);
	--sage-700:   var(--volt-700);

	/* Peach — kept at sunrise's exact values (warm soft accent on dark
	   sections still wants the cream tones, not fire saturation). */
	--peach-100:  #FFE6CC;
	--peach-200:  #FFD6A8;
	--peach-300:  #FFC383;
	--terracotta: var(--sunset);
	--butter:     var(--spark);

	/* Surfaces — crisp ivory replaces warm cream */
	--paper-0:    #FFFFFF;
	--paper:      #FAFAF7;       /* Default surface — crisp ivory */
	--paper-2:    #F3F1EB;       /* Shaded ivory */
	--paper-3:    #E8E5DD;       /* Section divider tone */
	--mist:       #DCD9D0;       /* Border / hairline */
	--paper-warm: #FFF8F0;       /* sunrise compat alias if any rule still wants the cream */

	/* Status */
	--green: #0E9F69;
	--red:   #C82A2A;

	/* Type — three families, each with one job */
	--font:         "Plus Jakarta Sans", system-ui, -apple-system, sans-serif;
	--font-display: "Instrument Serif", "Times New Roman", serif;
	--mono:         "JetBrains Mono", ui-monospace, Menlo, monospace;

	/* Radii — tighter, more architectural than sunrise (was 8/14/22/32/48) */
	--r-1: 6px;
	--r-2: 10px;
	--r-3: 14px;
	--r-4: 20px;
	--r-5: 28px;
	--r-pill: 9999px;

	/* Shadows — sharper, more directional. Less "soft cloud", more "lift". */
	--sh-1:    0 1px 0 rgba(11,8,32,.06), 0 2px 6px -2px rgba(11,8,32,.10);
	--sh-2:    0 2px 0 rgba(11,8,32,.04), 0 12px 28px -10px rgba(11,8,32,.18);
	--sh-3:    0 4px 0 rgba(11,8,32,.03), 0 32px 60px -18px rgba(11,8,32,.32);
	--sh-warm: 0 14px 36px -10px var(--fire-glow), 0 2px 0 rgba(184,79,8,.18);
	--sh-line: inset 0 0 0 1px var(--mist);

	/* Motion — snappier than sunrise */
	--t1: 140ms cubic-bezier(.4,0,.2,1);
	--t2: 280ms cubic-bezier(.32,.72,.22,1);
	--t3: 520ms cubic-bezier(.16,1,.3,1);

	/* Fluid type — kinetic editorial scale */
	--fs-mega:    clamp(56px, 10vw, 132px);
	--fs-h1:      clamp(40px, 7vw, 80px);
	--fs-h2:      clamp(28px, 4.4vw, 48px);
	--fs-h3:      clamp(22px, 3vw, 28px);
	--fs-lede:    clamp(17px, 2.4vw, 21px);
	--fs-body:    16px;
	--fs-small:   14px;
	--fs-eyebrow: 12px;

	/* Layout */
	--container: 1200px;
}


/* -------------------------------------------------------------------------
   2. RESET + BASE
   ------------------------------------------------------------------------- */
* { box-sizing: border-box; }

html {
	scroll-behavior: smooth;
	-webkit-text-size-adjust: 100%;
}

body {
	margin: 0;
	font-family: var(--font);
	font-feature-settings: "ss01","ss02","cv11";
	background: var(--paper);
	color: var(--ink-900);
	-webkit-font-smoothing: antialiased;
	text-rendering: optimizeLegibility;
	font-size: var(--fs-body);
	line-height: 1.5;
	position: relative;
	overflow-x: hidden;
}

/* Subtle dot-grid texture — replaces sunrise's noise. Reads as
   "architectural / instrument", not "organic / paper". */
body::before {
	content: "";
	position: fixed;
	inset: 0;
	pointer-events: none;
	z-index: 1;
	opacity: 0.5;
	background-image: radial-gradient(rgba(11,8,32,0.07) 1px, transparent 1px);
	background-size: 28px 28px;
	background-position: 0 0;
	mask-image: linear-gradient(180deg, black 0%, black 60%, transparent 100%);
}

::selection { background: var(--fire-200); color: var(--ink-900); }

img, svg { display: block; max-width: 100%; }

a { color: inherit; text-decoration: none; }

code {
	font-family: var(--mono);
	font-size: 0.88em;
	background: var(--paper-2);
	padding: 2px 6px;
	border-radius: 4px;
}

/* Override Astra's default content background so the warm cream surface wins.
   We hit Astra's specific selectors directly, plus a !important guard on the
   homepage body so the cream surface always wins on the landing page. */
html, body, .site, .site-content, .ast-container, .entry-content {
	background: var(--paper);
}
body.is-eduway-home,
body.home {
	background: var(--paper) !important;
}
body.is-eduway-home .site-content,
body.is-eduway-home .ast-container {
	background: transparent;
}

/* Hide Astra's default chrome on any page that contains an Eduway section.
   We use the modern :has() selector so the rules fire directly from the DOM
   without depending on a PHP-set body class. This makes the hide robust
   even if functions.php is cached stale. We also keep the body-class
   selectors as a belt-and-braces backup for older browsers. */
body:has(.eduway-section) .site-header,
body:has(.eduway-section) .site-footer,
body:has(.eduway-section) .entry-header,
body:has(.eduway-section) .entry-title,
body:has(.eduway-section) .ast-archive-title,
body:has(.eduway-section) .ast-title-bar-wrap,
body:has(.eduway-section) .ast-breadcrumbs-wrapper,
body.is-eduway-home .site-header,
body.is-eduway-home .site-footer,
body.is-eduway-home .ast-archive-title,
body.is-eduway-home .ast-title-bar-wrap,
body.is-eduway-home .entry-header,
body.is-eduway-home .entry-title,
body.has-eduway-pattern .site-header,
body.has-eduway-pattern .site-footer,
body.has-eduway-pattern .entry-header,
body.has-eduway-pattern .entry-title {
	display: none !important;
}

/* Astra wraps content in a max-width container with default padding. On
   pages with our patterns we want the patterns to take the full content
   width so each section can breathe edge to edge. */
body:has(.eduway-section) .site-content,
body:has(.eduway-section) .ast-container,
body:has(.eduway-section) .entry-content,
body.has-eduway-pattern .site-content,
body.has-eduway-pattern .ast-container,
body.has-eduway-pattern .entry-content,
body.is-eduway-home .site-content,
body.is-eduway-home .ast-container,
body.is-eduway-home .entry-content {
	max-width: none;
	padding: 0;
	margin: 0;
}
body:has(.eduway-section) .ast-article-single,
body.has-eduway-pattern .ast-article-single,
body.is-eduway-home .ast-article-single {
	padding: 0;
	border: 0;
	background: transparent;
}

/* Container helper — used inside patterns for consistent gutters. */
.eduway-container {
	max-width: var(--container);
	margin-inline: auto;
	padding-inline: 20px;
}
@media (min-width: 768px)  { .eduway-container { padding-inline: 32px; } }
@media (min-width: 1024px) { .eduway-container { padding-inline: 48px; } }

/* Skip-to-content link */
.skip-link {
	position: absolute;
	left: -10000px;
	top: auto;
	width: 1px;
	height: 1px;
	overflow: hidden;
	z-index: 9999;
}
.skip-link:focus {
	position: fixed;
	top: 12px;
	left: 12px;
	width: auto;
	height: auto;
	padding: 10px 18px;
	background: var(--fire-500);
	color: #fff;
	border-radius: 999px;
	font-weight: 700;
	box-shadow: var(--sh-warm);
	outline: 2px solid var(--plum-900);
	outline-offset: 2px;
}

/* Visible focus rings — focus-visible only, so mouse users don't see them. */
:focus-visible {
	outline: 2px solid var(--fire-500);
	outline-offset: 3px;
	border-radius: var(--r-1);
}


/* -------------------------------------------------------------------------
   3. TYPE
   ------------------------------------------------------------------------- */
.h-mega { font-size: var(--fs-mega); line-height: 0.95; letter-spacing: -0.035em; font-weight: 700; margin: 0; text-wrap: balance; }
.h-1    { font-size: var(--fs-h1);   line-height: 1.02; letter-spacing: -0.028em; font-weight: 700; margin: 0; text-wrap: balance; }
.h-2    { font-size: var(--fs-h2);   line-height: 1.08; letter-spacing: -0.022em; font-weight: 700; margin: 0 0 12px; text-wrap: balance; }
.h-3    { font-size: var(--fs-h3);   line-height: 1.2;  letter-spacing: -0.012em; font-weight: 700; margin: 0 0 8px; }
.lede   { font-size: var(--fs-lede); line-height: 1.55; color: var(--ink-400); max-width: 64ch; text-wrap: pretty; }

/* Signal eyebrow — mono caps with a fire dash. Same simple pattern as v0.2. */
.eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-family: var(--mono);
	font-size: var(--fs-eyebrow);
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ink-400);
	font-style: normal;
}
.eyebrow::before {
	content: "";
	width: 24px;
	height: 1px;
	background: var(--fire-500);
}
/* Sunrise variants — repurposed cleanly to Signal volt / fire-200 */
.eyebrow--sage  { color: var(--volt-700); }
.eyebrow--sage::before { background: var(--volt-500); }
.eyebrow--peach { color: var(--fire-200); }
.eyebrow--peach::before { background: var(--fire-300); }

.mute   { color: var(--ink-300); }
.italic { font-style: italic; }
.mono   { font-family: var(--mono); font-size: 13px; }


/* -------------------------------------------------------------------------
   Editorial accents — Signal v0.2.
   Sunrise's hand-drawn motifs (.hl-pencil / .hl-underline / .hl-arc) are
   replaced by Instrument Serif italic words and clean gradient sweeps.
   Legacy class names map to v0.2 patterns so existing markup keeps working.
   ------------------------------------------------------------------------- */

.hl-fire   { color: var(--fire-600); }

/* Italic word — the workhorse. Instrument Serif italic in fire-600. */
.hl-italic {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.01em;
}
/* Same shape, lighter fire stop — used on dark/alumni surfaces. */
.hl-italic-peach {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-300);
	letter-spacing: -0.01em;
}
.display-italic {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.01em;
}

/* Solid fire block — hero anchor only. */
.hl-block {
	background: var(--fire-500);
	color: var(--paper);
	padding: 0 0.18em 0.06em;
	border-radius: 4px;
	margin-inline: -0.06em;
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
}

/* Mono brackets — inline technical / signal moments. */
.hl-bracket {
	font-family: var(--mono);
	font-size: 0.7em;
	color: var(--fire-500);
	padding: 0 0.2em;
}
.hl-bracket::before { content: "["; }
.hl-bracket::after  { content: "]"; }

/* Volt-underline — kinetic data-coded accent. */
.hl-volt {
	color: var(--volt-700);
	border-bottom: 2px solid var(--volt-400);
	padding-bottom: 2px;
}

/* Mono ink chip — for "vN.N" or technical sub-tags inside copy. */
.hl-mono {
	font-family: var(--mono);
	font-size: 0.72em;
	background: var(--ink-900);
	color: var(--volt-300);
	padding: 2px 8px;
	border-radius: 4px;
	letter-spacing: 0.05em;
	vertical-align: 0.15em;
}

/* Gradient sweep — Signal v0.2 ships this as a static fire→sunset bar.
   The legacy --pencil-fill var is honored as the scale trigger so any
   existing GSAP that animates it from 0→1 still draws the sweep in. */
.hl-sweep,
.hl-underline,
.hl-arc,
.hl-pencil {
	position: relative;
	display: inline-block;
	white-space: nowrap;
	--pencil-fill: 1;
}
.hl-sweep::after,
.hl-underline::after,
.hl-arc::after,
.hl-pencil::after {
	content: "";
	position: absolute;
	left: 0; right: 0;
	bottom: 0.04em;
	height: 0.18em;
	background: linear-gradient(90deg, var(--fire-500), var(--sunset));
	transform-origin: left center;
	transform: scaleX(var(--pencil-fill, 1));
	transition: transform 700ms cubic-bezier(.16,1,.3,1);
	border-radius: 2px;
	pointer-events: none;
}
/* Volt-tinted sweep variant for the legacy .hl-arc anchor (was sage). */
.hl-arc::after {
	background: linear-gradient(90deg, var(--volt-500), var(--volt-400));
}
/* Suppress sunrise's curved border-radius arch — Signal does not use it. */
.hl-arc::before { content: none; }

.hl-quote-em {
	font-style: italic;
	font-weight: 500;
	color: var(--sunset);
}

/* Mono-bracket tag — for technical metadata in body copy. */
.mono-tag {
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--ink-300);
	display: inline-flex;
	align-items: center;
	gap: 6px;
}
.mono-tag::before { content: "["; color: var(--fire-500); }
.mono-tag::after  { content: "]"; color: var(--fire-500); }


/* -------------------------------------------------------------------------
   4. SECTIONS + DIVIDERS
   ------------------------------------------------------------------------- */
.eduway-section {
	padding: 56px 0;
	position: relative;
	z-index: 2;
}
@media (min-width: 1024px) { .eduway-section { padding: 96px 0; scroll-margin-top: 80px; } }

.eduway-section--paper-2 { background: var(--paper-2); }
.eduway-section--paper-3 { background: var(--paper-3); }
.eduway-section--dark    { background: var(--ink-900); color: var(--ink-100); }
.eduway-section--dark .h-1,
.eduway-section--dark .h-2,
.eduway-section--dark .h-3,
.eduway-section--dark .h-mega { color: var(--paper); }
.eduway-section--dark .lede { color: var(--ink-100); }
.eduway-section--dark ::selection { background: var(--fire-500); color: var(--paper); }

.head { margin-bottom: 24px; }
.head .h-2 + p { margin-top: 8px; color: var(--plum-400); max-width: 70ch; }

.divider {
	margin: 64px 0;
	height: 1px;
	background: linear-gradient(to right, transparent, var(--mist), transparent);
	border: 0;
	position: relative;
}
.divider::after {
	content: "✦";
	position: absolute;
	left: 50%;
	top: 50%;
	transform: translate(-50%,-50%);
	background: var(--paper);
	padding: 0 16px;
	color: var(--fire-500);
	font-size: 16px;
}
@media (min-width: 1024px) { .divider { margin: 96px 0; } }


/* -------------------------------------------------------------------------
   5. RIBBONS, CHIPS
   ------------------------------------------------------------------------- */
.ribbon {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 5px 14px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	border-radius: 999px;
	background: var(--peach-200);
	color: var(--plum-900);
	font-style: italic;
}
.ribbon.fire    { background: var(--fire-500); color: #fff; }
.ribbon.sage    { background: var(--sage-500); color: var(--paper); }
.ribbon.dark    { background: var(--plum-900); color: var(--peach-200); }
.ribbon.outline { background: transparent; color: var(--plum-900); border: 1px solid var(--plum-900); }
.ribbon .dot    { width: 6px; height: 6px; border-radius: 999px; background: currentColor; }

.chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 5px 12px;
	min-height: 28px;
	font-size: 12px;
	font-weight: 600;
	border-radius: 999px;
	background: var(--paper-2);
	color: var(--plum-700);
	border: 1px solid var(--mist);
}
.chip.fire { background: var(--fire-50); color: var(--fire-700); border-color: var(--fire-100); }
.chip.sage { background: var(--sage-50); color: var(--sage-700); border-color: var(--sage-100); }
.chip.dark { background: var(--plum-900); color: var(--peach-200); border-color: transparent; }
.chip .dot { width: 6px; height: 6px; border-radius: 999px; background: currentColor; }


/* -------------------------------------------------------------------------
   6. BUTTONS — Signal v0.2: tighter --r-2 corners, hairline ink border by
   default, glow + diagonal glint sweep on .btn-fire hover.
   ------------------------------------------------------------------------- */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	padding: 13px 22px;
	min-height: 44px;
	font-family: inherit;
	font-size: 15px;
	font-weight: 600;
	letter-spacing: -0.005em;
	border: 0;
	border-radius: var(--r-2);
	cursor: pointer;
	background: var(--paper-0);
	color: var(--ink-900);
	box-shadow: var(--sh-1), inset 0 0 0 1px var(--ink-900);
	transition: transform var(--t1), box-shadow var(--t1), background var(--t1), color var(--t1);
	text-align: center;
	white-space: nowrap;
	text-decoration: none;
	position: relative;
	isolation: isolate;
	overflow: hidden;
}
.btn:hover  { transform: translateY(-2px); box-shadow: var(--sh-2), inset 0 0 0 1px var(--ink-900); }
.btn:active { transform: translateY(0); }
.btn:focus-visible {
	outline: 3px solid var(--volt-300);
	outline-offset: 3px;
}
.btn > * { position: relative; z-index: 1; }

/* Fire — flagship CTA. Solid fill + animated glow + diagonal glint on hover. */
.btn-fire {
	background: var(--fire-500);
	color: #fff;
	box-shadow: 0 1px 0 rgba(184,79,8,.20), inset 0 0 0 1px transparent;
}
.btn-fire::before {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(120deg, transparent 30%, rgba(255,255,255,0.45) 50%, transparent 70%);
	transform: translateX(-100%);
	opacity: 0;
	pointer-events: none;
}
.btn-fire:hover {
	background: var(--fire-600);
	box-shadow: var(--sh-warm), inset 0 0 0 1px transparent;
}
.btn-fire:hover::before {
	opacity: 1;
	animation: btn-glint 900ms cubic-bezier(.32,.72,.22,1) forwards;
}
@keyframes btn-glint {
	0%   { transform: translateX(-100%); }
	100% { transform: translateX(100%); }
}

.btn-dark   { background: var(--ink-900); color: var(--paper); box-shadow: var(--sh-2), inset 0 0 0 1px transparent; }
.btn-dark:hover { background: var(--ink-700); }

/* Volt — kinetic secondary. .btn-sage kept as legacy alias. */
.btn-volt   { background: var(--volt-500); color: var(--ink-900); box-shadow: var(--sh-2), inset 0 0 0 1px transparent; }
.btn-volt:hover { background: var(--volt-400); }
.btn-sage   { background: var(--volt-500); color: var(--ink-900); box-shadow: var(--sh-2), inset 0 0 0 1px transparent; }
.btn-sage:hover { background: var(--volt-400); }

.btn-ghost  { background: transparent; box-shadow: inset 0 0 0 1px var(--mist); color: var(--ink-700); }
.btn-ghost:hover { background: var(--paper-2); color: var(--ink-900); box-shadow: inset 0 0 0 1px var(--ink-900); }

.btn-link {
	background: transparent;
	box-shadow: none;
	padding: 6px 4px;
	min-height: 32px;
	color: var(--fire-600);
	font-weight: 600;
	position: relative;
	border-radius: 0;
	overflow: visible;
}
.btn-link:hover { transform: none; box-shadow: none; }
.btn-link::after {
	content: "";
	position: absolute;
	left: 4px;
	right: 4px;
	bottom: 2px;
	height: 2px;
	background: var(--fire-500);
	transition: right var(--t1);
}
.btn-link:hover::after { right: -8px; }

.btn-sm    { padding: 9px 16px; font-size: 13px; min-height: 36px; border-radius: var(--r-1); }
.btn-lg    { padding: 16px 28px; font-size: 16px; min-height: 52px; }
.btn-block { width: 100%; }

.btn .arr  { width: 18px; height: 18px; transition: transform var(--t1); }
.btn:hover .arr { transform: translateX(3px); }


/* -------------------------------------------------------------------------
   7. CARDS, FEATURES, STATS, PULLQUOTE
   ------------------------------------------------------------------------- */
.card {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 22px;
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
}
@media (min-width: 768px) { .card { padding: 28px; } }
.card.warm { background: var(--paper-2); border-color: var(--paper-3); }
.card.dark { background: var(--plum-900); color: var(--peach-200); border-color: transparent; }

.feature {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 24px;
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
	position: relative;
}
@media (min-width: 768px) { .feature { padding: 32px; } }
.feature:hover {
	transform: translateY(-3px);
	border-color: var(--fire-200);
	box-shadow: var(--sh-2);
}
.feature .icon-circle {
	width: 48px;
	height: 48px;
	background: var(--fire-50);
	color: var(--fire-700);
	display: grid;
	place-items: center;
	border-radius: 999px;
	margin-bottom: 16px;
}
@media (min-width: 768px) { .feature .icon-circle { width: 56px; height: 56px; margin-bottom: 22px; } }
.feature.sage .icon-circle { background: var(--sage-50); color: var(--sage-700); }
.feature.dark .icon-circle { background: var(--plum-900); color: var(--peach-200); }
.feature h4 { margin: 0 0 8px; font-size: 17px; letter-spacing: -0.012em; font-weight: 700; }
@media (min-width: 768px) { .feature h4 { font-size: 19px; } }
.feature p { margin: 0; font-size: 14px; line-height: 1.6; color: var(--plum-400); }
.feature .num-tag {
	position: absolute;
	top: 18px;
	right: 22px;
	font-family: var(--mono);
	font-size: 10px;
	font-style: italic;
	color: var(--plum-300);
}

/* Signal v0.2 stat-mega — Instrument Serif italic numerals,
   mono uppercase labels. Replaces sunrise's bold-sans + italic-label combo. */
.stat-mega .num {
	font-family: var(--font-display);
	font-size: clamp(48px, 9vw, 110px);
	line-height: 0.92;
	font-weight: 400;
	font-style: italic;
	letter-spacing: -0.04em;
	color: var(--ink-900);
	font-feature-settings: "ss01","tnum";
}
.stat-mega .num em { font-style: italic; font-weight: 400; color: var(--fire-600); font-size: 0.7em; }
.stat-mega .label {
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 500;
	color: var(--ink-400);
	margin-top: 8px;
	max-width: 28ch;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	font-style: normal;
}

.pullquote {
	background: var(--paper-0);
	border-radius: var(--r-3);
	padding: 36px 28px;
	position: relative;
	border: 1px solid var(--mist);
	overflow: hidden;
}
@media (min-width: 768px) { .pullquote { padding: 56px 48px; border-radius: var(--r-4); } }
.pullquote .marks {
	position: absolute;
	top: 18px;
	left: 24px;
	font-family: Georgia, serif;
	font-size: 100px;
	line-height: 0.7;
	font-style: italic;
	color: var(--fire-500);
}
@media (min-width: 768px) { .pullquote .marks { top: 24px; left: 36px; font-size: 140px; } }
.pullquote .arch-bg {
	position: absolute;
	right: -10%;
	bottom: -40%;
	width: 220px;
	aspect-ratio: 1.2/1;
	background: var(--peach-200);
	border-radius: 999px 999px 0 0;
	opacity: 0.5;
}
@media (min-width: 768px) { .pullquote .arch-bg { width: 320px; } }
.pullquote blockquote {
	margin: 0;
	position: relative;
	z-index: 1;
	font-size: clamp(18px, 2.4vw, 30px);
	line-height: 1.35;
	letter-spacing: -0.012em;
	font-weight: 500;
	font-style: italic;
	color: var(--plum-700);
	max-width: 28ch;
}


/* -------------------------------------------------------------------------
   8. HERO
   ------------------------------------------------------------------------- */
.hero {
	position: relative;
	background: var(--paper-2);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 48px 24px;
	overflow: hidden;
}
@media (min-width: 640px)  { .hero { padding: 64px 36px; border-radius: var(--r-4); } }
@media (min-width: 1024px) { .hero { padding: 80px 56px; border-radius: var(--r-5); } }

.hero .arch {
	position: absolute;
	top: -10%;
	right: -8%;
	width: 280px;
	aspect-ratio: 1.4 / 1;
	background: linear-gradient(180deg, var(--fire-300) 0%, var(--fire-500) 60%, var(--terracotta) 100%);
	border-radius: 999px 999px 0 0;
	opacity: 0.92;
	pointer-events: none;
}
@media (min-width: 1024px) { .hero .arch { width: 480px; } }

.hero .blob {
	position: absolute;
	left: -10%;
	bottom: -30%;
	width: 60%;
	aspect-ratio: 1;
	background: radial-gradient(closest-side, var(--peach-200), transparent 70%);
	filter: blur(10px);
	pointer-events: none;
}

.hero .inner,
.hero__inner {
	position: relative;
	z-index: 2;
	max-width: 920px;          /* room for the longest clause at 110px */
}

/* The lede stays narrower than the headline for editorial readability. */
.hero .lede {
	max-width: 56ch;
}

/* Tighten the gap between the headline lines so the editorial stagger
   reads as one piece of typography rather than three separate lines. */
.hero__headline {
	line-height: 0.96;
}
.hero__line + .hero__line {
	margin-top: 0;
}

.hero .stamp {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 6px 14px;
	border-radius: 999px;
	font-style: italic;
}

.hero .meta-row {
	margin-top: 22px;
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}
.hero .meta-row span {
	font-family: var(--mono);
	font-size: 11px;
	background: rgba(255,252,246,0.7);
	border: 1px solid var(--mist);
	padding: 5px 12px;
	border-radius: 999px;
	backdrop-filter: blur(6px);
}

.hero .ctas,
.hero__ctas {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin-top: 32px;
}

/* Headline lines flow as natural text. Each .hero__line span stays inline
   so the headline reads as a single sentence with the italic Fireflower
   creating the editorial standout on the third clause. The spans also
   serve as per-line animation targets for Step 5. */
.hero__line {
	display: inline;
}
.hero__line + .hero__line::before {
	content: " ";
}

/* The hero section wrapper itself sits on the same warm paper as the body,
   while the inner .hero panel is paper-2. Add a touch of vertical breathing. */
.eduway-section--hero {
	padding-top: 88px;          /* room for sticky nav */
	padding-bottom: 32px;
}
@media (min-width: 1024px) {
	.eduway-section--hero {
		padding-top: 120px;
		padding-bottom: 48px;
	}
}


/* -------------------------------------------------------------------------
   17. CREDIBILITY LINE (section 2)
   ------------------------------------------------------------------------- */

.eduway-section--credibility {
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 24px 0;
	border-radius: 0;
	position: relative;
	z-index: 2;
	overflow: hidden;
}
@media (min-width: 768px)  { .eduway-section--credibility { padding: 32px 0; } }
@media (min-width: 1024px) { .eduway-section--credibility { padding: 40px 0; } }

/* Subtle top + bottom hairlines for editorial weight */
.eduway-section--credibility::before,
.eduway-section--credibility::after {
	content: "";
	position: absolute;
	left: 50%;
	transform: translateX(-50%);
	width: min(96%, 1140px);
	height: 1px;
	background: linear-gradient(to right, transparent, rgba(255, 214, 168, 0.18), transparent);
}
.eduway-section--credibility::before { top: 0; }
.eduway-section--credibility::after  { bottom: 0; }

.credibility-line {
	margin: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 12px;
	flex-wrap: wrap;
	text-align: center;
	font-style: italic;
	font-weight: 500;
	font-size: clamp(15px, 1.6vw, 19px);
	letter-spacing: -0.005em;
	line-height: 1.4;
	color: var(--peach-200);
	max-width: 920px;
	margin-inline: auto;
}

.credibility-mark {
	color: var(--fire-300);
	font-style: normal;
	font-size: 1.1em;
	line-height: 1;
	flex-shrink: 0;
	transform: translateY(1px);
}

.credibility-brand {
	color: var(--fire-300);
	font-weight: 700;
	font-style: italic;
}

/* On very small screens, drop the mark to its own line so the quote stays
   readable without crammed gaps. */
@media (max-width: 480px) {
	.credibility-line { gap: 8px; padding: 0 8px; }
}
/* Mobile — drop the star entirely; the quote alone reads cleaner. */
@media (max-width: 767px) {
	.credibility-mark { display: none; }
}


/* -------------------------------------------------------------------------
   18. THE PROBLEM (section 3)
   ------------------------------------------------------------------------- */

.eduway-section--problem {
	background: var(--paper);
	padding: 64px 0;
}
@media (min-width: 768px)  { .eduway-section--problem { padding: 96px 0; } }
@media (min-width: 1024px) { .eduway-section--problem { padding: 128px 0; } }

/* Section header — claim + supporting lede.
   Specificity is bumped (.eduway-section--problem .problem-head) so Astra's
   .entry-content rules can't push it back to left-align/full-width. */
.eduway-section--problem .problem-head {
	max-width: 880px !important;
	margin: 0 auto 48px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	.eduway-section--problem .problem-head { margin: 0 auto 72px !important; }
}

.eduway-section--problem .problem-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}

.eduway-section--problem .problem-headline {
	margin: 0 auto 32px !important;
	font-size: clamp(32px, 5vw, 56px);
	line-height: 1.12;
	letter-spacing: -0.02em;
	max-width: 22ch;
	text-align: center !important;
}

.eduway-section--problem .problem-lede {
	margin: 0 auto !important;
	max-width: 62ch;
	text-align: center !important;
}
.eduway-section--problem .problem-lede strong {
	color: var(--plum-900);
	font-weight: 700;
}

/* Three-up stat grid — stacks on mobile, 3 columns from md up.
   Force the grid declaration with !important and an explicit column list
   instead of repeat() so any minifier/cascade weirdness can't strip it. */
.eduway-section--problem .problem-stats {
	display: grid !important;
	grid-template-columns: 1fr;
	gap: 48px;
	max-width: 1100px;
	margin: 0 auto 56px !important;
	width: 100%;
}
@media (min-width: 768px) {
	.eduway-section--problem .problem-stats {
		grid-template-columns: 1fr 1fr 1fr !important;
		gap: 32px;
	}
}
@media (min-width: 1024px) {
	.eduway-section--problem .problem-stats {
		gap: 56px;
		margin-bottom: 80px !important;
	}
}

/* Each stat tile */
.eduway-section--problem .problem-stat {
	position: relative;
	padding-top: 32px;
	border-top: 2px solid var(--mist);
	margin: 0;
}
@media (min-width: 768px) {
	.eduway-section--problem .problem-stat {
		padding-top: 0;
		border-top: 0;
		border-left: 2px solid var(--mist);
		padding-left: 28px;
	}
	.eduway-section--problem .problem-stat:first-child {
		border-left: 0;
		padding-left: 0;
	}
}

/* Signal v0.2 — Instrument Serif italic numerals in ink, fire-600 suffix.
   The italic + serif combination IS the editorial moment now. */
.problem-stat .num {
	display: flex;
	align-items: flex-start;
	gap: 4px;
	margin-bottom: 16px;
	font-family: var(--font-display);
	font-size: clamp(64px, 9vw, 120px);
	line-height: 0.9;
	font-weight: 400;
	font-style: italic;
	letter-spacing: -0.04em;
	color: var(--ink-900);
	font-feature-settings: "ss01","tnum";
}
.problem-stat .num__digits {
	display: inline-block;
}
.problem-stat .num__suffix {
	font-style: italic;
	font-weight: 400;
	font-size: 0.6em;
	color: var(--fire-600);
	margin-top: 0.18em;
	letter-spacing: -0.02em;
}

.problem-stat .label,
.problem-stat__label {
	font-size: 15px;
	font-weight: 400;
	font-style: normal;
	line-height: 1.55;
	color: var(--plum-400);
	max-width: 36ch;
	margin: 0;
}
@media (min-width: 1024px) { .problem-stat__label { font-size: 16px; } }

.problem-stat .hl-quote-em {
	color: var(--plum-700);
	font-weight: 500;
}

/* Closing line — the section's punchline */
.problem-close {
	max-width: 720px;
	margin: 0 auto;
	text-align: center;
	font-size: clamp(18px, 2.4vw, 24px);
	line-height: 1.4;
	color: var(--plum-700);
	font-weight: 500;
	letter-spacing: -0.01em;
	padding: 32px 0;
	position: relative;
}
.problem-close::before {
	content: "";
	display: block;
	width: 56px;
	height: 1px;
	background: var(--fire-500);
	margin: 0 auto 24px;
	opacity: 0.6;
}
.problem-close .hl-italic {
	display: block;
	margin-top: 4px;
}


/* -------------------------------------------------------------------------
   19. OUTCOMES (section 4)
   The positive counterpart to The Problem. Same cream surface, sage accent.
   ------------------------------------------------------------------------- */

.eduway-section--outcomes {
	background: var(--paper);
	padding: 64px 0;
}
@media (min-width: 768px)  { .eduway-section--outcomes { padding: 96px 0; } }
@media (min-width: 1024px) { .eduway-section--outcomes { padding: 128px 0; } }

.eduway-section--outcomes .outcomes-head {
	max-width: 920px !important;
	margin: 0 auto 48px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	.eduway-section--outcomes .outcomes-head { margin: 0 auto 72px !important; }
}

/* Sage variant of the eyebrow for the tonal shift */
.eyebrow--sage {
	color: var(--sage-700) !important;
}
.eyebrow--sage::before {
	background: var(--sage-500) !important;
}

.eduway-section--outcomes .outcomes-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}

.eduway-section--outcomes .outcomes-headline {
	margin: 0 auto 28px !important;
	font-size: clamp(32px, 5vw, 56px);
	line-height: 1.14;
	letter-spacing: -0.02em;
	max-width: 24ch;
	text-align: center !important;
}

.eduway-section--outcomes .outcomes-lede {
	margin: 0 auto !important;
	max-width: 60ch;
	text-align: center !important;
}

/* Grid: 1col mobile → 2x2 tablet → 4-up desktop */
.eduway-section--outcomes .outcomes-stats {
	display: grid !important;
	grid-template-columns: 1fr;
	gap: 40px;
	max-width: 1180px;
	margin: 0 auto 40px !important;
	width: 100%;
}
@media (min-width: 640px) {
	.eduway-section--outcomes .outcomes-stats {
		grid-template-columns: 1fr 1fr !important;
		gap: 32px;
	}
}
@media (min-width: 1100px) {
	.eduway-section--outcomes .outcomes-stats {
		grid-template-columns: 1fr 1fr 1fr 1fr !important;
		gap: 32px;
		margin-bottom: 56px !important;
	}
}

/* Each stat tile */
.outcomes-stat {
	position: relative;
	padding-top: 28px;
	margin: 0;
}

/* Sage tick mark sits on the leading edge as the positive-outcome marker */
.outcomes-stat__tick {
	position: absolute;
	top: 0;
	left: 0;
	width: 28px;
	height: 28px;
	color: var(--sage-500);
}

/* Signal v0.2 — Instrument Serif italic numerals in ink, fire-600 sign + suffix */
.outcomes-stat__num {
	display: flex;
	align-items: baseline;
	gap: 2px;
	margin-bottom: 14px;
	font-family: var(--font-display);
	font-size: clamp(48px, 7vw, 84px);
	line-height: 1;
	font-weight: 400;
	font-style: italic;
	letter-spacing: -0.04em;
	color: var(--ink-900);
	font-feature-settings: "ss01","tnum";
}
.outcomes-stat__sign {
	font-style: italic;
	font-weight: 400;
	font-size: 0.7em;
	color: var(--fire-600);
	margin-right: 0;
}
.outcomes-stat__digits {
	display: inline-block;
}
.outcomes-stat__suffix {
	font-style: italic;
	font-weight: 400;
	font-size: 0.6em;
	color: var(--fire-600);
	letter-spacing: -0.02em;
	margin-left: 1px;
	transform: translateY(-0.05em);
}

/* The 3× stat — make the × a touch heavier and Sage to read as a multiplier */
.outcomes-stat:nth-child(3) .outcomes-stat__suffix {
	color: var(--sage-500);
	font-style: normal;
	font-weight: 700;
	font-size: 0.6em;
}

.outcomes-stat__label {
	font-size: 14px;
	line-height: 1.55;
	color: var(--plum-700);
	margin: 0;
	max-width: 32ch;
	font-weight: 400;
}
@media (min-width: 1024px) { .outcomes-stat__label { font-size: 15px; } }

/* Caveat — small, italic, plum-300, with one final pop in plum-700 */
.eduway-section--outcomes .outcomes-caveat {
	max-width: 780px;
	margin: 0 auto !important;
	text-align: center !important;
	font-size: 12px;
	line-height: 1.6;
	color: var(--plum-300);
	font-style: italic;
	padding: 24px 16px 0;
	border-top: 1px solid var(--mist);
}
@media (min-width: 768px) { .eduway-section--outcomes .outcomes-caveat { font-size: 13px; } }

.outcomes-caveat__pop {
	color: var(--plum-700);
	font-weight: 500;
	font-style: italic;
}


/* -------------------------------------------------------------------------
   20. THE LIFECYCLE (section 5)
   Horizontal journey with a dashed sage thread connecting four stops.
   ------------------------------------------------------------------------- */

.eduway-section--lifecycle {
	background: var(--paper-2);
	padding: 64px 0;
	position: relative;
	overflow: hidden;
}
@media (min-width: 768px)  { .eduway-section--lifecycle { padding: 96px 0; } }
@media (min-width: 1024px) { .eduway-section--lifecycle { padding: 128px 0; } }

/* Header */
.eduway-section--lifecycle .lifecycle-head {
	max-width: 920px !important;
	margin: 0 auto 56px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	.eduway-section--lifecycle .lifecycle-head { margin: 0 auto 80px !important; }
}

.eduway-section--lifecycle .lifecycle-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}

.eduway-section--lifecycle .lifecycle-headline {
	margin: 0 auto 28px !important;
	font-size: clamp(32px, 5vw, 56px);
	line-height: 1.14;
	letter-spacing: -0.02em;
	max-width: 22ch;
	text-align: center !important;
}

.eduway-section--lifecycle .lifecycle-lede {
	margin: 0 auto !important;
	max-width: 60ch;
	text-align: center !important;
}

/* The dashed sage thread that weaves through the stops on desktop only */
.lifecycle-thread {
	display: none;
	position: relative;
	max-width: 1180px;
	margin: 0 auto -32px;
	padding: 0 56px;
	color: var(--sage-300);
	pointer-events: none;
	z-index: 1;
}
@media (min-width: 1100px) {
	.lifecycle-thread { display: block; }
}
.lifecycle-thread__svg {
	width: 100%;
	height: 80px;
	display: block;
}

/* The list of four stops */
.eduway-section--lifecycle .lifecycle-stops {
	list-style: none;
	margin: 0 auto !important;
	padding: 0 !important;
	display: grid !important;
	grid-template-columns: 1fr;
	gap: 32px;
	max-width: 1180px;
	width: 100%;
	position: relative;
	z-index: 2;
}
@media (min-width: 640px) {
	.eduway-section--lifecycle .lifecycle-stops {
		grid-template-columns: 1fr 1fr !important;
		gap: 32px;
	}
}
@media (min-width: 1100px) {
	.eduway-section--lifecycle .lifecycle-stops {
		grid-template-columns: 1fr 1fr 1fr 1fr !important;
		gap: 24px;
	}
}

/* Each stop card */
.lifecycle-stop {
	position: relative;
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 28px 24px 28px;
	margin: 0;
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
	display: flex;
	flex-direction: column;
}
.lifecycle-stop:hover {
	transform: translateY(-3px);
	border-color: var(--sage-200);
	box-shadow: var(--sh-2);
}
@media (min-width: 768px) {
	.lifecycle-stop { padding: 32px 28px; }
}

/* Sage dot on top of each card — anchors the thread */
.lifecycle-stop__dot {
	position: absolute;
	top: -8px;
	left: 28px;
	width: 14px;
	height: 14px;
	border-radius: 999px;
	background: var(--sage-500);
	box-shadow: 0 0 0 4px var(--paper-2);
}
@media (min-width: 1100px) {
	.lifecycle-stop__dot {
		top: -8px;
		left: 50%;
		transform: translateX(-50%);
	}
}

/* Mono number label — italic, Fire-700 */
.lifecycle-stop__num {
	margin: 0 0 12px;
	font-family: var(--mono);
	font-size: 12px;
	font-weight: 600;
	font-style: italic;
	letter-spacing: 0.06em;
	color: var(--fire-700);
}

/* Stop title */
.lifecycle-stop__title {
	margin: 0 0 12px !important;
	font-size: clamp(20px, 2.4vw, 26px);
	font-weight: 700;
	letter-spacing: -0.012em;
	color: var(--plum-900);
	line-height: 1.2;
}

/* Stop body — three sentences ending with an italic plum-700 punchline */
.lifecycle-stop__body {
	margin: 0;
	font-size: 14px;
	line-height: 1.6;
	color: var(--plum-400);
	font-weight: 400;
}
@media (min-width: 1024px) { .lifecycle-stop__body { font-size: 14.5px; } }

.lifecycle-stop .hl-quote-em {
	color: var(--plum-700);
	font-weight: 500;
	font-style: italic;
}


/* -------------------------------------------------------------------------
   21. HOW IT WORKS (section 6)
   ------------------------------------------------------------------------- */

.eduway-section--how {
	background: var(--paper);
	padding: 64px 0;
}
@media (min-width: 768px)  { .eduway-section--how { padding: 96px 0; } }
@media (min-width: 1024px) { .eduway-section--how { padding: 128px 0; } }

.eduway-section--how .how-head {
	max-width: 880px !important;
	margin: 0 auto 56px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	.eduway-section--how .how-head { margin: 0 auto 80px !important; }
}

.eduway-section--how .how-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}

.eduway-section--how .how-headline {
	margin: 0 auto 24px !important;
	font-size: clamp(32px, 5vw, 56px);
	line-height: 1.14;
	letter-spacing: -0.02em;
	max-width: 18ch;
	text-align: center !important;
}

.eduway-section--how .how-lede {
	margin: 0 auto !important;
	max-width: 56ch;
	text-align: center !important;
}

/* Three tiles */
.eduway-section--how .how-tiles {
	display: grid !important;
	grid-template-columns: 1fr;
	gap: 24px;
	max-width: 1180px;
	margin: 0 auto !important;
	width: 100%;
}
@media (min-width: 768px) {
	.eduway-section--how .how-tiles {
		grid-template-columns: 1fr 1fr 1fr !important;
		gap: 24px;
	}
}
@media (min-width: 1024px) {
	.eduway-section--how .how-tiles {
		gap: 32px;
	}
}

.how-tile {
	margin: 0;
	padding: 32px 28px !important;
}
@media (min-width: 1024px) { .how-tile { padding: 40px 36px !important; } }

.how-tile__num {
	margin: 0 0 8px;
	font-family: var(--mono);
	font-size: 12px;
	font-weight: 600;
	font-style: italic;
	letter-spacing: 0.06em;
	color: var(--plum-300);
}

.how-tile__title {
	margin: 0 0 14px !important;
	font-size: clamp(20px, 2.4vw, 24px);
	font-weight: 700;
	letter-spacing: -0.012em;
	color: var(--plum-900);
	line-height: 1.25;
}

.how-tile__body {
	margin: 0;
	font-size: 14.5px;
	line-height: 1.6;
	color: var(--plum-400);
}

.how-tile.dark .how-tile__title { color: var(--paper); }
.how-tile.dark .how-tile__body  { color: var(--peach-200); }
.how-tile.dark .how-tile__num   { color: var(--fire-300); }
.how-tile.dark .hl-quote-em     { color: var(--peach-200); }

.how-tile .hl-quote-em {
	color: var(--plum-700);
	font-weight: 500;
	font-style: italic;
}


/* -------------------------------------------------------------------------
   22. ALUMNI APP SPOTLIGHT (section 7) — the moment section
   ------------------------------------------------------------------------- */

.eduway-section--alumni {
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 80px 0;
	position: relative;
	overflow: hidden;
}
@media (min-width: 768px)  { .eduway-section--alumni { padding: 112px 0; } }
@media (min-width: 1024px) { .eduway-section--alumni { padding: 144px 0; } }

/* Decorative gradient arch + watercolor blob bg */
.alumni__bg-arch {
	position: absolute;
	top: -10%;
	right: -8%;
	width: 480px;
	aspect-ratio: 1.4 / 1;
	background: linear-gradient(180deg, var(--fire-300) 0%, var(--terracotta) 100%);
	border-radius: 999px 999px 0 0;
	opacity: 0.18;
	pointer-events: none;
}
.alumni__bg-blob {
	position: absolute;
	left: -10%;
	bottom: -20%;
	width: 60%;
	aspect-ratio: 1;
	background: radial-gradient(closest-side, var(--peach-200), transparent 70%);
	filter: blur(40px);
	opacity: 0.12;
	pointer-events: none;
}

.eduway-section--alumni .alumni__grid {
	display: grid !important;
	grid-template-columns: 1fr;
	gap: 56px;
	align-items: center;
	max-width: 1180px;
	margin: 0 auto !important;
	width: 100%;
	position: relative;
	z-index: 2;
}
@media (min-width: 1024px) {
	.eduway-section--alumni .alumni__grid {
		grid-template-columns: 380px 1fr !important;
		gap: 80px;
	}
}

/* Phone mockup */
.alumni__phone {
	margin: 0 auto;
	max-width: 340px;
	width: 100%;
	text-align: center;
}
.alumni__phone-caption {
	margin: 16px 0 0;
	font-family: var(--mono);
	font-size: 11px;
	font-style: italic;
	color: var(--plum-300);
	letter-spacing: 0.04em;
}

/* Phone outer container — actual aspect-ratio is overridden later by the
   higher-specificity `body .alumni__phone .phone` rule (9/19.5 to match
   the screenshot images). This base rule is kept lean so it can apply to
   any non-alumni phone preview if needed. */
.phone {
	position: relative;
	border-radius: 44px;
	padding: 0;
}
.phone__notch {
	position: absolute;
	top: 14px;
	left: 50%;
	transform: translateX(-50%);
	width: 96px;
	height: 22px;
	background: #0e0716;
	border-radius: 999px;
	z-index: 2;
}
.phone__screen {
	background: linear-gradient(180deg, var(--paper) 0%, var(--paper-2) 100%);
	border-radius: 32px;
	height: 100%;
	padding: 48px 18px 18px;
	display: flex;
	flex-direction: column;
	gap: 14px;
	overflow: hidden;
}
.phone__chip {
	align-self: center;
	font-family: var(--mono);
	font-size: 9px;
	font-weight: 700;
	letter-spacing: 0.16em;
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 4px 10px;
	border-radius: 999px;
	margin-bottom: 4px;
}
.phone__hero {
	display: flex;
	flex-direction: column;
	gap: 6px;
	margin: 4px 0;
}
.phone__hero-bar {
	border-radius: 6px;
	background: var(--plum-900);
	height: 14px;
}
.phone__hero-bar--lg { width: 88%; }
.phone__hero-bar--md { width: 60%; opacity: 0.7; }
.phone__cards {
	display: flex;
	flex-direction: column;
	gap: 8px;
	flex: 1;
}
.phone__card {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: 14px;
	padding: 10px;
	display: flex;
	gap: 10px;
	align-items: center;
}
.phone__card-dot {
	width: 28px;
	height: 28px;
	border-radius: 999px;
	background: var(--fire-500);
	flex-shrink: 0;
}
.phone__card-dot--sage  { background: var(--sage-500); }
.phone__card-dot--peach { background: var(--peach-300); }
.phone__card-lines {
	display: flex;
	flex-direction: column;
	gap: 4px;
	flex: 1;
}
.phone__card-lines span {
	display: block;
	height: 6px;
	border-radius: 3px;
	background: var(--mist);
}
.phone__card-lines span:first-child { width: 75%; background: var(--plum-300); opacity: 0.4; }
.phone__cta {
	background: var(--fire-500);
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.04em;
	padding: 10px 14px;
	border-radius: 999px;
	text-align: center;
	box-shadow: var(--sh-warm);
}

/* Content side */
.eduway-section--alumni .alumni__content {
	color: var(--peach-200);
}

.eyebrow--peach {
	color: var(--peach-200) !important;
}
.eyebrow--peach::before { background: var(--fire-300) !important; }

.eduway-section--alumni .alumni-headline {
	margin: 0 0 20px !important;
	font-size: clamp(32px, 5vw, 56px);
	line-height: 1.12;
	letter-spacing: -0.02em;
	max-width: 22ch;
	color: var(--paper);
	font-weight: 700;
}

.hl-italic-peach {
	font-style: italic;
	font-weight: 700;
	color: var(--fire-300);
}

.eduway-section--alumni .alumni-lede {
	margin: 0 0 36px !important;
	max-width: 56ch;
	color: var(--peach-200);
}

.alumni-benefits {
	list-style: none;
	margin: 0 0 28px !important;
	padding: 0 !important;
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
}
@media (min-width: 640px) {
	.alumni-benefits {
		grid-template-columns: 1fr 1fr;
		gap: 28px 32px;
	}
}

.alumni-benefit {
	border-top: 1px solid rgba(255, 214, 168, 0.18);
	padding-top: 16px;
}

.alumni-benefit__title {
	margin: 0 0 6px;
	font-size: 16px;
	font-weight: 700;
	letter-spacing: -0.005em;
	color: var(--peach-200);
}

.alumni-benefit__body {
	margin: 0;
	font-size: 14px;
	line-height: 1.55;
	color: var(--plum-200);
}

.alumni-close {
	margin: 32px 0 0 !important;
	padding-top: 24px;
	border-top: 1px solid rgba(255, 214, 168, 0.18);
	font-size: 14px;
	line-height: 1.6;
	color: var(--plum-200);
	max-width: 60ch;
}


/* -------------------------------------------------------------------------
   23. THE DIFFERENTIATOR (section 8)
   ------------------------------------------------------------------------- */

.eduway-section--diff {
	background: var(--paper-2);
	padding: 64px 0;
}
@media (min-width: 768px)  { .eduway-section--diff { padding: 96px 0; } }
@media (min-width: 1024px) { .eduway-section--diff { padding: 128px 0; } }

.eduway-section--diff .diff-head {
	max-width: 920px !important;
	margin: 0 auto 56px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	.eduway-section--diff .diff-head { margin: 0 auto 72px !important; }
}

.eduway-section--diff .diff-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}

.eduway-section--diff .diff-headline {
	margin: 0 auto 24px !important;
	font-size: clamp(32px, 5vw, 56px);
	line-height: 1.12;
	letter-spacing: -0.02em;
	max-width: 22ch;
	text-align: center !important;
}

.eduway-section--diff .diff-lede {
	margin: 0 auto !important;
	max-width: 60ch;
	text-align: center !important;
}

/* (Dead `.diff-blocks` / `.diff-block*` rules removed — section uses
   `.diff-rows` / `.diff-row` markup instead.) */

.diff-close {
	max-width: 760px;
	margin: 0 auto !important;
	text-align: center !important;
	font-size: clamp(15px, 1.8vw, 17px);
	line-height: 1.6;
	color: var(--plum-700);
	padding: 24px 16px 0;
	border-top: 1px solid var(--mist);
}

.diff-close__brand {
	color: var(--fire-600);
	font-weight: 700;
}


/* -------------------------------------------------------------------------
   24. INTEGRATIONS (section 9)
   ------------------------------------------------------------------------- */

.eduway-section--integrations {
	background: var(--paper);
	padding: 64px 0;
}
@media (min-width: 768px)  { .eduway-section--integrations { padding: 96px 0; } }
@media (min-width: 1024px) { .eduway-section--integrations { padding: 128px 0; } }

.eduway-section--integrations .integrations-head {
	max-width: 880px !important;
	margin: 0 auto 48px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	.eduway-section--integrations .integrations-head { margin: 0 auto 64px !important; }
}

.eduway-section--integrations .integrations-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}

.eduway-section--integrations .integrations-headline {
	margin: 0 auto 24px !important;
	font-size: clamp(28px, 4.6vw, 48px);
	line-height: 1.14;
	letter-spacing: -0.02em;
	max-width: 22ch;
	text-align: center !important;
}

.eduway-section--integrations .integrations-lede {
	margin: 0 auto !important;
	max-width: 56ch;
	text-align: center !important;
}

/* (Dead `.integrations-row` and `.integration-logo*` rules removed —
   layout has been replaced by `.integrations-hub` / `.integration-card`.) */

.integrations-close {
	max-width: 640px;
	margin: 0 auto !important;
	text-align: center !important;
	font-size: 14px;
	line-height: 1.6;
	color: var(--plum-400);
}
.integrations-close .hl-italic {
	display: block;
	margin-bottom: 4px;
	color: var(--plum-700);
}


/* -------------------------------------------------------------------------
   25. FINAL CTA (section 10)
   ------------------------------------------------------------------------- */

.eduway-section--final {
	background: var(--paper);
	padding: 64px 0 96px;
}
@media (min-width: 768px)  { .eduway-section--final { padding: 80px 0 112px; } }
@media (min-width: 1024px) { .eduway-section--final { padding: 96px 0 144px; } }

.final-cta {
	max-width: 1180px;
	margin: 0 auto;
	background: linear-gradient(180deg, var(--paper-2) 0%, var(--paper-3) 100%);
	border: 1px solid var(--paper-3);
	border-radius: var(--r-3);
	padding: 56px 28px;
	position: relative;
	overflow: hidden;
}
@media (min-width: 768px)  { .final-cta { padding: 80px 48px; border-radius: var(--r-4); } }
@media (min-width: 1024px) { .final-cta { padding: 112px 80px; border-radius: var(--r-5); } }

.final-cta .megacta__arch {
	position: absolute;
	left: -20%;
	bottom: -50%;
	width: 280px;
	aspect-ratio: 1.3/1;
	background: linear-gradient(180deg, var(--fire-300) 0%, var(--terracotta) 100%);
	border-radius: 999px 999px 0 0;
	opacity: 0.85;
	pointer-events: none;
}
@media (min-width: 1024px) { .final-cta .megacta__arch { width: 480px; left: -8%; } }

.final-cta::after {
	content: "";
	position: absolute;
	right: -10%;
	top: -30%;
	width: 50%;
	aspect-ratio: 1;
	background: var(--peach-200);
	border-radius: 999px;
	filter: blur(40px);
	opacity: 0.5;
	pointer-events: none;
}

.final-cta__inner {
	position: relative;
	z-index: 2;
	max-width: 720px;
}

.final-cta__inner .eyebrow {
	margin: 0 0 16px;
}

.final-cta__headline {
	margin: 0 0 20px !important;
	font-size: clamp(30px, 5vw, 64px);
	line-height: 1.08;
	letter-spacing: -0.025em;
	font-weight: 700;
	color: var(--plum-900);
	max-width: 18ch;
}

.final-cta__lede {
	margin: 0 0 32px !important;
	font-size: clamp(15px, 2vw, 19px);
	line-height: 1.6;
	color: var(--plum-500);
	max-width: 56ch;
}
.final-cta__lede strong {
	color: var(--plum-900);
	font-weight: 700;
}

.final-cta__ctas {
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
	position: relative;
	z-index: 3;
}


/* =========================================================================
   AUDIT FIX PASS — Sunrise hardening for publish quality
   This block sits at the end of the stylesheet so it has the last word in
   the cascade. Higher specificity, no !important reliance where avoidable,
   defenses against Astra's content-area styles and LiteSpeed minifier
   stripping. Each block is annotated with the issue it addresses.
   ========================================================================= */


/* --- Reposition the Final CTA arch so it doesn't crash into the button -- */
.eduway-section--final .final-cta .megacta__arch {
	left: auto;
	right: -8%;
	bottom: auto;
	top: -25%;
	width: 320px;
	aspect-ratio: 1.4 / 1;
	opacity: 0.55;
	z-index: 1;
}
@media (min-width: 1024px) {
	.eduway-section--final .final-cta .megacta__arch {
		width: 460px;
		right: -4%;
		top: -30%;
	}
}
.eduway-section--final .final-cta::after {
	left: -10%;
	right: auto;
	top: auto;
	bottom: -30%;
	z-index: 1;
}
.eduway-section--final .final-cta__inner {
	position: relative;
	z-index: 3;
}


/* --- Kill default ul/ol markers inside any Eduway section ------------- */
body section.eduway-section ul,
body section.eduway-section ol {
	list-style: none;
	padding-left: 0;
	margin-left: 0;
}
body section.eduway-section ul li,
body section.eduway-section ol li {
	list-style: none;
	margin: 0;
	padding-left: 0;
}
body section.eduway-section ul li::before,
body section.eduway-section ol li::before { content: none; }
body section.eduway-section ol { counter-reset: none; }


/* --- Hide scroll-to-top plugin buttons (Astra, LiteSpeed, generic) ----- */
body .ast-scroll-top,
body #ast-scroll-top,
body .litespeed-scroll-top,
body #litespeed-scroll-top,
body .scroll-to-top,
body .scroll-top-btn,
body a[class*="scroll-top"],
body button[class*="scroll-top"],
body .ast-scroll-to-top-icon,
body div#scrolltotop-button {
	display: none !important;
	visibility: hidden !important;
}


/* --- Credibility band — dark plum strip with one italic line of copy.
   Inline styles on the markup were stripped; everything that used to be
   declared inline now lives here so design tokens propagate. ---------- */
body .eduway-section--credibility {
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 32px 0;
	position: relative;
	z-index: 2;
}
body .eduway-section--credibility .eduway-container {
	display: flex;
	align-items: center;
	justify-content: center;
}
body .eduway-section--credibility .credibility-line {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 12px;
	flex-wrap: wrap;
	text-align: center;
	margin: 0 auto;
	max-width: 980px;
	width: 100%;
	font-style: italic;
	font-weight: 500;
	color: var(--peach-200);
	font-size: clamp(15px, 1.6vw, 19px);
	line-height: 1.4;
	letter-spacing: -0.005em;
}
body .eduway-section--credibility .credibility-mark {
	color: var(--fire-300);
	font-style: normal;
	font-size: 1.1em;
	line-height: 1;
	flex-shrink: 0;
}
body .eduway-section--credibility .credibility-brand {
	color: var(--fire-300);
	font-weight: 700;
	font-style: italic;
}


/* --- Problem section — bulletproof centering and 3-up grid ------------ */
body .eduway-section--problem .problem-head,
body .eduway-section--problem .problem-head .eyebrow,
body .eduway-section--problem .problem-headline,
body .eduway-section--problem .problem-lede {
	text-align: center;
}
body .eduway-section--problem .problem-head { margin-left: auto; margin-right: auto; max-width: 880px; }
body .eduway-section--problem .problem-head .eyebrow { display: inline-flex; }

body .eduway-section--problem .problem-stats {
	display: grid;
	grid-template-columns: 1fr;
	gap: 48px;
	max-width: 1100px;
	margin-left: auto;
	margin-right: auto;
	width: 100%;
	list-style: none;
	padding: 0;
}
@media (min-width: 768px) {
	body .eduway-section--problem .problem-stats {
		grid-template-columns: 1fr 1fr 1fr;
		gap: 32px;
	}
}
@media (min-width: 1024px) {
	body .eduway-section--problem .problem-stats { gap: 56px; }
}


/* --- Outcomes section — same hardening + caveat anchor ---------------- */
body .eduway-section--outcomes .outcomes-head,
body .eduway-section--outcomes .outcomes-headline,
body .eduway-section--outcomes .outcomes-lede,
body .eduway-section--outcomes .outcomes-caveat {
	text-align: center;
}
body .eduway-section--outcomes .outcomes-head { margin-left: auto; margin-right: auto; max-width: 920px; }

body .eduway-section--outcomes .outcomes-stats {
	display: grid;
	grid-template-columns: 1fr;
	gap: 40px;
	max-width: 1180px;
	margin-left: auto;
	margin-right: auto;
	width: 100%;
	list-style: none;
	padding: 0;
}
@media (min-width: 640px) {
	body .eduway-section--outcomes .outcomes-stats {
		grid-template-columns: 1fr 1fr;
	}
}
@media (min-width: 1100px) {
	body .eduway-section--outcomes .outcomes-stats {
		grid-template-columns: 1fr 1fr 1fr 1fr;
		gap: 32px;
	}
}


/* --- Lifecycle section — kill ol numbering + grid hardening ----------- */
body .eduway-section--lifecycle .lifecycle-head,
body .eduway-section--lifecycle .lifecycle-headline,
body .eduway-section--lifecycle .lifecycle-lede {
	text-align: center;
}
body .eduway-section--lifecycle .lifecycle-head {
	margin-left: auto;
	margin-right: auto;
	max-width: 920px;
}

body .eduway-section--lifecycle .lifecycle-stops {
	display: grid;
	grid-template-columns: 1fr;
	gap: 32px;
	max-width: 1180px;
	margin-left: auto;
	margin-right: auto;
	width: 100%;
	list-style: none;
	padding: 0;
	counter-reset: none;
}
body .eduway-section--lifecycle .lifecycle-stops li {
	list-style: none;
	margin: 0;
	padding-left: 0;
}
body .eduway-section--lifecycle .lifecycle-stops li::marker { content: ""; display: none; }
body .eduway-section--lifecycle .lifecycle-stops li::before { content: none; }

@media (min-width: 640px) {
	body .eduway-section--lifecycle .lifecycle-stops { grid-template-columns: 1fr 1fr; }
}
@media (min-width: 1100px) {
	body .eduway-section--lifecycle .lifecycle-stops { grid-template-columns: 1fr 1fr 1fr 1fr; gap: 24px; }
}

body .eduway-section--lifecycle .lifecycle-stop {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 28px 24px;
	position: relative;
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
}
@media (min-width: 768px) {
	body .eduway-section--lifecycle .lifecycle-stop { padding: 32px 28px; }
}
body .eduway-section--lifecycle .lifecycle-stop:hover {
	transform: translateY(-3px);
	border-color: var(--sage-200);
	box-shadow: var(--sh-2);
}

body .eduway-section--lifecycle .lifecycle-thread {
	color: var(--sage-300);
}
body .eduway-section--lifecycle .lifecycle-thread__svg path {
	stroke: var(--sage-300);
}


/* --- How It Works — three-up grid hardening --------------------------- */
body .eduway-section--how .how-head,
body .eduway-section--how .how-headline,
body .eduway-section--how .how-lede {
	text-align: center;
}
body .eduway-section--how .how-head { margin-left: auto; margin-right: auto; max-width: 880px; }

body .eduway-section--how .how-tiles {
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
	max-width: 1180px;
	margin-left: auto;
	margin-right: auto;
	width: 100%;
}
@media (min-width: 768px) {
	body .eduway-section--how .how-tiles { grid-template-columns: 1fr 1fr 1fr; }
}


/* --- Alumni Spotlight — dark surface + phone mockup hardening --------- */
body .eduway-section--alumni {
	background: var(--plum-900);
}
body .eduway-section--alumni,
body .eduway-section--alumni .alumni__content,
body .eduway-section--alumni .alumni-headline,
body .eduway-section--alumni .alumni-lede,
body .eduway-section--alumni .alumni-benefit__title,
body .eduway-section--alumni .alumni-benefit__body,
body .eduway-section--alumni .alumni-close {
	color: var(--peach-200);
}

body .eduway-section--alumni .alumni__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 56px;
	align-items: center;
	max-width: 1180px;
	margin-left: auto;
	margin-right: auto;
	width: 100%;
}
@media (min-width: 1024px) {
	body .eduway-section--alumni .alumni__grid {
		grid-template-columns: 380px 1fr;
		gap: 80px;
	}
}

body .eduway-section--alumni .alumni-benefits {
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
	list-style: none;
	margin: 0 0 28px;
	padding: 0;
}
@media (min-width: 640px) {
	body .eduway-section--alumni .alumni-benefits {
		grid-template-columns: 1fr 1fr;
		gap: 28px 32px;
	}
}

/* Phone frame hardening — explicit dimensions everywhere so it can't
   collapse to plain text when external CSS is partially stripped. */
body .eduway-section--alumni .alumni__phone {
	max-width: 340px;
	width: 100%;
	margin: 0 auto;
	text-align: center;
}
body .eduway-section--alumni .phone {
	position: relative;
	background: linear-gradient(180deg, #2a1a26 0%, #0e0716 100%);
	border-radius: 44px;
	padding: 16px;
	aspect-ratio: 9 / 19;
	max-height: 640px;
	box-shadow: 0 20px 60px -20px rgba(0,0,0,0.6), inset 0 0 0 2px rgba(255,214,168,0.08);
}
body .eduway-section--alumni .phone__notch {
	position: absolute;
	top: 14px; left: 50%;
	transform: translateX(-50%);
	width: 96px; height: 22px;
	background: #0e0716;
	border-radius: 999px;
	z-index: 2;
}
body .eduway-section--alumni .phone__screen {
	background: linear-gradient(180deg, #FFF8F0 0%, #FAF1E4 100%);
	border-radius: 32px;
	height: 100%;
	padding: 48px 18px 18px;
	display: flex;
	flex-direction: column;
	gap: 14px;
	overflow: hidden;
}
body .eduway-section--alumni .phone__chip {
	align-self: center;
	font-family: var(--mono);
	font-size: 9px;
	font-weight: 700;
	letter-spacing: 0.16em;
	background: #1A0F1F;
	color: #FFD6A8;
	padding: 4px 10px;
	border-radius: 999px;
}
body .eduway-section--alumni .phone__cta {
	background: #FF7F1C;
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.04em;
	padding: 10px 14px;
	border-radius: 999px;
	text-align: center;
	box-shadow: 0 8px 32px -10px rgba(255,127,28,.45);
}

/* Italic peach accent inside the alumni headline */
body .eduway-section--alumni .hl-italic-peach {
	font-style: italic;
	font-weight: 700;
	color: #FFA85B;
}


/* --- Differentiator — three-up grid with top-border accents ---------- */
body .eduway-section--diff .diff-head,
body .eduway-section--diff .diff-headline,
body .eduway-section--diff .diff-lede,
body .eduway-section--diff .diff-close {
	text-align: center;
}
body .eduway-section--diff .diff-head { margin-left: auto; margin-right: auto; max-width: 920px; }

/* (Dead `.diff-blocks/.diff-block*` and `.integrations-row` rule sets
   removed — replaced by `.diff-rows/.diff-row` and `.integrations-hub`
   markup respectively.) */

body .eduway-section--diff .diff-close__brand {
	color: var(--fire-600);
	font-weight: 700;
}

body .eduway-section--integrations .integrations-head,
body .eduway-section--integrations .integrations-headline,
body .eduway-section--integrations .integrations-lede,
body .eduway-section--integrations .integrations-close {
	text-align: center;
}
body .eduway-section--integrations .integrations-head {
	margin-left: auto; margin-right: auto; max-width: 880px;
}


/* --- Hero spacing — design-system rhythm (32 / 32 / 12) ------------- */
body .hero__lede { margin-top: 32px; }
body .hero__ctas {
	margin-top: 32px;
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}


/* (Hero aside + ascending journey arc removed — animation felt off and the
   cover-style logo placement was out of place. Hero is back to single-column
   composition. A subtle decorative image will land in the hero soon.) */


/* =========================================================================
   UI/UX AUDIT PASS — visual hierarchy + section differentiation
   ========================================================================= */

/* --- Outcomes onto a slightly deeper surface so it's distinct from
   Problem. Both are stat sections; the bg shift is the visual cue that
   says "we've moved from the negative argument to the positive proof". -- */
body .eduway-section--outcomes {
	background: var(--paper-2);
}

/* (Removed: Problem section chevrons — the section header and content
   already say "this is the problem"; an extra symbol was redundant noise.) */
body .eduway-section--problem .problem-stat::before { content: none; }


/* --- How It Works dark tile — was unreadable. The third tile uses
   `.feature.dark` to mark it as the AI headliner, but the original
   .feature class had no dark bg painted; the cream/peach text colors
   I set were landing on a regular cream background. Fix: paint the
   full dark Plum bg + transparent border + peach text on the dark tile.
   ---------------------------------------------------------------------- */
body .eduway-section--how .how-tile.dark,
body .eduway-section--how .feature.dark {
	background: var(--plum-900);
	border-color: transparent;
	color: var(--peach-200);
}
body .eduway-section--how .how-tile.dark .icon-circle,
body .eduway-section--how .feature.dark .icon-circle {
	background: rgba(255, 214, 168, 0.12);
	color: var(--fire-300);
}
body .eduway-section--how .how-tile.dark .how-tile__num,
body .eduway-section--how .feature.dark .how-tile__num {
	color: var(--fire-300);
}
body .eduway-section--how .how-tile.dark .how-tile__title,
body .eduway-section--how .feature.dark .how-tile__title {
	color: var(--paper);
}
body .eduway-section--how .how-tile.dark .how-tile__body,
body .eduway-section--how .feature.dark .how-tile__body {
	color: var(--peach-200);
}
body .eduway-section--how .how-tile.dark .hl-quote-em,
body .eduway-section--how .feature.dark .hl-quote-em {
	color: var(--fire-300);
	font-weight: 600;
	font-style: italic;
}
body .eduway-section--how .how-tile.dark:hover,
body .eduway-section--how .feature.dark:hover {
	border-color: var(--fire-500);
	background: var(--plum-700);
}


/* --- Lifecycle thread — bring it forward visually. Strengthen color
   from sage-300 to sage-500, thicken stroke, and increase the dash. ---- */
body .eduway-section--lifecycle .lifecycle-thread {
	color: var(--sage-500);
	opacity: 0.55;
	margin-bottom: -36px;
}
body .eduway-section--lifecycle .lifecycle-thread__svg path {
	stroke: var(--sage-500);
	stroke-width: 2.5;
	stroke-dasharray: 8 10;
}

/* Lifecycle dot — slightly larger, with a sage halo */
body .eduway-section--lifecycle .lifecycle-stop__dot {
	width: 16px;
	height: 16px;
	box-shadow: 0 0 0 5px var(--paper-2), 0 0 0 6px var(--sage-200);
}


/* --- Outcomes caveat — make it readable, not invisible. Bumped size,
   plum-500 color (over plum-300), italic font, anchored by a thin sage
   indicator on the leading edge. --------------------------------------- */
body .eduway-section--outcomes .outcomes-caveat {
	font-size: 14px;
	color: var(--plum-500);
	max-width: 760px;
	padding: 28px 24px 0;
	border-top: 1px solid var(--paper-3);
	position: relative;
}
@media (min-width: 768px) {
	body .eduway-section--outcomes .outcomes-caveat { font-size: 15px; }
}
body .eduway-section--outcomes .outcomes-caveat__pop {
	color: var(--plum-900);
	font-weight: 600;
	font-style: italic;
}


/* (Dead `.integration-logo` hover rules removed — chips replaced by cards.) */


/* --- Differentiator closing line — make this the second ApliGroup
   credibility moment with proper visual weight. ----------------------- */
body .eduway-section--diff .diff-close {
	max-width: 820px;
	margin: 8px auto 0 !important;
	font-size: clamp(16px, 2vw, 20px);
	line-height: 1.55;
	color: var(--plum-700);
	padding: 28px 24px 0;
	border-top: 1px solid var(--mist);
	font-weight: 500;
}
body .eduway-section--diff .diff-close__brand {
	color: var(--fire-600);
	font-weight: 700;
	font-style: italic;
}


/* --- Hero arch — soften slightly so it's atmospheric rather than
   dominant. Same gradient, lower opacity. ----------------------------- */
body .eduway-section--hero .hero .arch,
body .eduway-section--hero .hero__arch {
	opacity: 0.78;
}
body .eduway-section--hero .hero .blob,
body .eduway-section--hero .hero__blob {
	opacity: 0.85;
}


/* --- Standardize section padding rhythm across the page ------------- */
body .eduway-section--problem,
body .eduway-section--outcomes,
body .eduway-section--lifecycle,
body .eduway-section--how,
body .eduway-section--diff,
body .eduway-section--integrations {
	padding-top: 80px;
	padding-bottom: 80px;
}
@media (min-width: 768px) {
	body .eduway-section--problem,
	body .eduway-section--outcomes,
	body .eduway-section--lifecycle,
	body .eduway-section--how,
	body .eduway-section--diff,
	body .eduway-section--integrations {
		padding-top: 112px;
		padding-bottom: 112px;
	}
}
@media (min-width: 1024px) {
	body .eduway-section--problem,
	body .eduway-section--outcomes,
	body .eduway-section--lifecycle,
	body .eduway-section--how,
	body .eduway-section--diff,
	body .eduway-section--integrations {
		padding-top: 144px;
		padding-bottom: 144px;
	}
}


/* --- Standardize lede readability — same max-width across sections - */
body .eduway-section .lede {
	max-width: 58ch;
}
body .eduway-section .head {
	margin-bottom: 56px;
}
@media (min-width: 1024px) {
	body .eduway-section .head { margin-bottom: 80px; }
}


/* --- Mobile hero headline — tighten min size for small phones ------- */
@media (max-width: 480px) {
	body .eduway-section--hero .h-mega { font-size: clamp(40px, 11vw, 56px); }
}


/* --- Editorial accent variety — give Lifecycle the sage pencil
   accent so the thread + accent reinforce each other ------------------ */
body .eduway-section--lifecycle .lifecycle-headline .hl-italic {
	background-image: linear-gradient(to right, var(--sage-500) 50%, transparent 50%);
	background-size: 8px 3px;
	background-repeat: repeat-x;
	background-position: 0 100%;
	padding-bottom: 8px;
	font-style: italic;
	color: var(--fire-600);
	display: inline-block;
}


/* =========================================================================
   ROUND 2 AUDIT FIXES — Editorial Differentiator + Responsive Sweep
   ========================================================================= */


/* --- Hero headline — drop the clamp max from 110px to 92px so the CTA
   sits above the fold on most desktop viewports without losing the
   visual-anchor weight at smaller sizes. ----------------------------- */
body .eduway-section--hero .h-mega,
body .eduway-section--hero .hero__headline {
	font-size: clamp(40px, 7.5vw, 92px);
	line-height: 0.98;
	letter-spacing: -0.03em;
}
@media (max-width: 480px) {
	body .eduway-section--hero .h-mega,
	body .eduway-section--hero .hero__headline {
		font-size: clamp(36px, 10vw, 52px);
	}
}


/* --- Hero arch — responsive scaling. On narrow phones the 280px arch
   was occupying 75%+ of viewport. Cap to a sensible viewport-based
   ratio across screen sizes. ---------------------------------------- */
body .eduway-section--hero .hero .arch,
body .eduway-section--hero .hero__arch {
	width: clamp(180px, 50vw, 480px);
}


/* --- Hero CTAs stack to full width on small phones (<480px) -------- */
@media (max-width: 480px) {
	body .eduway-section--hero .hero__ctas .btn,
	body .eduway-section--hero .hero .ctas .btn {
		width: 100%;
		justify-content: center;
	}
}


/* --- Problem stats — Signal v0.2: Instrument Serif italic ink-900 digits,
   fire-600 percent suffix. The italic + serif IS the editorial moment. */
body .eduway-section--problem .problem-stat .num {
	font-family: var(--font-display);
	font-size: clamp(56px, 8vw, 96px);
	font-weight: 400;
	font-style: italic;
	color: var(--ink-900);
}
body .eduway-section--problem .problem-stat .num__digits {
	color: var(--ink-900);
}
body .eduway-section--problem .problem-stat .num__suffix {
	color: var(--fire-600);
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	font-size: 0.6em;
}


/* --- Outcomes stats — smaller than Problem so they read as supporting
   evidence rather than the emotional moment. ----------------------- */
body .eduway-section--outcomes .outcomes-stat__num {
	font-size: clamp(44px, 6.5vw, 76px);
}


/* --- Modal close button — 44×44 minimum touch target ---------------- */
body .modal__close {
	width: 44px;
	height: 44px;
	font-size: 24px;
}


/* --- Mono small text — bumped from 12 to 13 where readability matters */
body .lifecycle-stop__num,
body .how-tile__num,
body .alumni__phone-caption {
	font-size: 13px;
	line-height: 1.4;
}


/* --- Differentiator — editorial 3-row chapter layout
   This replaces the 3-up boxed cards with a magazine-style asymmetric
   layout: big italic Fireflower number on the left like a chapter
   marker, content on the right, with a sage hairline divider between
   each row. No boxes. The layout itself does the design work. --------- */

body .eduway-section--diff .diff-rows {
	display: block;
	max-width: 940px;
	margin: 0 auto;
	padding: 0;
	list-style: none;
}

body .eduway-section--diff .diff-row {
	display: grid;
	grid-template-columns: 1fr;
	gap: 8px;
	padding: 36px 0;
	border-bottom: 1px solid var(--mist);
	position: relative;
	margin: 0;
	background: transparent;
	border-top: 0;
	border-left: 0;
	border-right: 0;
	border-radius: 0;
	transition: background var(--t2);
}
body .eduway-section--diff .diff-row.is-focused {
	background: linear-gradient(to right, transparent 0%, var(--paper-2) 50%, transparent 100%);
	transform: none;
	box-shadow: none;
}
body .eduway-section--diff .diff-row:first-child {
	border-top: 1px solid var(--mist);
}
body .eduway-section--diff .diff-row:last-child {
	border-bottom: 0;
}

@media (min-width: 768px) {
	body .eduway-section--diff .diff-row {
		grid-template-columns: 220px 1fr;
		gap: 56px;
		padding: 56px 0;
		align-items: start;
	}
}
@media (min-width: 1024px) {
	body .eduway-section--diff .diff-row {
		grid-template-columns: 260px 1fr;
		gap: 72px;
		padding: 72px 0;
	}
}

body .eduway-section--diff .diff-row__num {
	font-family: var(--mono);
	font-size: clamp(48px, 7vw, 88px);
	font-weight: 500;
	font-style: italic;
	color: var(--fire-300);
	line-height: 1;
	letter-spacing: -0.04em;
	margin: 0;
	transition: color var(--t2);
}
@media (min-width: 768px) {
	body .eduway-section--diff .diff-row__num {
		text-align: right;
		color: var(--paper-3);
		font-size: clamp(64px, 8vw, 110px);
	}
	body .eduway-section--diff .diff-row.is-focused .diff-row__num {
		color: var(--fire-400);
	}
}

body .eduway-section--diff .diff-row__content {
	max-width: 56ch;
}

body .eduway-section--diff .diff-row__title {
	font-size: clamp(22px, 3vw, 32px);
	font-weight: 700;
	letter-spacing: -0.018em;
	margin: 0 0 14px;
	color: var(--plum-900);
	line-height: 1.18;
}

body .eduway-section--diff .diff-row__body {
	font-size: clamp(15px, 1.6vw, 17px);
	line-height: 1.6;
	color: var(--plum-700);
	margin: 0;
	font-weight: 400;
}

body .eduway-section--diff .diff-row__body .hl-quote-em {
	color: var(--terracotta);
	font-weight: 500;
	font-style: italic;
	display: block;
	margin-top: 8px;
}

/* (Final dead-code cleanup: the .diff-blocks fallback hide rule has been
   removed. Section uses .diff-rows / .diff-row only.) */


/* --- Differentiator close — refined editorial hairline -------------- */
body .eduway-section--diff .diff-close {
	max-width: 820px;
	margin: 56px auto 0 !important;
	font-size: clamp(15px, 1.7vw, 18px);
	line-height: 1.55;
	color: var(--plum-700);
	padding: 32px 24px 0;
	border-top: 1px solid var(--mist);
	font-weight: 400;
	text-align: center;
}
@media (min-width: 1024px) {
	body .eduway-section--diff .diff-close { margin-top: 72px !important; }
}


/* --- Floating Talk-to-us CTA — appears after the user scrolls past
   the hero. Discreet pill, bottom-right corner, dark Plum surface for
   high visibility on cream pages. JS toggles .is-visible class. ----- */
.floating-cta {
	position: fixed;
	bottom: 24px;
	right: 24px;
	z-index: 90;
	opacity: 0;
	transform: translateY(20px);
	pointer-events: none;
	transition: opacity var(--t2), transform var(--t2);
}
.floating-cta.is-visible {
	opacity: 1;
	transform: translateY(0);
	pointer-events: auto;
}
.floating-cta .btn {
	background: var(--plum-900);
	color: var(--paper);
	box-shadow: 0 12px 32px -8px rgba(26,15,31,0.4), inset 0 0 0 1px rgba(255,214,168,0.12);
	padding: 14px 24px;
	min-height: 48px;
	font-weight: 600;
}
.floating-cta .btn:hover {
	background: var(--plum-700);
	transform: translateY(-2px);
	box-shadow: 0 16px 40px -8px rgba(26,15,31,0.5);
}
.floating-cta .btn .arr { color: var(--fire-300); }

@media (max-width: 480px) {
	.floating-cta {
		bottom: 16px;
		right: 16px;
		left: 16px;
	}
	.floating-cta .btn {
		width: 100%;
		justify-content: center;
	}
}

@media (prefers-reduced-motion: reduce) {
	.floating-cta {
		transition: opacity 0.01ms;
	}
}


/* --- Lifecycle thread — also hide on tablet (was already desktop-only)
   so the small viewport doesn't try to render it cropped --------------- */
@media (max-width: 1099px) {
	body .eduway-section--lifecycle .lifecycle-thread { display: none; }
}


/* --- Outcomes 4-up grid — at the awkward 1100-1200 range, four 250px
   columns squeeze the labels. Bump to 2-up between 768-1099 instead. -- */
@media (min-width: 768px) and (max-width: 1099px) {
	body .eduway-section--outcomes .outcomes-stats {
		grid-template-columns: 1fr 1fr;
		gap: 40px 32px;
	}
}


/* --- Alumni phone — never let it overflow on small phones ----------- */
body .eduway-section--alumni .alumni__phone {
	max-width: min(340px, calc(100vw - 48px));
}


/* --- Tighten the head margins on smaller screens so sections don't
   feel padded with empty air on phones ----------------------------- */
@media (max-width: 767px) {
	body .eduway-section .head {
		margin-bottom: 40px;
	}
}


/* --- Container padding — tighten on small phones ------------------- */
@media (max-width: 480px) {
	.eduway-container {
		padding-inline: 16px;
	}
}


/* --- Ensure nothing creates horizontal scroll at any width --------- */
html, body { overflow-x: hidden; }


/* =========================================================================
   ROUND 3 — Lifecycle redesign + iPhone-accurate phone + readability
   ========================================================================= */


/* --- Lifecycle stops — proper padding, themed icons, lifecycle feel.
   Each stop has its own phase color (sage → butter → peach → fire) so
   the row reads as a warming-up progression: cool start, warm finish. */

body .eduway-section--lifecycle .lifecycle-stop {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 32px 28px 28px !important;
	position: relative;
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
	display: flex;
	flex-direction: column;
	gap: 0;
}
@media (min-width: 768px) {
	body .eduway-section--lifecycle .lifecycle-stop {
		padding: 36px 32px 32px !important;
	}
}
@media (min-width: 1100px) {
	body .eduway-section--lifecycle .lifecycle-stop {
		padding: 40px 28px 32px !important;
	}
}

/* Icon circle — themed per phase */
body .lifecycle-stop__icon {
	width: 56px;
	height: 56px;
	border-radius: 999px;
	display: grid;
	place-items: center;
	margin-bottom: 24px;
	transition: transform var(--t2), background var(--t2);
}
body .lifecycle-stop:hover .lifecycle-stop__icon {
	transform: rotate(-4deg) scale(1.04);
}

body .lifecycle-stop--01 .lifecycle-stop__icon {
	background: var(--sage-100);
	color: var(--sage-700);
}
body .lifecycle-stop--02 .lifecycle-stop__icon {
	background: var(--butter);
	color: #8B6F1A;
}
body .lifecycle-stop--03 .lifecycle-stop__icon {
	background: var(--peach-200);
	color: var(--terracotta);
}
body .lifecycle-stop--04 .lifecycle-stop__icon {
	background: var(--fire-100);
	color: var(--fire-700);
}

/* Phase label — bumped readability, each phase gets its own ink color */
body .lifecycle-stop__num {
	margin: 0 0 10px !important;
	font-family: var(--mono);
	font-size: 12px;
	font-weight: 600;
	font-style: italic;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
body .lifecycle-stop--01 .lifecycle-stop__num { color: var(--sage-700); }
body .lifecycle-stop--02 .lifecycle-stop__num { color: #8B6F1A; }
body .lifecycle-stop--03 .lifecycle-stop__num { color: var(--terracotta); }
body .lifecycle-stop--04 .lifecycle-stop__num { color: var(--fire-700); }

/* Title — generous spacing under */
body .eduway-section--lifecycle .lifecycle-stop__title {
	margin: 0 0 14px !important;
	font-size: clamp(22px, 2.6vw, 28px);
	font-weight: 700;
	letter-spacing: -0.018em;
	color: var(--plum-900);
	line-height: 1.18;
}

/* Body — comfortable reading line, plum-700 for full readability */
body .eduway-section--lifecycle .lifecycle-stop__body {
	margin: 0 !important;
	font-size: 14.5px;
	line-height: 1.6;
	color: var(--plum-700);
}

body .eduway-section--lifecycle .lifecycle-stop__body .hl-quote-em {
	display: block;
	margin-top: 8px;
	color: var(--terracotta);
	font-style: italic;
	font-weight: 500;
}

/* Stop dot — color per phase to match icon */
body .lifecycle-stop--01 .lifecycle-stop__dot { background: var(--sage-500); }
body .lifecycle-stop--02 .lifecycle-stop__dot { background: #C4961A; }
body .lifecycle-stop--03 .lifecycle-stop__dot { background: var(--terracotta); }
body .lifecycle-stop--04 .lifecycle-stop__dot { background: var(--fire-500); }

/* Hover lifts each card and brightens the border to its phase color */
body .lifecycle-stop--01:hover { border-color: var(--sage-300); }
body .lifecycle-stop--02:hover { border-color: var(--butter); box-shadow: 0 8px 24px -8px rgba(196,150,26,0.2); }
body .lifecycle-stop--03:hover { border-color: var(--peach-300); box-shadow: 0 8px 24px -8px rgba(196,72,39,0.18); }
body .lifecycle-stop--04:hover { border-color: var(--fire-200); box-shadow: var(--sh-warm); }


/* --- iPhone-accurate phone mockup — based on iPhone 15 Pro proportions.
   Includes Dynamic Island, proper bezel, side antenna line, home
   indicator. Image slot via .phone__image (set src to enable). ------- */

body .eduway-section--alumni .alumni__phone {
	max-width: min(300px, calc(100vw - 48px));
	margin: 0 auto;
	text-align: center;
	width: 100%;
}
@media (max-width: 767px) {
	/* Slim the phone on mobile so it doesn't dominate the viewport, and let
	   the active benefit / dot indicator share the screen comfortably. */
	body .eduway-section--alumni .alumni__phone {
		max-width: min(240px, calc(100vw - 64px));
	}
}

body .alumni__phone .phone,
body .eduway-section--alumni .phone {
	position: relative;
	width: 100%;
	/* Real iPhone Pro display is 9:19.5 — matches the screenshot images the
	   user supplied (Alumni Dashboard / Connections / Jobs / Donations) so
	   nothing gets cropped at the top or bottom of the screen. */
	aspect-ratio: 9 / 19.5 !important;
	max-height: none;
	margin: 0 auto;
	background: transparent;
	box-shadow: none;
	padding: 0;
	border-radius: 0;
}

/* Side antenna — subtle highlight running down the right edge */
body .alumni__phone .phone__antenna {
	position: absolute;
	top: 22%;
	right: -1px;
	width: 2px;
	height: 56%;
	background: linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.15) 50%, transparent 100%);
	border-radius: 2px;
	z-index: 5;
	pointer-events: none;
}

/* Bezel — the phone's outer frame */
body .alumni__phone .phone__bezel {
	position: relative;
	width: 100%;
	height: 100%;
	background:
		linear-gradient(140deg, #2a1a26 0%, #1a0f1f 35%, #0a0410 100%);
	border-radius: 14% / 6.5%;
	padding: 4%;
	box-shadow:
		0 30px 60px -20px rgba(0,0,0,0.55),
		0 12px 24px -10px rgba(0,0,0,0.4),
		inset 0 0 0 2px rgba(255,255,255,0.04),
		inset 0 0 0 4px rgba(0,0,0,0.45);
	overflow: hidden;
}

/* Dynamic Island */
body .alumni__phone .phone__island {
	position: absolute;
	top: 10px;
	left: 50%;
	transform: translateX(-50%);
	width: 28%;
	max-width: 90px;
	height: 18px;
	background: #000;
	border-radius: 999px;
	z-index: 10;
}
@media (min-width: 1024px) {
	body .alumni__phone .phone__island { height: 22px; top: 14px; max-width: 100px; }
}
/* Mobile — phone is small (200/180px wide), so the island needs to shrink
   proportionally. Real iPhone island is roughly a 3.4:1 horizontal pill. */
@media (max-width: 767px) {
	body .alumni__phone .phone__island {
		width: 26%;
		max-width: 56px;
		height: 14px;
		top: 8px;
	}
}

/* Screen — where the image or fallback content lives */
body .alumni__phone .phone__screen {
	position: relative;
	width: 100%;
	height: 100%;
	background: #fff;
	border-radius: 11% / 5%;
	overflow: hidden;
	display: flex;
	flex-direction: column;
}

/* Real screenshot image — only renders when src is set */
body .alumni__phone .phone__image {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: top center;
	display: block;
	z-index: 2;
	border-radius: inherit;
	background: #fff;
}

/* Dynamic Island stays visible even with a real screenshot — keeps the
   iPhone identity. Bumped its z-index so it sits cleanly above the image. */
body .alumni__phone .phone__island {
	z-index: 12;
}
body .alumni__phone .phone__home {
	z-index: 13;
}
body .alumni__phone .phone__image[src=""],
body .alumni__phone .phone__image:not([src]),
body .alumni__phone .phone__image[src*="''"] {
	display: none;
}

/* Fallback abstract preview — hidden when real image loads */
body .alumni__phone .phone__image[src]:not([src=""]) ~ .phone__fallback {
	display: none;
}

body .alumni__phone .phone__fallback {
	display: flex;
	flex-direction: column;
	gap: 12px;
	width: 100%;
	height: 100%;
	padding: 50px 16px 16px;
	background: linear-gradient(180deg, var(--paper) 0%, var(--paper-2) 100%);
}

/* Status bar at top of fallback — sells the iPhone illusion */
body .alumni__phone .phone__statusbar {
	display: flex;
	justify-content: space-between;
	align-items: center;
	padding: 0 12px;
	margin-bottom: 4px;
}
body .alumni__phone .phone__time {
	font-family: var(--font);
	font-size: 12px;
	font-weight: 700;
	color: var(--plum-900);
}
body .alumni__phone .phone__indicators {
	display: inline-flex;
	gap: 4px;
	align-items: center;
	color: var(--plum-900);
}

/* Home indicator at bottom of phone */
body .alumni__phone .phone__home {
	position: absolute;
	bottom: 8px;
	left: 50%;
	transform: translateX(-50%);
	width: 36%;
	max-width: 130px;
	height: 4px;
	background: rgba(255,255,255,0.65);
	border-radius: 999px;
	z-index: 11;
}

/* Fallback content elements */
body .alumni__phone .phone__chip {
	align-self: flex-start;
	margin-left: 12px;
	font-family: var(--mono);
	font-size: 9px;
	font-weight: 700;
	letter-spacing: 0.16em;
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 4px 10px;
	border-radius: 999px;
}
body .alumni__phone .phone__hero {
	display: flex;
	flex-direction: column;
	gap: 5px;
	margin: 4px 12px 0;
}
body .alumni__phone .phone__hero-bar {
	height: 14px;
	border-radius: 4px;
	background: var(--plum-900);
}
body .alumni__phone .phone__hero-bar--lg { width: 88%; }
body .alumni__phone .phone__hero-bar--md { width: 60%; opacity: 0.7; }

body .alumni__phone .phone__cards {
	display: flex;
	flex-direction: column;
	gap: 8px;
	flex: 1;
	margin: 4px 0;
	padding: 0 4px;
}
body .alumni__phone .phone__card {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: 10px;
	padding: 8px;
	display: flex;
	gap: 8px;
	align-items: center;
}
body .alumni__phone .phone__card-dot {
	width: 22px;
	height: 22px;
	border-radius: 999px;
	background: var(--fire-500);
	flex-shrink: 0;
}
body .alumni__phone .phone__card-dot--sage { background: var(--sage-500); }
body .alumni__phone .phone__card-dot--peach { background: var(--peach-300); }

body .alumni__phone .phone__card-lines {
	display: flex;
	flex-direction: column;
	gap: 3px;
	flex: 1;
}
body .alumni__phone .phone__card-lines span {
	display: block;
	height: 5px;
	border-radius: 3px;
	background: var(--mist);
}
body .alumni__phone .phone__card-lines span:first-child {
	width: 70%;
	background: var(--plum-300);
	opacity: 0.4;
}

body .alumni__phone .phone__cta {
	background: var(--fire-500);
	color: #fff;
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.04em;
	padding: 9px 12px;
	border-radius: 999px;
	text-align: center;
	box-shadow: 0 6px 20px -6px rgba(255,127,28,.5);
	margin: 0 12px 8px;
}


/* =========================================================================
   ROUND 4 — Hero readability + selection highlight
   ========================================================================= */


/* --- Hero italic accent — soft cream halo so the italic Fireflower text
   stays readable when it visually overlaps the orange arch. The halo is
   subtle on the cream surface and distinct against the orange. ------- */
body .eduway-section--hero .hero__headline .hl-italic,
body .eduway-section--hero .hero__line .hl-italic {
	text-shadow:
		0 0 1px rgba(255, 248, 240, 0.95),
		0 0 8px rgba(255, 248, 240, 0.75),
		0 0 18px rgba(255, 248, 240, 0.55);
}

/* Also pull the hero arch behind the headline a bit further so the
   overlap zone is smaller. Keep the visual presence; reduce the
   collision. */
body .eduway-section--hero .hero .arch,
body .eduway-section--hero .hero__arch {
	opacity: 0.72;
	top: -16%;
}
@media (min-width: 1024px) {
	body .eduway-section--hero .hero .arch,
	body .eduway-section--hero .hero__arch {
		top: -22%;
		right: -10%;
	}
}


/* --- Text selection — on-brand warm highlight instead of browser default
   blue. Fire-100 (pale peach) bg with Plum-900 text. Works against
   every Sunrise surface (cream, paper-2, paper-3, dark plum). -------- */
::selection {
	background: var(--fire-100);
	color: var(--plum-900);
	text-shadow: none;
}
::-moz-selection {
	background: var(--fire-100);
	color: var(--plum-900);
	text-shadow: none;
}

/* On the dark Plum surfaces (credibility band, alumni section), invert
   the selection so the highlight uses Fireflower bg + Plum text and
   stays brand-consistent. */
body .eduway-section--credibility ::selection,
body .eduway-section--alumni ::selection {
	background: var(--fire-500);
	color: var(--plum-900);
}
body .eduway-section--credibility ::-moz-selection,
body .eduway-section--alumni ::-moz-selection {
	background: var(--fire-500);
	color: var(--plum-900);
}


/* =========================================================================
   ROUND 5 — Alumni benefit icons + Differentiator visual interest
   ========================================================================= */


/* --- Alumni benefits: each gets an icon in a soft peach circle on the
   dark plum surface. The icon row + copy uses a 2-column flex layout
   so the title and body sit cleanly to the right. ------------------ */

body .eduway-section--alumni .alumni-benefit {
	display: flex;
	gap: 16px;
	align-items: flex-start;
	border-top: 1px solid rgba(255, 214, 168, 0.18);
	padding-top: 18px;
}

body .alumni-benefit__icon {
	flex-shrink: 0;
	width: 44px;
	height: 44px;
	border-radius: 999px;
	background: rgba(255, 214, 168, 0.1);
	color: var(--fire-300);
	display: grid;
	place-items: center;
	border: 1px solid rgba(255, 214, 168, 0.18);
	transition: background var(--t2), color var(--t2), transform var(--t2);
}

body .alumni-benefit:hover .alumni-benefit__icon {
	background: rgba(255, 127, 28, 0.18);
	color: var(--fire-300);
	transform: rotate(-4deg) scale(1.04);
}

body .alumni-benefit__copy {
	flex: 1;
	min-width: 0;
}

body .eduway-section--alumni .alumni-benefit__title {
	margin: 0 0 6px;
}


/* --- Differentiator visual interest pass:
   1. Section gets a soft watercolor blob in the bottom-right for
      atmospheric warmth.
   2. Each row title gets a small line icon in a circle (chip / compass
      / users) — phase-themed colors.
   3. Each title uses a different editorial accent on the keyword
      (technology / strategy / people) — hl-underline, hl-arc, hl-pencil.
   4. Number ghost color shifts subtly per row.
   ------------------------------------------------------------------- */

body .eduway-section--diff {
	position: relative;
	overflow: hidden;
}

body .eduway-section--diff .diff-blob {
	position: absolute;
	right: -10%;
	bottom: -25%;
	width: 60%;
	max-width: 720px;
	aspect-ratio: 1;
	background: radial-gradient(closest-side, var(--peach-200) 0%, transparent 65%);
	filter: blur(40px);
	opacity: 0.45;
	pointer-events: none;
	z-index: 0;
}
body .eduway-section--diff .eduway-container {
	position: relative;
	z-index: 1;
}

/* Number ghost — slight phase tinting */
body .eduway-section--diff .diff-row--01 .diff-row__num { color: rgba(242, 228, 206, 1); }
body .eduway-section--diff .diff-row--02 .diff-row__num { color: rgba(210, 224, 213, 1); }
body .eduway-section--diff .diff-row--03 .diff-row__num { color: rgba(255, 214, 168, 1); }

/* Per-row focus colors — apply on ALL viewports now (was desktop-only on
   hover). When the row enters the viewport centre, its number adopts the
   thematic accent for that section. */
body .eduway-section--diff .diff-row--01.is-focused .diff-row__num { color: var(--fire-400); }
body .eduway-section--diff .diff-row--02.is-focused .diff-row__num { color: var(--sage-400); }
body .eduway-section--diff .diff-row--03.is-focused .diff-row__num { color: var(--terracotta); }

/* Title head — icon + title on one line */
body .eduway-section--diff .diff-row__head {
	display: flex;
	align-items: center;
	gap: 14px;
	margin-bottom: 14px;
	flex-wrap: wrap;
}

body .eduway-section--diff .diff-row__head .diff-row__title {
	margin: 0 !important;
}

/* Icon — small line icon in a thematic colored circle */
body .diff-row__icon {
	flex-shrink: 0;
	width: 44px;
	height: 44px;
	border-radius: 999px;
	display: grid;
	place-items: center;
	background: var(--fire-50);
	color: var(--fire-700);
	border: 1px solid var(--fire-100);
	transition: transform var(--t2), background var(--t2);
}

body .diff-row__icon--sage {
	background: var(--sage-50);
	color: var(--sage-700);
	border-color: var(--sage-100);
}

body .diff-row__icon--terra {
	background: rgba(196, 72, 39, 0.08);
	color: var(--terracotta);
	border-color: rgba(196, 72, 39, 0.18);
}

body .diff-row.is-focused .diff-row__icon {
	transform: rotate(-4deg) scale(1.05);
}

/* Editorial accent overrides for the differentiator titles — each row's
   keyword gets a different Sunrise accent so the rows don't read as
   identical typographic units. */

/* Row 1: hl-underline (orange hand-drawn squiggle) on "technology" */
body .eduway-section--diff .diff-row--01 .hl-underline {
	color: var(--plum-900);
}

/* Row 2: hl-arc (sage curved arch) on "strategy" — already styled in
   the base accent class, just position properly within title. */
body .eduway-section--diff .diff-row--02 .hl-arc {
	color: var(--plum-900);
	margin-top: 8px;
	display: inline-block;
}

/* Row 3: hl-pencil (dashed sage underline) on "people" */
body .eduway-section--diff .diff-row--03 .hl-pencil {
	color: var(--plum-900);
	background-image: linear-gradient(to right, var(--terracotta) 50%, transparent 50%);
	display: inline-block;
}


/* =========================================================================
   ROUND 7 — Mobile fixes: nav, hero, headline, alumni icon variety
   ========================================================================= */


/* --- Mobile nav — clean two-element layout: brand + Fireflower hamburger.
   Drop the inline Talk-to-us pill on mobile (drawer has it; floating
   pill picks up after scroll). Bump hamburger to 44×44 with a proper
   circular Fireflower fill. --------------------------------------------- */
@media (max-width: 767px) {
	body .eduway-nav .cta {
		display: none;
	}
	body .eduway-nav {
		gap: 8px;
		padding: 6px 6px 6px 12px;
	}
	body .eduway-nav .brand {
		padding: 4px 0;
	}
	body .eduway-nav .hamburger {
		display: inline-flex !important;
		align-items: center;
		justify-content: center;
		width: 44px !important;
		height: 44px !important;
		border-radius: 999px !important;
		background: var(--fire-500) !important;
		color: #fff !important;
		border: 0 !important;
		box-shadow: var(--sh-warm) !important;
		cursor: pointer;
		flex-shrink: 0;
		padding: 0;
		transition: transform var(--t1), background var(--t1);
	}
	body .eduway-nav .hamburger:hover,
	body .eduway-nav .hamburger:active {
		background: var(--fire-600) !important;
		transform: scale(0.96);
	}
	body .eduway-nav .hamburger svg {
		width: 18px;
		height: 18px;
	}
}

/* On the smallest phones, hide the wordmark and show only the orange
   "E" icon so the brand + hamburger fit comfortably. */
@media (max-width: 419px) {
	body .eduway-nav .brand__text {
		display: none;
	}
}

/* Hard-hide the hamburger on desktop. Without the !important, an earlier
   transitional rule was leaving the orange bar visible at certain widths. */
@media (min-width: 768px) {
	body .eduway-nav .hamburger {
		display: none !important;
	}
}


/* --- Hero arch sizing across viewports.
   Desktop: 480px max anchor. Tablet: 70vw. Mobile: dialed back so the
   arch enhances rather than dominates the headline. ------------------ */
body .eduway-section--hero .hero .arch,
body .eduway-section--hero .hero__arch {
	width: clamp(220px, 60vw, 480px);
}


/* --- Hero headline mobile — force each clause to its own line so
   "More applications. / Fewer dropouts. / More engaged alumni." reads
   as three discrete editorial statements instead of jumbled text. ----- */
@media (max-width: 767px) {
	body .eduway-section--hero .hero__line {
		display: block !important;
	}
	body .eduway-section--hero .hero__line + .hero__line::before {
		content: none;
	}
	body .eduway-section--hero .hero__headline {
		line-height: 1.04;
	}
	body .eduway-section--hero .hero__line + .hero__line {
		margin-top: 2px;
	}
}


/* =========================================================================
   ROUND 9 — Mobile-first hero rebuild
   The desktop hero is locked. This block tightens proportions on phones:
   smaller headline, smaller arch, tighter panel padding, full-width
   stacked CTAs, smaller lede with comfortable line-length. -------------
   ========================================================================= */

@media (max-width: 640px) {
	/* Section vertical rhythm — reclaim the screen real estate */
	body .eduway-section--hero {
		padding-top: 56px;
		padding-bottom: 24px;
	}

	/* Hero panel — reduced padding */
	body .eduway-section--hero .hero {
		padding: 36px 20px 40px;
		border-radius: var(--r-3);
	}

	/* Arch — better mobile proportion, less dominant */
	body .eduway-section--hero .hero .arch,
	body .eduway-section--hero .hero__arch {
		width: clamp(200px, 58vw, 300px);
		top: -8%;
		right: -12%;
		opacity: 0.74;
	}

	/* Watercolor blob — smaller, more atmospheric */
	body .eduway-section--hero .hero .blob,
	body .eduway-section--hero .hero__blob {
		width: 55%;
		bottom: -28%;
		opacity: 0.7;
		filter: blur(14px);
	}

	/* Headline — smaller, tighter, three editorial statements */
	body .eduway-section--hero .h-mega,
	body .eduway-section--hero .hero__headline {
		font-size: clamp(30px, 9vw, 44px);
		line-height: 1.05;
		letter-spacing: -0.025em;
	}

	/* Italic accent halo — strengthen on mobile so it reads against the arch */
	body .eduway-section--hero .hero__line .hl-italic {
		text-shadow:
			0 0 1px rgba(255, 248, 240, 0.98),
			0 0 6px rgba(255, 248, 240, 0.9),
			0 0 14px rgba(255, 248, 240, 0.7);
	}

	/* Lede — comfortable mobile size, narrower line for readability */
	body .eduway-section--hero .hero .lede,
	body .eduway-section--hero .lede {
		font-size: 15.5px !important;
		line-height: 1.55;
		margin-top: 20px !important;
		max-width: 40ch;
	}

	/* CTAs — full-width stacked column on mobile */
	body .eduway-section--hero .hero__ctas,
	body .eduway-section--hero .hero .ctas {
		display: flex;
		flex-direction: column;
		width: 100%;
		gap: 10px;
		margin-top: 26px !important;
	}
	body .eduway-section--hero .hero__ctas .btn,
	body .eduway-section--hero .hero .ctas .btn {
		width: 100%;
		justify-content: center;
		padding: 14px 22px;
		min-height: 50px;
		font-size: 15px;
	}
}

/* Even smaller phones (≤380px) — iPhone SE class */
@media (max-width: 380px) {
	body .eduway-section--hero .hero {
		padding: 32px 18px 36px;
	}
	body .eduway-section--hero .h-mega,
	body .eduway-section--hero .hero__headline {
		font-size: clamp(28px, 8.4vw, 36px);
	}
	body .eduway-section--hero .hero__ctas .btn,
	body .eduway-section--hero .hero .ctas .btn {
		font-size: 14.5px;
		padding: 13px 20px;
		min-height: 48px;
	}
	body .eduway-section--hero .hero .lede,
	body .eduway-section--hero .lede {
		font-size: 15px !important;
	}
}


/* =========================================================================
   ROUND 10 — Mobile hero: rising-sun arch + scroll cue
   On phones the arch becomes a centered "rising sun" peeking from the top
   instead of a cropped corner element. Single focal point. Brand signature.
   Plus a subtle scroll-down cue at the bottom of the hero panel. ------- */

@media (max-width: 767px) {

	/* Rising sun arch — glowing radial gradient instead of solid linear.
	   Fades to transparent at the edges so the bottom doesn't read as a
	   hard horizontal line. Feels like dawn light, not an orange cap. */
	body .eduway-section--hero .hero .arch,
	body .eduway-section--hero .hero__arch {
		width: clamp(360px, 110vw, 540px) !important;
		aspect-ratio: 1.6 / 1 !important;
		top: -22% !important;
		right: 50% !important;
		transform: translateX(50%);
		opacity: 0.85 !important;
		filter: blur(8px);
		background: radial-gradient(
			ellipse 55% 80% at 50% 5%,
			var(--fire-300) 0%,
			var(--fire-400) 22%,
			var(--terracotta) 48%,
			rgba(196, 72, 39, 0.4) 65%,
			transparent 80%
		) !important;
		border-radius: 0 !important;
	}

	/* Add an optional secondary "halo" on the panel via the section ::before
	   so the dawn light extends slightly beyond the arch's visible area. */
	body .eduway-section--hero .hero {
		position: relative;
		isolation: isolate;
	}
	body .eduway-section--hero .hero::after {
		content: "";
		position: absolute;
		top: -10%;
		left: 50%;
		transform: translateX(-50%);
		width: 130%;
		aspect-ratio: 2.5 / 1;
		background: radial-gradient(
			ellipse 50% 70% at 50% 30%,
			rgba(255, 168, 91, 0.18) 0%,
			rgba(255, 127, 28, 0.08) 40%,
			transparent 70%
		);
		pointer-events: none;
		z-index: 0;
	}

	/* Watercolor blob — pulled up and forward so the warmth is visible
	   below the headline, not hidden under the panel edge. */
	body .eduway-section--hero .hero .blob,
	body .eduway-section--hero .hero__blob {
		left: -20%;
		bottom: -10%;
		width: 80%;
		opacity: 0.7;
		filter: blur(20px);
	}

	/* Push the inner content down so it doesn't collide with the rising sun.
	   The arch occupies the top portion; content starts below. */
	body .eduway-section--hero .hero__inner,
	body .eduway-section--hero .hero .inner {
		padding-top: 24px;
	}

	/* Italic accent halo — strengthen further so "More engaged alumni."
	   stays crisp against the warm rising sun above. */
	body .eduway-section--hero .hero__line .hl-italic {
		text-shadow:
			0 0 1px rgba(255, 248, 240, 1),
			0 0 8px rgba(255, 248, 240, 0.95),
			0 0 18px rgba(255, 248, 240, 0.75);
	}
}

@media (max-width: 480px) {
	/* Slightly tighter rising-sun on small phones */
	body .eduway-section--hero .hero .arch,
	body .eduway-section--hero .hero__arch {
		width: clamp(320px, 115vw, 460px) !important;
		top: -18% !important;
	}
}


/* --- Scroll-down cue at the bottom of the hero panel ---------------- */
.hero__scroll-cue {
	display: none;
	margin: 28px auto 0;
	padding: 8px 14px;
	align-items: center;
	justify-content: center;
	gap: 8px;
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 600;
	font-style: italic;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--plum-400);
	background: rgba(255, 248, 240, 0.6);
	border: 1px solid var(--mist);
	border-radius: 999px;
	width: max-content;
	text-decoration: none;
	transition: color var(--t1), background var(--t1), transform var(--t1);
}
.hero__scroll-cue svg {
	color: var(--fire-500);
	animation: hero-cue-bounce 1.6s ease-in-out infinite;
}
.hero__scroll-cue:hover {
	color: var(--plum-900);
	background: var(--paper-0);
	transform: translateY(-1px);
}
@keyframes hero-cue-bounce {
	0%, 100% { transform: translateY(0); }
	50%      { transform: translateY(3px); }
}
@media (prefers-reduced-motion: reduce) {
	.hero__scroll-cue svg { animation: none; }
}

/* Show on mobile only — desktop uses the sticky nav for navigation */
@media (max-width: 767px) {
	.hero__scroll-cue {
		display: inline-flex;
	}
}


/* --- Floating CTA — adaptive surface detection. By default the pill
   uses dark Plum (high contrast on cream sections). When the CTA is
   visually overlapping a dark section (credibility band, alumni
   spotlight, footer), it flips to Fireflower so it stays visible. JS
   toggles the .is-on-dark class via getBoundingClientRect intersection
   with the dark sections list. ----------------------------------------- */
body .floating-cta .btn {
	background: var(--plum-900);
	color: var(--paper);
	box-shadow: 0 12px 32px -8px rgba(26,15,31,0.4), inset 0 0 0 1px rgba(255,214,168,0.12);
	transition: background var(--t2), color var(--t2), box-shadow var(--t2), transform var(--t1);
}
body .floating-cta .btn:hover {
	background: var(--plum-700);
	transform: translateY(-2px);
	box-shadow: 0 16px 40px -8px rgba(26,15,31,0.5);
}
body .floating-cta .btn .arr {
	color: var(--fire-300);
	transition: color var(--t2);
}

body .floating-cta.is-on-dark .btn {
	background: var(--fire-500);
	color: #fff;
	box-shadow: var(--sh-warm), 0 16px 40px -8px rgba(255,127,28,0.4);
}
body .floating-cta.is-on-dark .btn:hover {
	background: var(--fire-600);
	box-shadow: var(--sh-warm), 0 20px 48px -8px rgba(229,103,15,0.5);
}
body .floating-cta.is-on-dark .btn .arr {
	color: #fff;
}
/* On dark sections the CTA itself is fire-orange — a fire-orange focus ring
   would disappear into it. Use white outline instead. */
body .floating-cta.is-on-dark .btn:focus-visible {
	outline: 2px solid #fff;
	outline-offset: 3px;
}


/* --- Alumni benefit icons — varied palette per item. Same warming
   progression as the lifecycle (peach → sage → butter → fire) so the
   visual language is consistent across both sections. ------------------ */
body .eduway-section--alumni .alumni-benefit:nth-child(1) .alumni-benefit__icon {
	background: rgba(255, 214, 168, 0.16);
	color: var(--peach-200);
	border-color: rgba(255, 214, 168, 0.32);
}
body .eduway-section--alumni .alumni-benefit:nth-child(2) .alumni-benefit__icon {
	background: rgba(123, 159, 131, 0.22);
	color: var(--sage-200);
	border-color: rgba(166, 192, 171, 0.4);
}
body .eduway-section--alumni .alumni-benefit:nth-child(3) .alumni-benefit__icon {
	background: rgba(255, 232, 184, 0.16);
	color: var(--butter);
	border-color: rgba(255, 232, 184, 0.32);
}
body .eduway-section--alumni .alumni-benefit:nth-child(4) .alumni-benefit__icon {
	background: rgba(255, 127, 28, 0.22);
	color: var(--fire-300);
	border-color: rgba(255, 127, 28, 0.4);
}

/* Hover keeps each icon's identity but warms it slightly */
body .eduway-section--alumni .alumni-benefit:nth-child(1):hover .alumni-benefit__icon {
	background: rgba(255, 214, 168, 0.28);
}
body .eduway-section--alumni .alumni-benefit:nth-child(2):hover .alumni-benefit__icon {
	background: rgba(123, 159, 131, 0.34);
}
body .eduway-section--alumni .alumni-benefit:nth-child(3):hover .alumni-benefit__icon {
	background: rgba(255, 232, 184, 0.28);
}
body .eduway-section--alumni .alumni-benefit:nth-child(4):hover .alumni-benefit__icon {
	background: rgba(255, 127, 28, 0.34);
}


/* =========================================================================
   ROUND 8 — Integrations redesign
   Replaced flat mono chips with proper integration cards: themed icon,
   wordmark name, type label. Reads as a real "supported integrations"
   panel rather than a tag-cloud fallback. ----------------------------- */

body .eduway-section--integrations .integrations-grid {
	display: grid !important;
	grid-template-columns: 1fr;
	gap: 16px;
	max-width: 1080px;
	margin: 0 auto 56px !important;
	padding: 0 !important;
	list-style: none;
	width: 100%;
}
@media (min-width: 640px) {
	body .eduway-section--integrations .integrations-grid {
		grid-template-columns: 1fr 1fr;
		gap: 20px;
	}
}
@media (min-width: 1024px) {
	body .eduway-section--integrations .integrations-grid {
		grid-template-columns: 1fr 1fr 1fr;
		gap: 24px;
	}
}

body .eduway-section--integrations li.integration-card,
body .integrations-grid li.integration-card,
body .integration-card {
	display: flex;
	align-items: center;
	gap: 16px;
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 22px 24px !important;
	margin: 0;
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
	min-height: 84px;
	list-style: none;
}
@media (min-width: 768px) {
	body .eduway-section--integrations li.integration-card,
	body .integrations-grid li.integration-card,
	body .integration-card {
		padding: 24px 26px !important;
		min-height: 92px;
	}
}
@media (min-width: 1024px) {
	body .eduway-section--integrations li.integration-card,
	body .integrations-grid li.integration-card,
	body .integration-card {
		padding: 28px 30px !important;
		min-height: 100px;
	}
}

body .integration-card:hover {
	transform: translateY(-3px);
	border-color: var(--fire-200);
	box-shadow: 0 8px 24px -8px rgba(255, 127, 28, 0.18);
}

body .integration-card__icon {
	flex-shrink: 0;
	width: 44px;
	height: 44px;
	border-radius: 999px;
	display: grid;
	place-items: center;
	transition: transform var(--t2), background var(--t2);
}
body .integration-card:hover .integration-card__icon {
	transform: rotate(-4deg);
}

/* Type-themed icon colors */
body .integration-card--sis .integration-card__icon {
	background: var(--sage-50);
	color: var(--sage-700);
}
body .integration-card--lms .integration-card__icon {
	background: var(--peach-100);
	color: var(--terracotta);
}
body .integration-card--erp .integration-card__icon {
	background: var(--butter);
	color: #8B6F1A;
}
body .integration-card--add .integration-card__icon {
	background: var(--fire-100);
	color: var(--fire-700);
}

body .integration-card__name {
	margin: 0 0 2px;
	font-size: 16px;
	font-weight: 700;
	letter-spacing: -0.012em;
	color: var(--plum-900);
	line-height: 1.2;
}
@media (min-width: 1024px) {
	body .integration-card__name { font-size: 17px; }
}

body .integration-card__type {
	margin: 0;
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 600;
	font-style: italic;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--plum-300);
}

/* "+ Your CRM" — Fireflower variant */
body .integration-card--add {
	background: linear-gradient(135deg, var(--fire-50) 0%, var(--paper-2) 100%);
	border: 1px dashed var(--fire-200);
}
body .integration-card--add .integration-card__name {
	color: var(--fire-700);
	font-style: italic;
}
body .integration-card--add .integration-card__type {
	color: var(--fire-600);
}
body .integration-card--add:hover {
	background: linear-gradient(135deg, var(--fire-100) 0%, var(--paper-2) 100%);
	border-color: var(--fire-300);
	border-style: solid;
}


/* -------------------------------------------------------------------------
   9. MEGA CTA (final band)
   ------------------------------------------------------------------------- */
.megacta {
	background: linear-gradient(180deg, var(--paper-2) 0%, var(--paper-3) 100%);
	border: 1px solid var(--paper-3);
	padding: 40px 24px;
	border-radius: var(--r-3);
	position: relative;
	overflow: hidden;
}
@media (min-width: 640px)  { .megacta { padding: 56px 36px; } }
@media (min-width: 1024px) { .megacta { padding: 80px 56px; border-radius: var(--r-4); } }

.megacta .arch {
	position: absolute;
	left: -20%;
	bottom: -50%;
	width: 280px;
	aspect-ratio: 1.3/1;
	background: linear-gradient(180deg, var(--fire-300) 0%, var(--terracotta) 100%);
	border-radius: 999px 999px 0 0;
	opacity: 0.85;
	pointer-events: none;
}
@media (min-width: 1024px) { .megacta .arch { width: 480px; left: -8%; } }

.megacta::after {
	content: "";
	position: absolute;
	right: -10%;
	top: -30%;
	width: 50%;
	aspect-ratio: 1;
	background: var(--peach-200);
	border-radius: 999px;
	filter: blur(40px);
	opacity: 0.5;
	pointer-events: none;
}

.megacta h3 {
	position: relative;
	z-index: 1;
	font-size: clamp(26px, 4vw, 52px);
	letter-spacing: -0.025em;
	line-height: 1.08;
	font-weight: 700;
	margin: 0 0 18px;
	max-width: 18ch;
}
.megacta p {
	position: relative;
	z-index: 1;
	font-size: clamp(15px, 2vw, 18px);
	color: var(--plum-500);
	max-width: 50ch;
	margin: 0 0 24px;
	line-height: 1.6;
}
.megacta .ctas {
	position: relative;
	z-index: 1;
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
}
@media (max-width: 480px) { .megacta .ctas .btn { width: 100%; } }


/* -------------------------------------------------------------------------
   10. FOOTER
   ------------------------------------------------------------------------- */
.eduway-footer {
	background: var(--plum-900);
	color: var(--peach-200);
	padding: 36px 24px;
	border-radius: 0;
	position: relative;
	z-index: 2;
}
@media (min-width: 640px) { .eduway-footer { padding: 56px 48px; } }
.eduway-footer h5 {
	margin: 0 0 12px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--fire-300);
	font-style: italic;
}
.eduway-footer a {
	display: block;
	padding: 4px 0;
	color: var(--plum-100);
	font-size: 14px;
	min-height: 28px;
	transition: color var(--t1);
}
.eduway-footer a:hover { color: var(--peach-200); }
.eduway-footer .signoff {
	border-top: 1px solid var(--plum-700);
	margin-top: 28px;
	padding-top: 20px;
	display: flex;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 8px;
	font-size: 12px;
	color: var(--plum-200);
	font-style: italic;
}
.eduway-footer .social-hidden { display: none; }


/* -------------------------------------------------------------------------
   11. NAVBAR (sticky pill, ribbon-styled, with scroll-spy underline)
   ------------------------------------------------------------------------- */
.eduway-nav {
	position: fixed;
	top: 16px;
	left: 50%;
	transform: translateX(-50%);
	z-index: 100;
	display: flex;
	align-items: center;
	gap: 4px;
	padding: 8px;
	background: rgba(255,252,246,0.85);
	border: 1px solid var(--mist);
	border-radius: 999px;
	box-shadow: var(--sh-2);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	max-width: calc(100vw - 24px);
	/* `overflow: visible` keeps the active-link underline (positioned at
	   bottom: -2px) from being clipped. Horizontal scroll is enabled
	   instead via the ::-webkit-scrollbar hide rule below if links
	   overflow on small screens — we accept the visible scroll behaviour
	   on those rare overflows. */
	overflow: visible;
}
.eduway-nav::-webkit-scrollbar { display: none; }

.eduway-nav .brand {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 4px 10px;
	flex-shrink: 0;
}
.eduway-nav .brand img { height: 22px; width: auto; }

.eduway-nav .links {
	display: flex;
	align-items: center;
	gap: 2px;
}
.eduway-nav .links a {
	position: relative;
	padding: 8px 14px;
	font-size: 13px;
	font-weight: 600;
	color: var(--plum-700);
	border-radius: 999px;
	transition: color var(--t1), background var(--t1);
	min-height: 36px;
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
}
.eduway-nav .links a:hover {
	color: var(--plum-900);
	background: var(--paper-2);
}
.eduway-nav .links a {
	overflow: visible;
}
/* Wavy underline pseudo — always present so it can animate width on activate. */
.eduway-nav .links a::after {
	content: "";
	position: absolute;
	left: 12px;
	right: 12px;
	bottom: -2px;
	height: 7px;
	background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 7' preserveAspectRatio='none'><path d='M2 4 Q 25 1, 50 3 T 98 2' stroke='%23FF7F1C' stroke-width='2.4' fill='none' stroke-linecap='round'/></svg>");
	background-repeat: no-repeat;
	background-size: 100% 100%;
	pointer-events: none;
	transform: scaleX(0);
	transform-origin: left center;
	opacity: 0;
	transition: transform 0.45s cubic-bezier(.4,.7,.3,1), opacity 0.3s ease;
}
.eduway-nav .links a.is-active {
	color: var(--fire-700);
}
.eduway-nav .links a.is-active::after {
	transform: scaleX(1);
	opacity: 1;
}
@media (prefers-reduced-motion: reduce) {
	.eduway-nav .links a::after { transition: none; }
}

/* Separator between section links and page links */
.eduway-nav .nav-sep {
	width: 1px;
	height: 20px;
	background: var(--mist);
	margin: 0 4px;
	flex-shrink: 0;
}

/* Page links (About, Articles) — no scroll-spy underline */
.eduway-nav .pages {
	display: flex;
	align-items: center;
	gap: 2px;
}
.eduway-nav .pages a {
	position: relative;
	padding: 8px 12px;
	font-size: 13px;
	font-weight: 600;
	color: var(--ink-300);
	border-radius: 999px;
	transition: color var(--t1), background var(--t1);
	min-height: 36px;
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
}
.eduway-nav .pages a:hover {
	color: var(--ink-900);
	background: var(--paper-2);
}

/* Language chip */
.eduway-nav .lang {
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--ink-400);
	background: var(--paper-2);
	border: 1px solid var(--mist);
	border-radius: 999px;
	padding: 6px 12px;
	cursor: pointer;
	transition: color var(--t1), border-color var(--t1), background var(--t1);
	display: inline-flex;
	align-items: center;
	gap: 4px;
	margin-left: 2px;
	flex-shrink: 0;
	line-height: 1;
}
.eduway-nav .lang:hover {
	color: var(--ink-900);
	border-color: var(--ink-300);
	background: var(--paper-0);
}
.eduway-nav .lang svg { width: 10px; height: 10px; opacity: 0.5; }

.eduway-nav .cta {
	margin-left: 4px;
}

@media (max-width: 767px) {
	.eduway-nav .links,
	.eduway-nav .nav-sep,
	.eduway-nav .pages,
	.eduway-nav .lang { display: none; }
	.eduway-nav .hamburger { display: inline-flex; }
}
@media (min-width: 768px) {
	.eduway-nav .hamburger { display: none; }
}

.eduway-nav .hamburger {
	width: 36px;
	height: 36px;
	border-radius: 999px;
	background: var(--fire-500);
	color: #fff;
	border: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	box-shadow: var(--sh-warm);
}
.eduway-nav .hamburger svg { width: 18px; height: 18px; stroke: currentColor; }

/* Mobile drawer */
.eduway-drawer {
	position: fixed;
	inset: 0;
	background: var(--paper);
	z-index: 200;
	padding: 80px 24px 40px;
	overflow-y: auto;
	transform: translateY(-100%);
	transition: transform var(--t2);
}
.eduway-drawer[aria-hidden="false"] { transform: translateY(0); }
.eduway-drawer .close {
	position: absolute;
	top: 20px;
	right: 20px;
	width: 40px;
	height: 40px;
	border-radius: 999px;
	border: 1px solid var(--plum-200);
	background: transparent;
	cursor: pointer;
}
.eduway-drawer ul {
	list-style: none;
	margin: 0;
	padding: 0;
}
.eduway-drawer li + li { margin-top: 8px; }
.eduway-drawer a {
	font-size: clamp(28px, 4.2vw, 42px);
	font-weight: 700;
	letter-spacing: -0.02em;
	color: var(--plum-900);
	display: block;
	padding: 12px 0;
}
.eduway-drawer a:hover { color: var(--fire-600); }


/* -------------------------------------------------------------------------
   12. MODALS (Talk to us, Watch the video)
   ------------------------------------------------------------------------- */
.modal {
	position: fixed;
	inset: 0;
	z-index: 1000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 16px;
}
.modal[hidden] { display: none; }

.modal__backdrop {
	position: absolute;
	inset: 0;
	background: rgba(26,15,31,0.55);
	backdrop-filter: blur(4px);
	-webkit-backdrop-filter: blur(4px);
	cursor: pointer;
	animation: modal-fade var(--t2) ease-out;
}

.modal__panel {
	position: relative;
	background: var(--paper);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	box-shadow: var(--sh-3);
	padding: 32px 24px;
	max-width: 640px;
	width: 100%;
	max-height: 90vh;
	overflow-y: auto;
	animation: modal-rise var(--t2) cubic-bezier(.32,.72,.22,1);
}
@media (min-width: 640px) { .modal__panel { padding: 48px 40px; border-radius: var(--r-4); } }

.modal__close {
	position: absolute;
	top: 16px;
	right: 16px;
	width: 36px;
	height: 36px;
	border-radius: 999px;
	border: 1px solid var(--plum-200);
	background: var(--paper-0);
	font-size: 22px;
	line-height: 1;
	color: var(--plum-700);
	cursor: pointer;
	transition: background var(--t1), color var(--t1);
}
.modal__close:hover { background: var(--fire-500); color: #fff; border-color: var(--fire-500); }

@keyframes modal-fade {
	from { opacity: 0; }
	to   { opacity: 1; }
}
@keyframes modal-rise {
	from { opacity: 0; transform: translateY(20px) scale(0.98); }
	to   { opacity: 1; transform: translateY(0)    scale(1); }
}

/* Video modal — special panel that scales to the video */
.modal--video .modal__panel {
	background: var(--plum-900);
	border-color: var(--plum-700);
	max-width: 1000px;
	padding: 16px;
}
.modal--video .modal__close {
	background: var(--plum-900);
	color: var(--peach-200);
	border-color: var(--plum-700);
}
.modal--video video {
	width: 100%;
	height: auto;
	border-radius: var(--r-2);
	display: block;
}

/* Modal-talk + modal-video copy */
.modal-talk__lede { margin-bottom: 16px; }
.modal-talk__contact {
	font-size: 14px;
	color: var(--plum-700);
	line-height: 1.6;
	margin: 0;
}
.modal-talk__contact a { color: var(--fire-700); font-weight: 700; }
.modal-video__placeholder {
	color: var(--peach-200);
	text-align: center;
	padding: 64px 24px;
	font-size: 16px;
	line-height: 1.6;
}
.modal-video__placeholder a { color: var(--fire-300); font-weight: 700; }

/* Screen-reader only text — visually hidden but read by AT */
.screen-reader-text {
	border: 0;
	clip: rect(1px, 1px, 1px, 1px);
	clip-path: inset(50%);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
	white-space: nowrap;
}


/* -------------------------------------------------------------------------
   13. WPForms — Sunrise overrides inside the modal
   ------------------------------------------------------------------------- */
.modal__panel .wpforms-form,
.modal__panel .wpforms-container {
	font-family: inherit;
}
.modal__panel .wpforms-field-label {
	font-size: 13px;
	font-weight: 700;
	color: var(--plum-700);
	letter-spacing: 0.02em;
	margin-bottom: 6px;
}
.modal__panel input[type="text"],
.modal__panel input[type="email"],
.modal__panel input[type="url"],
.modal__panel input[type="tel"],
.modal__panel select,
.modal__panel textarea {
	width: 100%;
	font-family: inherit;
	font-size: 16px;
	padding: 12px 16px;
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-2);
	color: var(--plum-900);
	transition: border-color var(--t1), box-shadow var(--t1);
}
.modal__panel input:focus,
.modal__panel select:focus,
.modal__panel textarea:focus {
	outline: 0;
	border-color: var(--fire-500);
	box-shadow: 0 0 0 3px var(--fire-100);
}
.modal__panel button[type="submit"],
.modal__panel .wpforms-submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	padding: 13px 22px;
	min-height: 44px;
	font-family: inherit;
	font-size: 15px;
	font-weight: 600;
	border: 0;
	border-radius: 999px;
	cursor: pointer;
	background: var(--fire-500);
	color: #fff;
	box-shadow: var(--sh-warm);
	transition: transform var(--t1), background var(--t1);
}
.modal__panel button[type="submit"]:hover,
.modal__panel .wpforms-submit:hover {
	background: var(--fire-600);
	transform: translateY(-1px);
}


/* -------------------------------------------------------------------------
   14. UTILITY GRID HELPERS (used by patterns)
   ------------------------------------------------------------------------- */
.grid { display: grid; gap: 18px; grid-template-columns: 1fr; }
@media (min-width: 640px)  { .grid.g-2 { grid-template-columns: repeat(2,1fr); } .grid { gap: 24px; } }
@media (min-width: 1024px) { .grid.g-3 { grid-template-columns: repeat(3,1fr); } }
@media (min-width: 1024px) { .grid.g-4 { grid-template-columns: repeat(4,1fr); } }
@media (min-width: 640px) and (max-width: 1023px) { .grid.g-4 { grid-template-columns: repeat(2,1fr); } }


/* -------------------------------------------------------------------------
   15. REDUCED MOTION
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
	.btn:hover         { transform: none; }
	.feature:hover     { transform: none; }
	.post:hover        { transform: none; }
	.hero .blob,
	.megacta::after    { animation: none; }
}


/* -------------------------------------------------------------------------
   16. PRINT (don't break for the rare investor printout)
   ------------------------------------------------------------------------- */
@media print {
	body::before { display: none; }
	.eduway-nav,
	.eduway-drawer,
	.modal,
	.skip-link,
	.floating-cta,
	.preview-ribbon,
	.scroll-progress,
	.eduway-cursor-dot,
	.eduway-cursor-ring,
	.hero__arch,
	.hero__blob,
	.alumni__bg-photo,
	.alumni__bg-blob,
	.alumni__bg-arch,
	.diff-blob,
	.megacta__arch,
	.lifecycle-thread__svg { display: none !important; }
	.eduway-section { padding: 24px 0; break-inside: avoid; }
	a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 90%; }
}

html { font-size: 16px; }
body { background: var(--paper); margin: 0; }
body::before { z-index: 1; }
section.eduway-section { position: relative; z-index: 2; }

.preview-ribbon {
	position: fixed; top: 0; left: 0; right: 0;
	background: rgba(26,15,31,0.92); color: var(--peach-200);
	font-family: var(--mono); font-size: 11px; font-weight: 600;
	letter-spacing: 0.1em; text-transform: uppercase;
	padding: 6px 16px; text-align: center; z-index: 9999;
	backdrop-filter: blur(6px);
}


body { padding-top: 28px; }
.eduway-nav { top: 36px !important; }

.eduway-nav .brand { gap: 8px; padding: 4px 12px 4px 8px; }
.eduway-nav .brand__text { font-weight: 800; font-size: 16px; letter-spacing: -0.025em; color: var(--plum-900); font-family: var(--font); }
.eduway-nav .cta { padding: 8px 16px !important; min-height: 36px; font-size: 13px; }

.eduway-drawer__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 32px; }
.eduway-drawer__brand { display: inline-flex; }
.eduway-drawer__close { width: 44px; height: 44px; border-radius: 999px; border: 1px solid var(--plum-200); background: transparent; cursor: pointer; display: grid; place-items: center; color: var(--plum-700); }
.eduway-drawer__close:hover { background: var(--paper-2); }
.eduway-drawer__cta { margin-top: 32px; padding-top: 24px; border-top: 1px solid var(--mist); }

.eduway-footer { padding: 64px 24px 32px; }
@media (min-width: 768px) { .eduway-footer { padding: 96px 48px 40px; } }
.eduway-footer__inner { max-width: 1200px; margin: 0 auto; }
.eduway-footer__lead { margin-bottom: 48px; }
.eduway-footer__brand { display: inline-flex; align-items: center; gap: 12px; margin-bottom: 16px; color: var(--paper); font-weight: 800; font-size: 22px; letter-spacing: -0.025em; }
.eduway-footer__brand span { color: var(--paper); }
.eduway-footer__tagline { margin: 0; font-size: 14px; line-height: 1.6; color: var(--plum-200); max-width: 50ch; font-style: italic; }
.eduway-footer__brand-pop { color: var(--fire-300); font-weight: 700; font-style: italic; }
.eduway-footer__cols { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; padding-bottom: 32px; border-bottom: 1px solid var(--plum-700); }
@media (min-width: 768px) { .eduway-footer__cols { grid-template-columns: repeat(4, 1fr); gap: 40px; } }
.eduway-footer__col h5 { color: var(--fire-300); }
.eduway-footer__col a { color: var(--plum-100); display: block; padding: 4px 0; min-height: 28px; font-size: 14px; transition: color 160ms; }
.eduway-footer__col a:hover { color: var(--peach-200); }
.eduway-footer__signoff { margin-top: 24px; padding-top: 24px; display: flex; flex-wrap: wrap; gap: 12px 24px; align-items: center; justify-content: space-between; font-size: 12px; color: var(--plum-200); font-style: italic; border-top: 1px solid var(--plum-700); }
.eduway-footer__signoff p { margin: 0; }
.eduway-footer__signoff a { color: var(--plum-200); }
.eduway-footer__signoff a:hover { color: var(--peach-200); }
.eduway-footer__social { display: inline-flex; align-items: center; gap: 12px; }
.eduway-footer__social a { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 999px; border: 1px solid var(--plum-700); color: var(--peach-200); transition: background 160ms, color 160ms, border-color 160ms; }
.eduway-footer__social a:hover { background: var(--fire-500); color: #fff; border-color: var(--fire-500); }
.social-hidden[hidden], [aria-label="Eduway on X"][hidden], [aria-label="Eduway on YouTube"][hidden], [aria-label="Eduway on Instagram"][hidden] { display: none !important; }

[data-anim]:not(.is-revealed) { opacity: 0; }

html.lenis { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }
.lenis.lenis-scrolling iframe { pointer-events: none; }

/* Scroll progress bar — Apple-style top-of-page indicator */
.scroll-progress {
	position: fixed; top: 0; left: 0;
	height: 2px; width: 100%;
	background: var(--fire-500);
	z-index: 10000;
	transform-origin: left center;
	transform: scaleX(0);
	pointer-events: none;
	box-shadow: 0 0 8px rgba(255,127,28,0.45);
}
@media (prefers-reduced-motion: reduce) { .scroll-progress { display: none; } }

/* Pin spacer normalization */
.eduway-section.is-pinned { z-index: 5; }



@media (hover: hover) and (pointer: fine) {
	body.has-custom-cursor, body.has-custom-cursor a, body.has-custom-cursor button,
	body.has-custom-cursor [role="button"], body.has-custom-cursor input, body.has-custom-cursor textarea,
	body.has-custom-cursor select, body.has-custom-cursor [data-modal-open], body.has-custom-cursor [data-modal-close],
	body.has-custom-cursor .integration-card { cursor: none; }
}
.eduway-cursor-dot, .eduway-cursor-ring {
	position: fixed; top: 0; left: 0;
	pointer-events: none; z-index: 99999;
	border-radius: 999px;
	will-change: transform;
	opacity: 0;
	/* `margin` is in the transition list so the negative-margin centering
	   trick stays in sync with width/height changes — without it the
	   ring's visible centre drifts off the cursor during click + hover
	   resize, then snaps back at the end of the transition. */
	transition:
		opacity 0.2s ease,
		width 0.18s cubic-bezier(.4,0,.2,1),
		height 0.18s cubic-bezier(.4,0,.2,1),
		margin 0.18s cubic-bezier(.4,0,.2,1),
		background 0.15s,
		border-color 0.15s,
		box-shadow 0.15s;
}
.eduway-cursor-dot { width: 8px; height: 8px; background: var(--fire-500); box-shadow: 0 0 12px rgba(255,127,28,0.55); margin-top: -4px; margin-left: -4px; }
.eduway-cursor-ring { width: 36px; height: 36px; border: 1.5px solid var(--plum-400); background: rgba(255,248,240,0.06); margin-top: -18px; margin-left: -18px; mix-blend-mode: multiply; }
body.has-custom-cursor.cursor-ready .eduway-cursor-dot, body.has-custom-cursor.cursor-ready .eduway-cursor-ring { opacity: 1; }
body.has-custom-cursor.is-cursor-hover .eduway-cursor-dot { width: 6px; height: 6px; margin-top: -3px; margin-left: -3px; background: #fff; box-shadow: 0 0 8px rgba(255,255,255,0.6); }
body.has-custom-cursor.is-cursor-hover .eduway-cursor-ring { width: 56px; height: 56px; margin-top: -28px; margin-left: -28px; border-color: var(--fire-500); background: rgba(255,127,28,0.18); mix-blend-mode: normal; }
body.has-custom-cursor.cursor-on-dark .eduway-cursor-ring { border-color: rgba(255,214,168,0.55); background: rgba(255,214,168,0.06); mix-blend-mode: normal; }
body.has-custom-cursor.is-cursor-clicked .eduway-cursor-ring { width: 28px; height: 28px; margin-top: -14px; margin-left: -14px; border-color: var(--fire-500); background: rgba(255,127,28,0.3); }
@media (prefers-reduced-motion: reduce) { .eduway-cursor-dot, .eduway-cursor-ring { transition: opacity 0.01ms; } }
@media (hover: none), (pointer: coarse) { .eduway-cursor-dot, .eduway-cursor-ring { display: none !important; } }



/* =========================================================================
   IMAGE PLACEMENTS — preview only
   ========================================================================= */

.hero-photo-strip {
	position: relative;
	width: 100%;
	overflow: hidden;
	background: var(--paper-2);
	margin: 0;
	padding: 0;
}
.hero-photo-strip__inner {
	position: relative;
	max-width: none;
	width: 100%;
	margin: 0;
	height: 320px;
	overflow: hidden;
}
@media (min-width: 768px) { .hero-photo-strip__inner { height: 420px; } }
@media (min-width: 1024px) { .hero-photo-strip__inner { height: 540px; } }
@media (min-width: 1440px) { .hero-photo-strip__inner { height: 600px; } }

.hero-photo-strip__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}

.hero-photo-strip__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(
		180deg,
		rgba(255, 248, 240, 0.4) 0%,
		rgba(255, 214, 168, 0.18) 40%,
		rgba(255, 248, 240, 0.5) 100%
	);
	pointer-events: none;
	mix-blend-mode: multiply;
}

.hero-photo-strip__caption {
	position: absolute;
	bottom: 24px;
	left: 24px;
	right: 24px;
	max-width: 360px;
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	font-style: italic;
	color: var(--plum-900);
	background: rgba(255, 252, 246, 0.85);
	padding: 8px 14px;
	border-radius: 999px;
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
	width: max-content;
	margin: 0;
}
@media (min-width: 768px) { .hero-photo-strip__caption { bottom: 32px; left: 48px; } }


.ui-frame {
	position: relative;
	background: var(--paper);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	overflow: hidden;
	box-shadow: var(--sh-3);
	transition: transform var(--t2), box-shadow var(--t2);
	margin-top: 24px;
	width: 100%;
	max-width: 100%;
}
.ui-frame:hover {
	transform: translateY(-3px) rotate(-0.4deg);
	box-shadow: 0 30px 60px -20px rgba(26,15,31,0.25);
}
.ui-frame--dark {
	background: var(--plum-900);
	border-color: var(--plum-700);
	box-shadow: 0 30px 60px -20px rgba(0,0,0,0.5);
}

.ui-frame__chrome {
	display: flex;
	align-items: center;
	gap: 6px;
	padding: 10px 14px;
	background: var(--paper-2);
	border-bottom: 1px solid var(--mist);
}
.ui-frame--dark .ui-frame__chrome {
	background: var(--plum-700);
	border-bottom-color: var(--plum-500);
}
.ui-frame__chrome-dot {
	width: 11px;
	height: 11px;
	border-radius: 999px;
}
.ui-frame__chrome-dot:nth-child(1) { background: #FF5F56; }
.ui-frame__chrome-dot:nth-child(2) { background: #FFBD2E; }
.ui-frame__chrome-dot:nth-child(3) { background: #27C93F; }
.ui-frame__chrome-url {
	margin-left: 12px;
	flex: 1;
	font-family: var(--mono);
	font-size: 10px;
	color: var(--plum-300);
	font-style: italic;
	letter-spacing: 0.04em;
	font-weight: 600;
}
.ui-frame--dark .ui-frame__chrome-url { color: var(--peach-200); opacity: 0.6; }

.ui-frame__shot {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 16 / 10;
	object-fit: cover;
}


/* How It Works — three equal-width tiles, each with a screenshot */
@media (min-width: 1024px) {
	body .eduway-section--how .how-tiles {
		grid-template-columns: 1fr 1fr 1fr !important;
		gap: 24px;
	}
}
@media (max-width: 1023px) and (min-width: 768px) {
	body .eduway-section--how .how-tiles {
		grid-template-columns: 1fr 1fr !important;
	}
}

/* Equalize the tile heights — flex layout inside each tile so the
   image, title, and body line up across all three columns. */
body .eduway-section--how .how-tile {
	display: flex;
	flex-direction: column;
}
body .eduway-section--how .how-tile .ui-frame {
	margin-top: 0;
	margin-bottom: 24px;
}
body .eduway-section--how .how-tile__num {
	margin-top: 0;
}

/* Frame image — equal aspect ratio across all tiles, cropped from top
   so the most important part of each UI shows. */
body .eduway-section--how .ui-frame__shot {
	aspect-ratio: 16 / 10 !important;
	object-fit: cover;
	object-position: top center;
}


/* Differentiator row 3 with photo */
@media (min-width: 768px) {
	body .eduway-section--diff .diff-row.diff-row--with-photo {
		grid-template-columns: 220px 1fr 280px !important;
		gap: 40px !important;
		align-items: stretch;
	}
}
@media (min-width: 1024px) {
	body .eduway-section--diff .diff-row.diff-row--with-photo {
		grid-template-columns: 260px 1fr 340px !important;
		gap: 56px !important;
	}
}

.diff-row__photo {
	margin-top: 20px;
	border-radius: var(--r-3);
	overflow: hidden;
	box-shadow: var(--sh-2);
	aspect-ratio: 4 / 5;
	position: relative;
	background: var(--paper-2);
}
@media (min-width: 768px) {
	.diff-row__photo {
		margin-top: 0;
		aspect-ratio: auto;
		min-height: 280px;
		align-self: stretch;
	}
}

.diff-row__photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
	transition: transform 1.2s cubic-bezier(.32,.72,.22,1);
}
.diff-row__photo::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(255,127,28,0) 60%, rgba(196,72,39,0.15) 100%);
	pointer-events: none;
	mix-blend-mode: multiply;
}
.diff-row--with-photo.is-focused .diff-row__photo img {
	transform: scale(1.05);
}


/* Alumni background photo */
body .eduway-section--alumni {
	position: relative;
}
body .eduway-section--alumni .alumni__bg-photo {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: hidden;
	pointer-events: none;
}
body .eduway-section--alumni .alumni__bg-photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
	opacity: 0.32;
	mix-blend-mode: lighten;
	filter: saturate(0.55) contrast(0.92);
	animation: alumni-bg-zoom 30s ease-in-out infinite alternate;
}
@keyframes alumni-bg-zoom {
	0%   { transform: scale(1.0)  translate(0, 0); }
	100% { transform: scale(1.08) translate(-1%, -2%); }
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-section--alumni .alumni__bg-photo img { animation: none; }
}
body .eduway-section--alumni .alumni__bg-photo::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(
		180deg,
		rgba(26,15,31,0.55) 0%,
		rgba(26,15,31,0.78) 50%,
		rgba(26,15,31,0.7) 100%
	);
}
body .eduway-section--alumni > .eduway-container,
body .eduway-section--alumni .alumni__grid {
	position: relative;
	z-index: 2;
}



/* =========================================================================
   UI MOCKUPS — CSS-built, on-palette
   Replace the random placeholder images with mockups built from the actual
   Sunrise palette. They demonstrate the design intent perfectly.
   ========================================================================= */

/* --- Journey builder canvas mockup ---------------------------------- */
.builder-mockup {
	position: relative;
	width: 100%;
	aspect-ratio: 16 / 10;
	background:
		radial-gradient(circle, var(--mist) 1px, transparent 1px) 0 0 / 18px 18px,
		linear-gradient(180deg, var(--paper-0) 0%, var(--paper-2) 100%);
	background-position: 0 0, 0 0;
	overflow: hidden;
}

.builder-mockup__lines {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	color: var(--sage-300);
	opacity: 0.7;
	pointer-events: none;
}

.builder-node {
	position: absolute;
	width: 22%;
	min-width: 110px;
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-2);
	padding: 8px 10px;
	box-shadow: var(--sh-1);
	transition: transform var(--t1);
}
.builder-node:hover { transform: translateY(-1px); box-shadow: var(--sh-2); }

.builder-node__type {
	display: block;
	font-family: var(--mono);
	font-size: 8px;
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	font-style: italic;
	margin-bottom: 4px;
}
.builder-node__title {
	display: block;
	font-size: 10px;
	font-weight: 700;
	color: var(--plum-900);
	line-height: 1.25;
}

.builder-node--trigger { border-top: 3px solid var(--fire-500); }
.builder-node--trigger .builder-node__type { color: var(--fire-700); }

.builder-node--message { border-top: 3px solid var(--sage-500); }
.builder-node--message .builder-node__type { color: var(--sage-700); }

.builder-node--branch { border-top: 3px solid #C4961A; }
.builder-node--branch .builder-node__type { color: #8B6F1A; }

.builder-node--ai { border-top: 3px solid var(--terracotta); }
.builder-node--ai .builder-node__type { color: var(--terracotta); }

.builder-node--success { border-top: 3px solid var(--fire-700); }
.builder-node--success .builder-node__type { color: var(--fire-700); }


/* --- AI inbox mockup (dark) ------------------------------------------ */
.inbox-mockup {
	display: flex;
	width: 100%;
	aspect-ratio: 16 / 10;
	background: var(--plum-900);
	color: var(--peach-200);
	overflow: hidden;
}

.inbox-mockup__sidebar {
	width: 30%;
	min-width: 130px;
	background: var(--plum-950);
	padding: 14px 10px;
	display: flex;
	flex-direction: column;
	gap: 4px;
	border-right: 1px solid var(--plum-700);
}

.inbox-mockup__nav-item {
	display: flex;
	align-items: center;
	gap: 8px;
	padding: 7px 9px;
	font-size: 10px;
	font-weight: 600;
	color: var(--plum-200);
	border-radius: 6px;
	transition: background var(--t1);
}
.inbox-mockup__nav-item.is-active {
	background: rgba(255, 214, 168, 0.06);
	color: var(--peach-200);
}
.inbox-mockup__nav-dot {
	width: 8px;
	height: 8px;
	border-radius: 999px;
	background: var(--peach-200);
	flex-shrink: 0;
}
.inbox-mockup__nav-dot--fire { background: var(--fire-500); box-shadow: 0 0 6px rgba(255,127,28,0.6); }
.inbox-mockup__nav-dot--sage { background: var(--sage-500); }
.inbox-mockup__nav-dot--peach { background: var(--peach-300); }

.inbox-mockup__nav-count {
	margin-left: auto;
	background: rgba(255, 214, 168, 0.1);
	padding: 2px 6px;
	border-radius: 999px;
	font-family: var(--mono);
	font-size: 9px;
	font-weight: 700;
}
.inbox-mockup__nav-count--fire {
	background: var(--fire-500);
	color: #fff;
}

.inbox-mockup__main {
	flex: 1;
	display: flex;
	flex-direction: column;
	overflow: hidden;
}

.inbox-row {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 12px 14px;
	border-bottom: 1px solid var(--plum-700);
	transition: background var(--t1);
}
.inbox-row:hover { background: rgba(255, 214, 168, 0.04); }
.inbox-row--risk {
	background: rgba(255, 127, 28, 0.06);
	border-left: 3px solid var(--fire-500);
}

.inbox-row__avatar {
	width: 26px;
	height: 26px;
	border-radius: 999px;
	display: grid;
	place-items: center;
	font-family: var(--font);
	font-size: 11px;
	font-weight: 700;
	color: #fff;
	flex-shrink: 0;
}

.inbox-row__body { flex: 1; min-width: 0; }
.inbox-row__name {
	margin: 0 0 2px;
	font-size: 11px;
	font-weight: 700;
	color: var(--paper);
	display: flex;
	align-items: center;
	gap: 6px;
}
.inbox-row__badge {
	font-family: var(--mono);
	font-size: 8px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	background: var(--fire-500);
	color: #fff;
	padding: 2px 6px;
	border-radius: 999px;
	font-style: italic;
}
.inbox-row__msg {
	margin: 0;
	font-size: 10px;
	color: var(--plum-200);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.inbox-row__channel {
	font-family: var(--mono);
	font-size: 9px;
	font-weight: 700;
	letter-spacing: 0.06em;
	color: var(--peach-200);
	background: rgba(255, 214, 168, 0.08);
	padding: 3px 8px;
	border-radius: 999px;
	flex-shrink: 0;
}


/* --- Warm color filter on placeholder photos so any random image
   pulls into the Sunrise palette until real assets land. ------------ */
.hero-photo-strip__img,
.diff-row__photo img {
	/* No filter needed — the real illustrations are already on-palette */
}
body .eduway-section--alumni .alumni__bg-photo img {
	filter: brightness(0.95) contrast(0.95);
}


/* --- On hover the photos lose the sepia slightly so they feel "alive" - */
/* Hover filter removed; transform animation alone provides feedback */



/* === LIGHTBOX modal + hover-grow on UI frames === */

/* Frame grows in physical size on hover, lifting above adjacent tiles
   via z-index so the user can actually READ the screenshot more clearly.
   The image itself doesn't crop further — the whole tile gets bigger. */
.ui-frame {
	cursor: zoom-in;
	overflow: hidden;
	position: relative;
	z-index: 1;
	transform-origin: center center;
	transition:
		transform 0.45s cubic-bezier(.32,.72,.22,1),
		box-shadow 0.45s cubic-bezier(.32,.72,.22,1);
	will-change: transform;
}
.ui-frame__shot {
	display: block;
}

.ui-frame:hover {
	/* Subtle lift — was scale(1.18) which overlapped neighboring tiles. */
	transform: translateY(-4px) scale(1.02);
	z-index: 5;
	box-shadow:
		0 24px 48px -16px rgba(26, 15, 31, 0.28),
		0 12px 24px -10px rgba(26, 15, 31, 0.18);
}

/* Ensure parent containers don't clip the slight lift */
body .eduway-section--how,
body .eduway-section--how .how-tiles,
body .eduway-section--how .how-tile {
	overflow: visible;
}

/* Reduced motion users don't get the scale jump */
@media (prefers-reduced-motion: reduce) {
	.ui-frame { transition: box-shadow 0.2s; }
	.ui-frame:hover { transform: none; box-shadow: var(--sh-3); }
}

/* "Click to enlarge" hint chip — appears in the top-right corner on hover */
.ui-frame::after {
	content: "Click to enlarge";
	position: absolute;
	top: 14px;
	right: 14px;
	z-index: 5;
	font-family: var(--mono);
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	font-style: italic;
	color: var(--plum-900);
	background: rgba(255, 252, 246, 0.95);
	padding: 6px 12px;
	border-radius: 999px;
	box-shadow: 0 4px 12px -4px rgba(26,15,31,0.2);
	opacity: 0;
	transform: translateY(-4px);
	transition: opacity 0.3s ease, transform 0.3s ease;
	pointer-events: none;
}
.ui-frame:hover::after,
.ui-frame:focus-visible::after {
	opacity: 1;
	transform: translateY(0);
	transition-delay: 0.15s;
}
/* Visible keyboard focus ring on the frame itself */
.ui-frame:focus-visible {
	outline: 2px solid var(--fire-500);
	outline-offset: 4px;
}
.ui-frame--dark::after {
	color: var(--peach-200);
	background: rgba(26, 15, 31, 0.92);
	border: 1px solid rgba(255, 214, 168, 0.18);
}

.modal--lightbox .modal__lightbox-stage {
	position: relative;
	z-index: 2;
	width: 100%;
	max-width: 1400px;
	max-height: 92vh;
	margin: 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 24px;
}
.modal--lightbox .modal__lightbox-img {
	display: block;
	width: auto;
	height: auto;
	max-width: 100%;
	max-height: 92vh;
	object-fit: contain;
	border-radius: var(--r-3);
	box-shadow: 0 30px 80px -20px rgba(0,0,0,0.7);
	background: var(--paper);
	animation: lightbox-rise 0.4s cubic-bezier(.32,.72,.22,1);
}
@media (max-width: 767px) {
	.modal--lightbox .modal__lightbox-stage {
		padding: 12px;
		max-height: 100vh;
	}
	.modal--lightbox .modal__lightbox-img {
		max-height: 92vh;
		border-radius: var(--r-2);
	}
	.modal--lightbox .modal__close--lightbox {
		top: 12px;
		right: 12px;
		width: 40px;
		height: 40px;
	}
}
.modal--lightbox .modal__close--lightbox {
	position: fixed;
	top: 24px;
	right: 24px;
	z-index: 10;
	width: 48px;
	height: 48px;
	background: rgba(255, 252, 246, 0.95);
	color: var(--plum-900);
	border: 1px solid var(--mist);
	font-size: 28px;
}
.modal--lightbox .modal__close--lightbox:hover {
	background: var(--fire-500);
	color: #fff;
	border-color: var(--fire-500);
}
.modal--lightbox .modal__backdrop {
	background: rgba(26,15,31,0.92);
	backdrop-filter: blur(8px);
	-webkit-backdrop-filter: blur(8px);
}
@keyframes lightbox-rise {
	from { opacity: 0; transform: translateY(20px) scale(0.96); }
	to   { opacity: 1; transform: translateY(0) scale(1); }
}



/* =========================================================================
   AUDIT FIX PASS — comprehensive UX/UI polish
   ========================================================================= */

/* (Removed: hero strip gradient bleeds — fix #6 undone) */

/* 7. Lifecycle mobile thread — vertical sage dashed line connecting dots */
@media (max-width: 1099px) {
	body .eduway-section--lifecycle .lifecycle-stops {
		position: relative;
	}
	body .eduway-section--lifecycle .lifecycle-stops::before {
		content: "";
		position: absolute;
		left: 50px;
		top: 28px;
		bottom: 28px;
		width: 2px;
		background-image: linear-gradient(180deg, var(--sage-500) 50%, transparent 50%);
		background-size: 2px 10px;
		background-repeat: repeat-y;
		opacity: 0.55;
		pointer-events: none;
	}
}
@media (min-width: 640px) and (max-width: 1099px) {
	body .eduway-section--lifecycle .lifecycle-stops::before {
		display: none;
	}
}

/* 9. Unified card hover language — single pattern across all card types */
body .lifecycle-stop,
body .integration-card,
body .feature.how-tile,
body .diff-block {
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
}

/* 12. hl-pencil mobile — thicker dash for visibility */
@media (max-width: 767px) {
	.hl-pencil { padding-bottom: 8px; }
	.hl-pencil::after {
		height: 4px;
		background-size: 11px 4px;
	}
}

/* 13. Sticky nav offset per breakpoint — handled in JS via Lenis */

/* 15. Floating CTA mobile — moved up so it doesn't block content */
@media (max-width: 767px) {
	body { padding-bottom: 80px; }
	.floating-cta {
		bottom: 16px;
		left: 50%;
		right: auto;
		transform: translateX(-50%) translateY(20px);
		width: max-content;
		max-width: calc(100vw - 32px);
	}
	.floating-cta.is-visible {
		transform: translateX(-50%) translateY(0);
	}
	.floating-cta .btn { width: auto; padding: 12px 22px; }
}

/* (Removed: per-tile transform-origin shift — fix #19 undone) */

/* 20. Final CTA arch position — calibrated for desktop visibility */
body .eduway-section--final .final-cta .megacta__arch {
	right: -8% !important;
	top: -20% !important;
	width: clamp(300px, 35vw, 500px) !important;
	opacity: 0.6 !important;
}

/* 22. Lifecycle thread alignment — dots actually sit on the line */
@media (min-width: 1100px) {
	body .eduway-section--lifecycle .lifecycle-thread {
		margin-bottom: -16px;
	}
	body .eduway-section--lifecycle .lifecycle-stop__dot {
		top: -10px;
	}
}

/* 25. Focus rings on UI frames — visible Fireflower outline on keyboard focus */
.ui-frame:focus-visible {
	outline: 3px solid var(--fire-500);
	outline-offset: 4px;
}

/* 29. Skip link — better visual on focus */
.skip-link:focus {
	background: var(--fire-500);
	color: #fff;
	padding: 12px 20px;
	font-weight: 700;
	box-shadow: var(--sh-warm);
	font-size: 15px;
}

/* 32. Scroll progress bar — bumped to 3px on mobile for visibility */
@media (max-width: 767px) {
	.scroll-progress { height: 3px; }
}

/* 35. Integration type label — lift readability */
.integration-card__type {
	font-size: 12px !important;
	letter-spacing: 0.1em !important;
}

/* 37. Footer signature line */
.eduway-footer__signature {
	color: var(--peach-200);
	font-size: 13px;
	font-weight: 500;
	letter-spacing: -0.005em;
}
.eduway-footer__signature em {
	color: var(--fire-300);
	font-style: italic;
	font-weight: 600;
}

/* 46. Hero arch ambient breathing — slow scale 1 → 1.025 → 1 over 8s */
@keyframes hero-arch-breathe {
	0%, 100% { transform: translateX(50%) scale(1); }
	50%      { transform: translateX(50%) scale(1.025); }
}
@media (max-width: 767px) and (prefers-reduced-motion: no-preference) {
	body .eduway-section--hero .hero__arch {
		animation: hero-arch-breathe 8s ease-in-out infinite;
		animation-delay: 2.5s;
	}
}

/* (Removed: lifecycle thread flow keyframe — was fighting the GSAP scroll-driven draw) */

/* 48. Differentiator number ghost — bolder when row is in focus.
   Number sits at opacity 0.65 by default and pops to full opacity + scale
   when the row scrolls into the viewport centre (.is-focused class). */
body .eduway-section--diff .diff-row__num {
	opacity: 0.65;
	transition: color var(--t2), transform var(--t2), opacity var(--t2);
}
body .eduway-section--diff .diff-row.is-focused .diff-row__num {
	opacity: 1;
	transform: scale(1.04);
	transition: color var(--t2), transform var(--t2), opacity var(--t2);
}

/* (Removed: section transitions — fix #50 undone) */

/* Custom cursor restoration — ensure it shows on UI frames + page */
@media (hover: hover) and (pointer: fine) {
	body.has-custom-cursor .ui-frame {
		cursor: none !important;
	}
}

/* 11. Accent variety — drop hl-italic on integrations */
body .eduway-section--integrations .integrations-headline em.hl-italic {
	font-style: normal;
	color: inherit;
}

/* Hover unification: ensure all cards lift same amount */
body .integration-card:hover,
body .lifecycle-stop:hover,
body .feature.how-tile:hover {
	transform: translateY(-3px);
	box-shadow: 0 8px 24px -8px rgba(255, 127, 28, 0.18);
}


/* =========================================================================
   PHONE — 4-VIEW SCROLL-SYNCED ALUMNI APP
   ========================================================================= */

body .alumni__phone .phone__image--screen {
	opacity: 0;
	transition: opacity 0.32s cubic-bezier(.4,0,.2,1);
	will-change: opacity;
}
body .alumni__phone .phone__image--screen.is-active {
	opacity: 1;
	z-index: 3;
}

@media (min-width: 1024px) and (prefers-reduced-motion: no-preference) {
	body .eduway-section--alumni .alumni__phone {
		position: sticky;
		top: 96px;
		align-self: start;
	}
}

.phone__dots {
	display: flex;
	justify-content: center;
	gap: 12px;
	margin: 18px 0 4px;
	flex-wrap: wrap;
}
.phone__dot {
	background: transparent;
	border: 0;
	padding: 6px 4px;
	cursor: pointer;
	display: inline-flex;
	flex-direction: column;
	align-items: center;
	gap: 6px;
	color: rgba(255, 214, 168, 0.55);
	font-family: var(--mono);
	font-size: 10px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	transition: color 0.25s ease, transform 0.25s ease;
}
.phone__dot::before {
	content: "";
	width: 7px;
	height: 7px;
	border-radius: 999px;
	background: rgba(255, 214, 168, 0.25);
	transition: background 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease;
}
.phone__dot:hover { color: rgba(255, 214, 168, 0.95); }
.phone__dot:hover::before { background: rgba(255, 214, 168, 0.55); }
.phone__dot.is-active { color: var(--fire-500); }
.phone__dot.is-active::before {
	background: var(--fire-500);
	transform: scale(1.4);
	box-shadow: 0 0 0 3px rgba(255, 127, 28, 0.18);
}
.phone__dot-label { white-space: nowrap; }
@media (max-width: 480px) {
	.phone__dot-label { display: none; }
	.phone__dots { gap: 14px; }
}

/* =========================================================================
   ALUMNI BENEFITS — click-to-switch buttons
   Each <li class="alumni-benefit"> now wraps a real <button> that controls
   one of the four phone screens. The <li> keeps list semantics; the button
   carries the aria-pressed + aria-controls. A small fire-orange bar on the
   left of the active row mirrors the visible phone screen so users see at a
   glance which benefit corresponds to what's on the phone.
   ========================================================================= */

/* Button reset inside the alumni benefit row */
body .eduway-section--alumni .alumni-benefit__btn {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	width: 100%;
	margin: 0;
	padding: 12px 14px;
	background: transparent;
	border: 0;
	border-radius: 14px;
	color: inherit;
	font: inherit;
	text-align: left;
	cursor: pointer;
	transition: transform 0.25s ease;
}

/* Title + body inside the button — these were <h3>/<p> before; now <span>s
   styled to look the same. Display:block for proper stacking. */
body .eduway-section--alumni .alumni-benefit__btn .alumni-benefit__title,
body .eduway-section--alumni .alumni-benefit__btn .alumni-benefit__body {
	display: block;
}

/* Hover affordance — title shifts to fire-300 + small horizontal nudge.
   No background tint. */
body .eduway-section--alumni .alumni-benefit__btn:hover {
	transform: translateX(2px);
}
body .eduway-section--alumni .alumni-benefit__btn:hover .alumni-benefit__title {
	color: var(--fire-300);
}

/* (No active highlight — the phone screen is the only feedback for which
   benefit is selected. Removed the fire bar + tinted background per request.) */

/* Focus-visible — keyboard users get a clear ring inside the dark surface */
body .eduway-section--alumni .alumni-benefit__btn:focus-visible {
	outline: 2px solid var(--fire-500);
	outline-offset: 2px;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
	body .eduway-section--alumni .alumni-benefit__btn {
		transition: none;
	}
}

/* =========================================================================
   LOGOS — full eduway wordmark (img tag) replaces the inline E + text combo
   ========================================================================= */
.eduway-nav .brand__logo {
	display: block;
	height: 24px;
	width: auto;
}
.eduway-drawer__logo {
	display: block;
	height: 32px;
	width: auto;
}
.integrations-hub__hub .integrations-hub__logo {
	display: block;
	width: 56px;
	height: 56px;
}
@media (max-width: 767px) {
	.integrations-hub__hub .integrations-hub__logo {
		width: 38px;
		height: 38px;
	}
}
/* Hide the now-orphaned wordmark span if any old pattern still emits it */
.eduway-nav .brand__text,
.integrations-hub__hub .integrations-hub__name { display: none; }

/* Footer brand logo (dark-bg variant) */
.eduway-footer__logo {
	display: block;
	height: 32px;
	width: auto;
}


/* =========================================================================
   INTEGRATIONS — HUB-AND-SPOKES CONSTELLATION
   ========================================================================= */

body .eduway-section--integrations .integrations-grid { display: none; }

.integrations-hub {
	width: 100%;
	margin: 64px auto 0;
}
.integrations-hub__inner {
	position: relative;
	width: 100%;
	max-width: 720px;
	margin: 0 auto;
	aspect-ratio: 1;
	display: grid;
	place-items: center;
}

.integrations-hub__lines {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	pointer-events: none;
	z-index: 1;
	overflow: visible;
}
.integrations-hub__line {
	fill: none;
	stroke: var(--plum-300);
	stroke-width: 1.5;
	stroke-dasharray: 2 7;
	stroke-linecap: round;
	opacity: 0.55;
	animation: integrations-flow 2.6s linear infinite;
}
.integrations-hub__line:nth-child(2) { animation-delay: -0.4s; }
.integrations-hub__line:nth-child(3) { animation-delay: -0.8s; }
.integrations-hub__line:nth-child(4) { animation-delay: -1.2s; }
.integrations-hub__line:nth-child(5) { animation-delay: -1.6s; }
.integrations-hub__line:nth-child(6) { animation-delay: -2.0s; }

@keyframes integrations-flow {
	to { stroke-dashoffset: -36; }
}
@media (prefers-reduced-motion: reduce) {
	.integrations-hub__line { animation: none; }
}

.integrations-hub__hub {
	position: relative;
	z-index: 3;
	width: 144px;
	height: 144px;
	border-radius: 999px;
	background: linear-gradient(180deg, var(--paper) 0%, var(--paper-2) 100%);
	box-shadow:
		0 0 0 1px rgba(255, 127, 28, 0.35),
		inset 0 0 0 6px var(--paper),
		0 24px 60px -16px rgba(255, 127, 28, 0.45),
		0 4px 14px rgba(26, 15, 31, 0.06);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 4px;
}
.integrations-hub__hub::before {
	content: "";
	position: absolute;
	inset: -16px;
	border-radius: 999px;
	background: radial-gradient(circle, rgba(255, 127, 28, 0.22) 0%, rgba(255, 127, 28, 0) 65%);
	z-index: -1;
	animation: hub-pulse 3.2s ease-in-out infinite;
}
.integrations-hub__pulse {
	position: absolute;
	inset: -2px;
	border-radius: 999px;
	border: 1.5px solid var(--fire-500);
	opacity: 0;
	animation: hub-ring 3.2s ease-out infinite;
	pointer-events: none;
}
.integrations-hub__name {
	font-family: var(--font);
	font-weight: 700;
	font-size: 14px;
	color: var(--plum-900);
	letter-spacing: -0.01em;
}
@keyframes hub-pulse {
	0%, 100% { transform: scale(1); opacity: 0.6; }
	50%      { transform: scale(1.18); opacity: 1; }
}
@keyframes hub-ring {
	0%   { transform: scale(1); opacity: 0.7; }
	100% { transform: scale(1.45); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
	.integrations-hub__hub::before,
	.integrations-hub__pulse { animation: none; }
}

.integrations-hub__nodes {
	position: absolute;
	inset: 0;
	margin: 0;
	padding: 0;
	list-style: none;
	pointer-events: none;
}
body .integrations-hub__nodes .integration-card {
	position: absolute;
	width: 132px;
	min-height: 0;
	padding: 14px 12px;
	pointer-events: auto;
	z-index: 2;
}
@media (min-width: 768px) {
	body .integrations-hub__nodes .integration-card {
		width: 148px;
		padding: 16px 14px;
	}
}

/* Dynamic radial layout — JS sets --node-x / --node-y on each card based on
   total node count and container size. Add or remove an .integration-card
   in the markup and everything reflows automatically. */
body .integrations-hub__nodes .integration-card {
	top: 50%;
	left: 50%;
	transform:
		translate(-50%, -50%)
		translate(var(--node-x, 0px), var(--node-y, 0px));
	transition: transform 0.25s ease, box-shadow 0.25s ease;

	/* Override the default horizontal flex (icon + name + type in a row): in
	   the radial hub each card is only ~140px wide, way too narrow for the
	   horizontal layout. Stack vertically so all the text fits. */
	flex-direction: column !important;
	align-items: flex-start !important;
	gap: 8px !important;
	padding: 14px 14px 16px !important;
	min-height: 0 !important;
	text-align: left;
	overflow: hidden;
}
body .integrations-hub__nodes .integration-card .integration-card__icon {
	width: 36px;
	height: 36px;
}
body .integrations-hub__nodes .integration-card .integration-card__name {
	font-size: 14px;
	line-height: 1.18;
	margin: 0;
	max-width: 100%;
	word-break: break-word;
}
body .integrations-hub__nodes .integration-card .integration-card__type {
	font-size: 10px;
	margin: 0;
}
body .integrations-hub__nodes .integration-card:hover {
	transform:
		translate(-50%, -50%)
		translate(var(--node-x, 0px), calc(var(--node-y, 0px) - 4px));
	box-shadow: 0 12px 32px -10px rgba(255, 127, 28, 0.28);
}

/* Tablet — keep the constellation but tighten radii and node width */
@media (min-width: 768px) and (max-width: 1023px) {
	.integrations-hub__inner { max-width: 560px; }
	body .integrations-hub__nodes .integration-card { width: 132px; }
}

/* MOBILE — collapse the constellation into a tight 2-column grid */
@media (max-width: 767px) {
	.integrations-hub { margin-top: 24px; }

	.integrations-hub__inner {
		aspect-ratio: auto;
		max-width: 100%;
		display: block;
	}
	.integrations-hub__lines { display: none; }

	/* Hub sits closer to the tile grid below so the section reads as one
	   unit instead of a hub + a gap + a grid. */
	.integrations-hub__hub {
		position: relative;
		width: 92px;
		height: 92px;
		margin: 0 auto 14px;
	}
	.integrations-hub__hub .integrations-hub__logo { width: 28px; height: 28px; }
	.integrations-hub__hub .integrations-hub__name { font-size: 11px; }

	/* Subtle vertical wisp from hub to grid — keeps the connection metaphor on mobile */
	.integrations-hub__hub::after {
		content: "";
		position: absolute;
		left: 50%;
		bottom: -14px;
		width: 1.5px;
		height: 14px;
		background: linear-gradient(180deg, var(--fire-500) 0%, transparent 100%);
		transform: translateX(-50%);
		opacity: 0.55;
	}

	.integrations-hub__nodes {
		position: relative;
		inset: auto;
		display: grid;
		grid-template-columns: 1fr 1fr;
		gap: 10px;
	}
	body .integrations-hub__nodes .integration-card {
		position: relative !important;
		width: 100% !important;
		top: auto !important;
		bottom: auto !important;
		left: auto !important;
		right: auto !important;
		transform: none !important;
		padding: 14px 12px;
		min-height: 92px;
	}
	body .integrations-hub__nodes .integration-card:hover {
		transform: translateY(-2px) !important;
	}
	body .integrations-hub__nodes .integration-card__name { font-size: 14px; }
	body .integrations-hub__nodes .integration-card__type { font-size: 10px; }
}

/* =============================================================
   RIBBON-SWEEP HERO
   Scoped under .ribbon-preview to coexist with the existing
   .ribbon (chip/pill) class earlier in this stylesheet.
   ============================================================= */
.ribbon-preview {
	position: relative;
	min-height: 100svh;
	padding: clamp(18px, 3vw, 34px);
	overflow: hidden;
	isolation: isolate;
}
/* Keep sticky-nav clearance from .eduway-section--hero. */
.eduway-section--hero.ribbon-preview { padding-top: 88px; }
@media (min-width: 1024px) {
	.eduway-section--hero.ribbon-preview { padding-top: 120px; }
}

.ribbon-preview::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -2;
	background:
		radial-gradient(circle at 78% 22%, rgba(255,127,28,0.16), transparent 36%),
		radial-gradient(circle at 18% 86%, rgba(11,179,149,0.10), transparent 40%),
		linear-gradient(180deg, var(--paper-0), var(--paper));
}
/* Hairline instrument-panel frame inset from the section edges */
.ribbon-preview::after {
	content: "";
	position: absolute;
	inset: clamp(16px, 2vw, 24px);
	border: 1px solid var(--mist);
	border-radius: var(--r-4);
	pointer-events: none;
	z-index: 0;
}

.ribbon-preview__image {
	position: absolute;
	/* Full bleed on the right half of the section — no inset, no border,
	   no shadow. The photo IS the right half of the section. */
	inset: 0 0 0 38%;
	z-index: -1;
	border-radius: 0;
	overflow: hidden;
	box-shadow: none;
}
/* No overlay on the photo. Hero.png has a transparent background, so
   the section paper shows through anywhere the asset is empty — there's
   nothing to fade *into*. The previous paper-overlay was painting a
   semi-opaque rectangle over the left edge of the image element, which
   ended visibly somewhere around the photo subject and read as a divide.
   With this gone, the transparent PNG dissolves naturally into the
   section paper and the atmospheric blotches (on the section ::after
   above) tint everything uniformly. */
.ribbon-preview__image::after {
	content: none;
	display: none;
}

/* HERO BG STACK — flatten so the left + right halves read as one surface.
   Layers from back to front:
     ::before (z: -2)  — solid --paper (no atmosphere here, no opaque
                         linear that would hide the photo)
     __image  (z: -1)  — full-bleed photo on the right half
     ::after  (z:  0)  — fire + volt radial blotches painted ACROSS the
                         entire section, on top of both the empty left
                         half AND the photo, so the same atmospheric
                         tint covers both halves uniformly. The "cut"
                         between greenish-left + white-right disappears
                         because the green/orange wash now spans both.
     content  (z:  2)  — ribbons / copy, on top of everything */
.ribbon-preview::before {
	background: var(--paper) !important;
}

.ribbon-preview::after,
body .ribbon-preview::after {
	content: "" !important;
	display: block !important;
	position: absolute !important;
	inset: 0 !important;
	z-index: 0 !important;
	pointer-events: none !important;
	border: 0 !important;
	border-radius: 0 !important;
	background:
		radial-gradient(circle at 78% 22%, rgba(255,127,28,0.18), transparent 38%),
		radial-gradient(circle at 18% 86%, rgba(11,179,149,0.12), transparent 42%) !important;
}

/* HERO TOP RHYTHM — anchor the wordmark closer to the top of the page.
   The previous desktop layout vertically centered the wordmark + ribbon
   stack inside one viewport, which pushed the eduway logo deep into
   the page on initial load. Now we top-align the inner stack and trim
   the ribbon-stage's top padding so the logo sits a comfortable
   distance below the floating nav, not in the middle of empty space. */
@media (min-width: 768px) {
	body .ribbon-preview .ribbon-preview__inner {
		align-items: start !important;
		min-height: 0 !important;
		padding-top: 0 !important;
	}
	body .ribbon-preview .ribbon-stage {
		padding: 0 !important;
	}
	body .ribbon-preview .ribbon-stack {
		padding-top: 0 !important;
		padding-bottom: 24px;
	}
	body .eduway-section--hero.ribbon-preview {
		min-height: auto;
		padding-top: clamp(72px, 6vw, 96px);
		padding-bottom: clamp(48px, 6vw, 96px);
	}
}
.ribbon-preview__image img {
	width: 100%; height: 100%;
	object-fit: cover;
	transform-origin: center;
}
.ribbon-preview__image::after {
	content: "";
	position: absolute;
	inset: 0;
	background:
		linear-gradient(90deg, var(--paper-0) 0%, rgba(250,250,247,0.86) 32%, rgba(250,250,247,0.05) 70%),
		radial-gradient(circle at 78% 22%, rgba(255,127,28,0.22), transparent 32%);
}
.ribbon-preview__image.is-visible img { animation: hero-image-breathe 18s ease-in-out infinite alternate; }

.ribbon-preview__inner {
	width: min(100%, 1380px);
	min-height: calc(100svh - clamp(36px, 6vw, 68px));
	margin-inline: auto;
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	align-items: center;
}

.ribbon-stage {
	position: relative;
	z-index: 2;
	width: min(100%, 620px);
	padding: clamp(44px, 7vw, 92px) 0 clamp(26px, 5vw, 70px);
}

.ribbon-stack {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	perspective: 900px;
	perspective-origin: 30% 50%;
	transform-style: preserve-3d;
	padding: 32px 0;
	margin: 0;
}

.ribbon-tilt {
	display: inline-block;
	transform-style: preserve-3d;
	transform-origin: 50% 50% -180px;
	transform:
		rotateY(calc(var(--mx, 0) * 18deg))
		rotateX(calc(var(--my, 0) * -14deg));
	transition: transform 700ms cubic-bezier(.16,1,.3,1);
}
.ribbon-tilt.is-active { will-change: transform; }
.ribbon-tilt + .ribbon-tilt { margin-top: 6px; }
.ribbon-tilt--logo     { margin-left: clamp(4px, 1.6vw, 22px); }
.ribbon-tilt--dropouts { margin-left: clamp(14px, 6vw, 96px); }
.ribbon-tilt--alumni   { margin-left: clamp(6px, 3vw, 48px); }

/* Scoped to override the global .ribbon (chip) rule earlier in the file.
   Signal v0.2: tighter --r-2, crisp ivory + hairline border, sharper shadow. */
.ribbon-preview .ribbon {
	--ribbon-bg: var(--paper-0);
	--ribbon-fg: var(--ink-900);
	--depth: 0px;
	--land-rotate: -1.5deg;
	--fall-rotate: -3deg;

	position: relative;
	display: inline-flex;
	align-items: center;
	width: fit-content;
	max-width: min(100%, calc(100vw - clamp(40px, 8vw, 112px)));
	padding: 0;
	gap: 0;
	border-radius: var(--r-2);
	background: transparent;
	color: var(--ribbon-fg);
	border: 0;
	box-shadow: none;
	font-family: var(--font);
	font-size: clamp(30px, 4.8vw, 70px);
	line-height: 1;
	font-weight: 700;
	font-style: normal;
	letter-spacing: -0.025em;
	text-transform: none;
	white-space: nowrap;
	transform-style: preserve-3d;
	transform: translate3d(0, -200px, -260px) rotateX(-50deg) rotateZ(var(--fall-rotate));
	opacity: 0;
	animation: ribbon-drop-3d 760ms cubic-bezier(.22,.82,.22,1) forwards;
	will-change: transform, opacity;
}

.ribbon-face {
	position: relative;
	z-index: 5;
	display: inline-flex;
	align-items: center;
	border-radius: inherit;
	padding: clamp(12px, 1.4vw, 18px) clamp(22px, 3vw, 42px) clamp(16px, 1.8vw, 26px);
	background: var(--ribbon-bg);
	border: 1px solid var(--mist);
	box-shadow: var(--sh-2);
	transform: translateZ(0);
}

.ribbon-glint-clip {
	position: absolute;
	inset: 0;
	border-radius: inherit;
	overflow: hidden;
	pointer-events: none;
	z-index: 6;
	transform: translateZ(1px);
}
.ribbon-glint-clip::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(100deg, transparent 30%, rgba(255,255,255,0.55) 50%, transparent 70%);
	opacity: 0;
	transform: translateX(-130%) skewX(-16deg);
}
.ribbon-preview .ribbon--applications .ribbon-glint-clip::after { animation: ribbon-glint 1100ms cubic-bezier(.32,.72,.22,1) 1500ms forwards; }
.ribbon-preview .ribbon--dropouts     .ribbon-glint-clip::after { animation: ribbon-glint 1100ms cubic-bezier(.32,.72,.22,1) 1700ms forwards; }
.ribbon-preview .ribbon--alumni       .ribbon-glint-clip::after { animation: ribbon-glint 1100ms cubic-bezier(.32,.72,.22,1) 1900ms forwards; }

.ribbon-preview .ribbon--logo {
	z-index: 4;
	--depth: 70px;
	--fall-rotate: -1.5deg;
	--land-rotate: 0deg;
	animation: none;
	opacity: 1;
	transform: translate3d(0, 0, var(--depth)) rotateZ(var(--land-rotate));
}
.ribbon-preview .ribbon--logo .ribbon-face {
	padding: 4px 0;
	background: transparent;
	box-shadow: none;
	border: 0;
}
.ribbon-preview .ribbon--logo .ribbon-glint-clip { display: none; }
.ribbon-preview .ribbon--logo svg {
	position: relative;
	z-index: 1;
	width: clamp(190px, 22vw, 280px);
	height: auto;
	display: block;
}
.ribbon-preview .ribbon--applications {
	z-index: 1;
	animation-delay: 0ms;
	--depth: 0px;
	--fall-rotate: -2deg;
	--land-rotate: -1.5deg;
}
/* Dropouts — solid ink, fire-300 italic key. The dramatic counter-beat. */
.ribbon-preview .ribbon--dropouts {
	--ribbon-bg: var(--ink-900);
	--ribbon-fg: var(--paper);
	z-index: 2;
	animation-delay: 130ms;
	--depth: 24px;
	--fall-rotate: 4deg;
	--land-rotate: 1.5deg;
}
.ribbon-preview .ribbon--dropouts .ribbon-face { border-color: var(--ink-700); }
/* Alumni — fire gradient, the warm payoff */
.ribbon-preview .ribbon--alumni {
	--ribbon-fg: var(--ink-900);
	z-index: 3;
	animation-delay: 260ms;
	--depth: 46px;
	--fall-rotate: -3deg;
	--land-rotate: -0.5deg;
}
.ribbon-preview .ribbon--alumni .ribbon-face {
	background: linear-gradient(135deg, var(--fire-400) 0%, var(--fire-600) 100%);
	border: 0;
	box-shadow: var(--sh-warm);
	color: var(--ink-900);
	padding-right: clamp(30px, 4vw, 58px);
	padding-bottom: clamp(18px, 2vw, 28px);
}

.ribbon-preview .ribbon-key,
.ribbon-preview .ribbon-tail { position: relative; z-index: 1; }
/* Key word — Instrument Serif italic. The new editorial moment. */
.ribbon-preview .ribbon-key {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.02em;
	font-size: 1.05em;
	padding-right: 0.08em;
	text-transform: none;
}
.ribbon-preview .ribbon-tail {
	font-style: normal;
	font-weight: 700;
	letter-spacing: -0.025em;
	text-transform: none;
}
.ribbon-preview .ribbon--dropouts .ribbon-key { color: var(--fire-300); }
.ribbon-preview .ribbon--alumni   .ribbon-key { color: var(--ink-900); }
/* Inside the ribbon, the legacy .hl-pencil sweep is suppressed — the
   Instrument Serif italic IS the editorial moment. */
.ribbon-preview .ribbon .hl-pencil { padding-bottom: 0; }
.ribbon-preview .ribbon .hl-pencil::after { display: none; }

.ribbon-copy {
	max-width: 540px;
	margin-top: clamp(24px, 4vw, 42px);
	opacity: 0;
	transform: translateY(20px);
	animation: copy-rise 600ms cubic-bezier(.32,.72,.22,1) 1200ms forwards;
	position: relative;
	z-index: 2;
}
/* Desktop-only lede legibility — paper halo backdrop + heavy text-shadow
   stack to lift the text above the breathing hero photo behind it. On
   mobile there's no image overlap (hero is single-column), so the halo
   would just look like an artifact. */
@media (min-width: 768px) {
	.ribbon-copy .lede {
		position: relative;
		text-shadow:
			0 0 8px var(--paper),
			0 0 16px var(--paper),
			0 0 24px var(--paper),
			0 0 36px var(--paper);
	}
	.ribbon-copy .lede::before {
		content: '';
		position: absolute;
		inset: -20px -56px;
		z-index: -1;
		background: radial-gradient(ellipse at center,
			var(--paper) 0%,
			rgba(250,250,247,0.85) 35%,
			rgba(250,250,247,0.45) 65%,
			transparent 100%);
		pointer-events: none;
		border-radius: 32px;
		filter: blur(6px);
	}
}
.ribbon-copy .ctas {
	margin-top: 26px;
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
}

@keyframes hero-image-breathe { to { transform: scale(1.14); } }
@keyframes ribbon-drop-3d {
	0%   { opacity: 0; transform: translate3d(0, -180px, -260px) rotateX(-50deg) rotateZ(var(--fall-rotate)); }
	60%  { opacity: 1; transform: translate3d(0, 6px, calc(var(--depth) + 14px)) rotateX(6deg) rotateZ(calc(var(--land-rotate) * 1.2)); }
	82%  { transform: translate3d(0, -2px, var(--depth)) rotateX(-1.5deg) rotateZ(var(--land-rotate)); }
	100% { opacity: 1; transform: translate3d(0, 0, var(--depth)) rotateX(0deg) rotateZ(var(--land-rotate)); }
}
@keyframes ribbon-glint {
	0%, 20% { opacity: 0; transform: translateX(-130%) skewX(-16deg); }
	44%     { opacity: 0.7; }
	100%    { opacity: 0; transform: translateX(230%) skewX(-16deg); }
}
@keyframes copy-rise { to { opacity: 1; transform: translateY(0); } }

@media (min-width: 1180px) {
	.ribbon-stage { margin-left: clamp(12px, 2vw, 34px); }
}
@media (min-width: 768px) and (max-width: 1024px) {
	.ribbon-preview .ribbon { font-size: clamp(28px, 4vw, 48px); }
}

@media (max-width: 767px) {
	.ribbon-preview { min-height: 100svh; padding: 22px 16px 26px; }
	.eduway-section--hero.ribbon-preview { padding-top: 80px; }
	.ribbon-preview::before {
		background:
			linear-gradient(180deg, rgba(255,248,240,0.94) 0%, rgba(255,248,240,0.82) 46%, rgba(255,248,240,0.68) 100%),
			radial-gradient(circle at 82% 14%, rgba(255,127,28,0.22), transparent 36%);
	}
	/* Hide hero image on mobile — paired with <picture> media query so the bytes never load. */
	.ribbon-preview__image { display: none; }
	.ribbon-preview__inner { min-height: 0; align-items: flex-start; padding-top: 16px; }
	.ribbon-stage { width: 100%; padding: 18px 0 12px; }
	.ribbon-stack { align-items: flex-start; perspective: 700px; padding: 10px 0; gap: 9px; }
	.ribbon-tilt { display: inline-block; transform: none; transition: none; width: auto; }
	.ribbon-tilt + .ribbon-tilt { margin-top: 0; }
	.ribbon-tilt--logo         { margin-left: 4px; }
	.ribbon-tilt--applications { margin-left: 14px; }
	.ribbon-tilt--dropouts     { margin-left: 32px; }
	.ribbon-tilt--alumni       { margin-left: 10px; }
	.ribbon-preview .ribbon {
		width: auto;
		max-width: calc(100vw - 32px);
		justify-content: flex-start;
		border-radius: var(--r-2);
		font-size: clamp(26px, 7.6vw, 40px);
		line-height: 1.05;
		text-align: left;
		white-space: nowrap;
		display: inline-flex;
	}
	.ribbon-face { padding: 10px 18px 13px; justify-content: flex-start; width: auto; }
	.ribbon-preview .ribbon--logo .ribbon-face { padding: 4px 0; }
	.ribbon-preview .ribbon--logo svg { width: clamp(150px, 44vw, 210px); }
	.ribbon-preview .ribbon--alumni .ribbon-face { padding: 11px 22px 14px; }
	.ribbon-preview .ribbon-key,
	.ribbon-preview .ribbon-tail { font-weight: 700; }
	.ribbon-preview .ribbon--alumni { font-size: clamp(24px, 7vw, 36px); line-height: 1.05; }
	.ribbon-copy { max-width: none; margin-top: 26px; padding-left: 4px; }
	.ribbon-copy .ctas { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; }
	.ribbon-copy .btn { min-height: 46px; padding: 12px 18px; font-size: 15px; width: 100%; justify-content: center; }
}
@media (min-width: 560px) and (max-width: 767px) {
	.ribbon-copy .ctas { flex-direction: row; }
	.ribbon-copy .btn { width: auto; }
}

@media (hover: none) and (pointer: coarse) {
	.ribbon-tilt {
		transform:
			translate3d(calc(var(--tx, 0) * 1px), calc(var(--ty, 0) * 1px), 0)
			rotate(calc(var(--rz, 0) * 1deg));
		transition: none;
	}
}

@media (max-width: 374px) {
	.ribbon-tilt--dropouts { margin-left: 22px; }
	.ribbon-tilt--applications { margin-left: 10px; }
	.ribbon-face { padding: 9px 14px 12px; }
	.ribbon-preview .ribbon--logo .ribbon-face { padding: 4px 0; }
	.ribbon-preview .ribbon--logo svg { width: clamp(140px, 44vw, 184px); }
	.ribbon-preview .ribbon { font-size: clamp(22px, 7vw, 28px); }
	.ribbon-preview .ribbon--alumni { font-size: clamp(20px, 6.4vw, 26px); }
}

@media (prefers-reduced-motion: reduce) {
	.ribbon-preview__image img,
	.ribbon-preview__image.is-visible img,
	.ribbon-tilt {
		animation: none;
		transform: none;
		transition: none;
	}
	.ribbon-preview .ribbon, .ribbon-copy {
		animation: none;
		opacity: 1;
		transform: rotateZ(var(--land-rotate));
	}
	.ribbon-copy { transform: none; }
	.ribbon-glint-clip::after { animation: none; opacity: 0; }
}


/* =========================================================================
   SIGNAL v0.2 — INTEGRATIONS + FINAL CTA REDESIGN
   These two sections are rewritten end-to-cascade so the rest of the file
   keeps its structure but both bands flow with the rest of Signal: crisp
   ivory surfaces, hairline borders, sharp geometry, mono labels, an italic
   editorial moment, dual fire+volt radial atmosphere — no curved arches,
   no blurred peach blobs, no warm-cream gradient hub.
   ========================================================================= */


/* ----------------------------------------------------------------------
   INTEGRATIONS — architectural constellation
   ---------------------------------------------------------------------- */

body .eduway-section--integrations {
	background: var(--paper);
	padding: 80px 0;
	position: relative;
}
@media (min-width: 1024px) { body .eduway-section--integrations { padding: 128px 0; } }

/* Subtle fire glow above the hub + volt glow below — same atmosphere
   pattern Signal uses on the hero and megacta. Sits behind the content. */
body .eduway-section--integrations::before {
	content: "";
	position: absolute;
	inset: 0;
	pointer-events: none;
	z-index: 0;
	background:
		radial-gradient(circle at 78% 22%, rgba(255,127,28,0.10), transparent 38%),
		radial-gradient(circle at 18% 86%, rgba(11,179,149,0.08), transparent 42%);
}
body .eduway-section--integrations > .eduway-container {
	position: relative;
	z-index: 1;
}

/* Header — matches Signal eyebrow + balanced italic h1 */
body .eduway-section--integrations .integrations-head {
	max-width: 880px !important;
	margin: 0 auto 56px !important;
	text-align: center !important;
}
@media (min-width: 1024px) {
	body .eduway-section--integrations .integrations-head { margin: 0 auto 80px !important; }
}
body .eduway-section--integrations .integrations-head .eyebrow {
	margin: 0 auto 20px !important;
	justify-content: center;
}
body .eduway-section--integrations .integrations-headline {
	font-family: var(--font);
	font-size: var(--fs-h2);
	line-height: 1.08;
	letter-spacing: -0.022em;
	font-weight: 700;
	color: var(--ink-900);
	max-width: 22ch;
	text-wrap: balance;
}
body .eduway-section--integrations .integrations-headline em.hl-italic {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.01em;
}
body .eduway-section--integrations .integrations-lede {
	margin: 0 auto !important;
	max-width: 56ch;
	text-align: center !important;
	color: var(--ink-400);
}

/* Hub container — neutral, no warm gradient, hairline-bordered stage */
body .eduway-section--integrations .integrations-hub {
	width: 100%;
	margin: 0 auto;
	max-width: 1080px;
}
body .eduway-section--integrations .integrations-hub__inner {
	position: relative;
	width: 100%;
	max-width: 720px;
	margin: 0 auto;
	aspect-ratio: 1;
	display: grid;
	place-items: center;
}

/* Connection lines — volt teal, dashed, animated. Reads as live data sync.
   Replaces sunrise's plum-300 lines for the kinetic Signal voice. */
body .eduway-section--integrations .integrations-hub__lines {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	pointer-events: none;
	z-index: 1;
	overflow: visible;
}
body .eduway-section--integrations .integrations-hub__line {
	fill: none;
	stroke: var(--volt-500);
	stroke-width: 1.5;
	stroke-dasharray: 3 7;
	stroke-linecap: round;
	opacity: 0.55;
	animation: signal-flow 2.6s linear infinite;
}
@keyframes signal-flow {
	to { stroke-dashoffset: -36; }
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-section--integrations .integrations-hub__line { animation: none; }
}

/* Hub center — ink-900 disc, fire-glow halo, hairline mist border.
   Replaces sunrise's cream gradient hub. Architectural, not organic. */
body .eduway-section--integrations .integrations-hub__hub {
	position: relative;
	z-index: 3;
	width: 132px;
	height: 132px;
	border-radius: var(--r-pill, 9999px);
	background: var(--ink-900);
	box-shadow:
		0 0 0 1px var(--mist),
		0 24px 60px -16px rgba(255, 127, 28, 0.45),
		0 4px 14px rgba(11, 8, 32, 0.18);
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 4px;
	padding: 0;
}
body .eduway-section--integrations .integrations-hub__hub::before {
	content: "";
	position: absolute;
	inset: -18px;
	border-radius: 9999px;
	background: radial-gradient(circle, rgba(255,127,28,0.30) 0%, rgba(255,127,28,0) 65%);
	z-index: -1;
	animation: hub-pulse-signal 3.2s ease-in-out infinite;
}
body .eduway-section--integrations .integrations-hub__pulse {
	position: absolute;
	inset: -2px;
	border-radius: 9999px;
	border: 1.5px solid var(--fire-500);
	opacity: 0;
	animation: hub-ring-signal 3.2s ease-out infinite;
	pointer-events: none;
}
body .eduway-section--integrations .integrations-hub__logo {
	width: 54px;
	height: 54px;
	filter: brightness(0) invert(1);  /* white logo on ink */
}
body .eduway-section--integrations .integrations-hub__name {
	font-family: var(--mono);
	font-weight: 500;
	font-size: 10px;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--volt-300);
}
@keyframes hub-pulse-signal {
	0%, 100% { transform: scale(1);    opacity: 0.55; }
	50%      { transform: scale(1.18); opacity: 1; }
}
@keyframes hub-ring-signal {
	0%   { transform: scale(1);    opacity: 0.7; }
	100% { transform: scale(1.45); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-section--integrations .integrations-hub__hub::before,
	body .eduway-section--integrations .integrations-hub__pulse { animation: none; }
}

/* Integration cards — paper-0 + hairline mist + tight --r-3.
   No more peach/butter/sage mix; the icon palette is clean fire/volt/ink. */
body .eduway-section--integrations .integrations-hub__nodes .integration-card {
	background: var(--paper-0);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	padding: 14px 14px 16px !important;
	box-shadow: var(--sh-1);
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
}
body .eduway-section--integrations .integrations-hub__nodes .integration-card:hover {
	transform:
		translate(-50%, -50%)
		translate(var(--node-x, 0px), calc(var(--node-y, 0px) - 4px));
	border-color: var(--ink-300);
	box-shadow: var(--sh-2);
}

/* Reset all icon backgrounds to a unified fire-50 + fire-700, then per-type
   subtle volt / ink variants. Square icon container, --r-2 corners. */
body .integration-card .integration-card__icon {
	width: 38px;
	height: 38px;
	border-radius: var(--r-2);
	background: var(--fire-50);
	color: var(--fire-700);
	display: grid;
	place-items: center;
	transition: transform var(--t2), background var(--t2), color var(--t2);
}
body .integration-card:hover .integration-card__icon {
	transform: rotate(-6deg) scale(1.05);
}
body .integration-card--sis .integration-card__icon {
	background: var(--volt-50);
	color: var(--volt-700);
}
body .integration-card--lms .integration-card__icon {
	background: var(--fire-50);
	color: var(--fire-700);
}
body .integration-card--erp .integration-card__icon {
	background: rgba(11,8,32,0.06);
	color: var(--ink-700);
}
body .integration-card--add .integration-card__icon {
	background: var(--fire-100);
	color: var(--fire-700);
}

body .integration-card__name {
	margin: 0 0 2px;
	font-family: var(--font);
	font-size: 14px;
	font-weight: 700;
	letter-spacing: -0.012em;
	color: var(--ink-900);
	line-height: 1.2;
}
body .integration-card__type {
	margin: 0;
	font-family: var(--mono);
	font-size: 10px !important;
	font-weight: 500;
	font-style: normal;
	letter-spacing: 0.14em !important;
	text-transform: uppercase;
	color: var(--ink-300);
}

/* "+ Your CRM" — Signal variant: dashed mist border, fire italic accent
   on the name (Instrument Serif), subtle fire-50 fill on hover. */
body .integration-card--add {
	background: var(--paper-0);
	border: 1px dashed var(--mist);
}
body .integration-card--add .integration-card__name {
	color: var(--fire-700);
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	font-size: 16px;
	letter-spacing: -0.01em;
}
body .integration-card--add .integration-card__type {
	color: var(--fire-600);
}
body .integration-card--add:hover {
	background: var(--fire-50);
	border-color: var(--fire-300);
	border-style: dashed;
}

/* Mobile collapse — keeps the existing 2-column grid logic but updates
   the hub treatment to match. */
@media (max-width: 767px) {
	body .eduway-section--integrations .integrations-hub__hub {
		width: 96px;
		height: 96px;
	}
	body .eduway-section--integrations .integrations-hub__logo {
		width: 38px;
		height: 38px;
	}
	body .eduway-section--integrations .integrations-hub__name { display: none; }
}


/* ----------------------------------------------------------------------
   FINAL CTA — Signal megacta band
   Replaces the curved arch + blurred peach blob with the v0.2 megacta:
   paper-2 surface, hairline border, fire radial top-right + volt radial
   bottom-left, italic editorial moment in the headline.
   ---------------------------------------------------------------------- */

body .eduway-section--final {
	background: var(--paper);
	padding: 80px 0 112px;
}
@media (min-width: 1024px) { body .eduway-section--final { padding: 112px 0 160px; } }

body .eduway-section--final .final-cta {
	max-width: 1180px;
	margin: 0 auto;
	background: var(--paper-2);
	border: 1px solid var(--mist);
	border-radius: var(--r-4);
	padding: 56px 28px;
	position: relative;
	overflow: hidden;
	box-shadow: var(--sh-1);
}
@media (min-width: 768px)  { body .eduway-section--final .final-cta { padding: 80px 48px; } }
@media (min-width: 1024px) { body .eduway-section--final .final-cta { padding: 112px 80px; border-radius: var(--r-5); } }

/* Replace .megacta__arch (the curved sun) with a fire radial blur in the
   top-right corner. Matches the Signal megacta pattern. */
body .eduway-section--final .final-cta .megacta__arch {
	all: unset;
	content: "";
	position: absolute;
	right: -10%;
	top: -30%;
	width: 60%;
	aspect-ratio: 1;
	background: radial-gradient(closest-side, var(--fire-300), transparent 70%);
	filter: blur(20px);
	opacity: 0.55;
	pointer-events: none;
	z-index: 1;
	display: block;
}
@media (min-width: 1024px) {
	body .eduway-section--final .final-cta .megacta__arch {
		right: -8%;
		top: -25%;
		width: 55%;
	}
}

/* Replace the peach blob (::after) with a volt radial bottom-left. */
body .eduway-section--final .final-cta::after {
	content: "";
	position: absolute;
	left: -5%;
	bottom: -25%;
	right: auto;
	top: auto;
	width: 45%;
	aspect-ratio: 1;
	background: radial-gradient(closest-side, var(--volt-300), transparent 70%);
	filter: blur(30px);
	opacity: 0.32;
	border-radius: 0;
	pointer-events: none;
	z-index: 1;
}

/* Hairline frame inset 16px from the megacta edges — the instrument-panel
   detail Signal uses on the hero. Threads the section into the rest. */
body .eduway-section--final .final-cta::before {
	content: "";
	position: absolute;
	inset: 16px;
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	pointer-events: none;
	z-index: 1;
}
@media (min-width: 1024px) {
	body .eduway-section--final .final-cta::before {
		inset: 20px;
		border-radius: var(--r-4);
	}
}

body .eduway-section--final .final-cta__inner {
	position: relative;
	z-index: 3;
	max-width: 720px;
}

body .eduway-section--final .final-cta__inner .eyebrow {
	margin: 0 0 20px;
}

body .eduway-section--final .final-cta__headline {
	font-family: var(--font);
	font-size: clamp(32px, 5.4vw, 64px);
	line-height: 1.04;
	letter-spacing: -0.028em;
	font-weight: 700;
	color: var(--ink-900);
	max-width: 18ch;
	margin: 0 0 20px !important;
	text-wrap: balance;
}
body .eduway-section--final .final-cta__headline em.hl-italic {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.01em;
}

body .eduway-section--final .final-cta__lede {
	font-size: clamp(15px, 2vw, 19px);
	line-height: 1.55;
	color: var(--ink-400);
	max-width: 56ch;
	margin: 0 0 32px !important;
}
body .eduway-section--final .final-cta__lede strong {
	color: var(--ink-900);
	font-weight: 700;
}

body .eduway-section--final .final-cta__ctas {
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
	position: relative;
	z-index: 3;
	align-items: center;
}

/* A tiny mono "[ talk to us ]" technical accent under the CTA — only on
   wider viewports — that mirrors the .hl-bracket / .mono-tag pattern from
   the Signal showcase, threading the section visually into the rest. */
@media (min-width: 768px) {
	body .eduway-section--final .final-cta__ctas::after {
		content: "20 min · no slides · real product";
		font-family: var(--mono);
		font-size: 11px;
		font-weight: 500;
		letter-spacing: 0.14em;
		text-transform: uppercase;
		color: var(--ink-300);
		margin-left: 6px;
	}
}

@media (max-width: 480px) {
	body .eduway-section--final .final-cta__ctas .btn { width: 100%; }
}


/* ----------------------------------------------------------------------
   LIFECYCLE — Signal instrument readout
   The dashed sage thread + colored phase markers are out. Replaced with
   a horizontal hairline rail (the "track"), mono [00] bracket markers
   for each phase, ink-square station dots, and a scroll-driven fire fill
   that scrubs left → right behind the rail as the user travels through
   the journey. Reads as a high-end product timeline, not a watercolor
   thread. Reuses the existing GSAP timeline by piggybacking a single
   --lifecycle-progress variable (set in the JS block below).
   ---------------------------------------------------------------------- */

body .eduway-section--lifecycle {
	background: var(--paper);
	position: relative;
	overflow: hidden;
}
/* Same fire+volt atmosphere recipe used on integrations + hero */
body .eduway-section--lifecycle::before {
	content: "";
	position: absolute;
	inset: 0;
	pointer-events: none;
	z-index: 0;
	background:
		radial-gradient(circle at 88% 18%, rgba(255,127,28,0.08), transparent 38%),
		radial-gradient(circle at 12% 90%, rgba(11,179,149,0.07), transparent 42%);
}
body .eduway-section--lifecycle > .eduway-container {
	position: relative;
	z-index: 1;
}

/* Header — italic moment */
body .eduway-section--lifecycle .lifecycle-headline em.hl-italic {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.01em;
	background: none;
	padding: 0;
	display: inline;
}

/* ─────────────────────────────────────────────────────────────────
   THE TRACK
   The dashed sunrise-sage SVG is hidden. A new horizontal rail is
   composed from .lifecycle-thread itself + two pseudo-elements.
   ───────────────────────────────────────────────────────────────── */

/* Kill the wavy SVG — it's the sunrise voice */
body .eduway-section--lifecycle .lifecycle-thread__svg { display: none !important; }

/* Reset .lifecycle-thread to be a 1px rail container */
body .eduway-section--lifecycle .lifecycle-thread {
	display: none;
	position: relative;
	max-width: 1180px;
	width: 100%;
	margin: 0 auto -10px !important;
	padding: 0 56px !important;
	background: transparent !important;
	color: inherit;
	pointer-events: none;
	z-index: 2;
	height: 56px;
	--lifecycle-progress: 0;
}
@media (min-width: 1100px) {
	body .eduway-section--lifecycle .lifecycle-thread { display: block; }
}

/* The empty rail — hairline mist running edge-to-edge */
body .eduway-section--lifecycle .lifecycle-thread::before {
	content: "";
	position: absolute;
	left: 56px;
	right: 56px;
	bottom: 18px;
	height: 1px;
	background: var(--mist);
	border-radius: 0;
}

/* The fire fill — scrubs L→R driven by --lifecycle-progress.
   Uses scaleX so the GPU handles it. The gradient ends with sunset for
   that signature warm bridge. A tiny volt-glow caps the leading edge. */
body .eduway-section--lifecycle .lifecycle-thread::after {
	content: "";
	position: absolute;
	left: 56px;
	right: 56px;
	bottom: 18px;
	height: 2px;
	transform-origin: left center;
	transform: scaleX(var(--lifecycle-progress, 0));
	background: linear-gradient(
		90deg,
		var(--fire-500) 0%,
		var(--sunset) 70%,
		var(--fire-500) 100%
	);
	box-shadow:
		0 0 0 1px rgba(255,127,28,0.10),
		0 0 12px rgba(255,127,28,0.45);
	will-change: transform;
	transition: transform 80ms linear;
}

/* ─────────────────────────────────────────────────────────────────
   STATION DOTS
   Each .lifecycle-stop__dot becomes a sharp ink-900 square sitting on
   the rail directly above its card. Volt-glow halo when its card pops
   in (the existing GSAP timeline scales each dot 0.4 → 1 staggered).
   ───────────────────────────────────────────────────────────────── */
body .eduway-section--lifecycle .lifecycle-stop__dot {
	background: var(--ink-900) !important;
	border: 1px solid var(--fire-500);
	border-radius: 2px;
	box-shadow:
		0 0 0 4px var(--paper),
		0 0 0 5px var(--mist) !important;
	width: 12px;
	height: 12px;
	position: absolute;
	top: -8px;
	left: 28px;
}
@media (min-width: 1100px) {
	body .eduway-section--lifecycle .lifecycle-stop__dot {
		top: -34px;
		left: 50%;
		transform: translateX(-50%);
		width: 14px;
		height: 14px;
	}
}
/* Per-phase color override drop — they're all ink+fire now */
body .eduway-section--lifecycle .lifecycle-stop--01 .lifecycle-stop__dot,
body .eduway-section--lifecycle .lifecycle-stop--02 .lifecycle-stop__dot,
body .eduway-section--lifecycle .lifecycle-stop--03 .lifecycle-stop__dot,
body .eduway-section--lifecycle .lifecycle-stop--04 .lifecycle-stop__dot {
	background: var(--ink-900);
}
/* Volt-300 pulsing halo — kicks in when the card lands (.is-active is
   set by the existing GSAP timeline via dot scale, but we can also use
   :hover as the always-on signal cue). */
body .eduway-section--lifecycle .lifecycle-stop:hover .lifecycle-stop__dot {
	box-shadow:
		0 0 0 4px var(--paper),
		0 0 0 5px var(--volt-300),
		0 0 16px rgba(11,179,149,0.55) !important;
	animation: lifecycle-dot-pulse 1.6s ease-in-out infinite;
}
@keyframes lifecycle-dot-pulse {
	0%, 100% { transform: translateX(-50%) scale(1); }
	50%      { transform: translateX(-50%) scale(1.18); }
}
/* Reset transform on the mobile dot which doesn't translateX */
@media (max-width: 1099px) {
	@keyframes lifecycle-dot-pulse {
		0%, 100% { transform: scale(1); }
		50%      { transform: scale(1.18); }
	}
}

/* ─────────────────────────────────────────────────────────────────
   PHASE LABELS — mono brackets [01] [02] [03] [04]
   The existing markup says "Phase 01" — we keep that text for screen
   readers and visually-rewrap it with bracket pseudo-elements.
   ───────────────────────────────────────────────────────────────── */
body .eduway-section--lifecycle .lifecycle-stop__num {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin: 0 0 16px !important;
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 700;
	font-style: normal;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	color: var(--ink-700) !important;
	background: var(--paper-2);
	padding: 4px 10px 4px 8px;
	border-radius: 4px;
	border: 1px solid var(--mist);
	width: max-content;
}
body .eduway-section--lifecycle .lifecycle-stop__num::before {
	content: "[";
	color: var(--fire-500);
	font-weight: 700;
	margin-right: 2px;
}
body .eduway-section--lifecycle .lifecycle-stop__num::after {
	content: "]";
	color: var(--fire-500);
	font-weight: 700;
	margin-left: 2px;
}

/* ─────────────────────────────────────────────────────────────────
   CARDS — unified Signal palette
   No more sage/butter/peach/fire rainbow. All four cards share the
   same paper-0 + hairline mist + tighter --r-3, with a subtle warm
   progression on the icon background only (fire-50 → fire-100 →
   fire-200/300 tinted) so the row still reads as "warming up to the
   alumni-fire payoff" without breaking the kinetic ink+fire voice.
   ───────────────────────────────────────────────────────────────── */
body .eduway-section--lifecycle .lifecycle-stop {
	background: var(--paper-0) !important;
	border: 1px solid var(--mist) !important;
	border-radius: var(--r-3) !important;
	padding: 32px 26px 30px !important;
	box-shadow: var(--sh-1);
	transition: transform var(--t2), box-shadow var(--t2), border-color var(--t2);
	overflow: hidden;
	position: relative;
}
/* Gradient sweep on hover — same diagonal recipe as Signal feature cards */
body .eduway-section--lifecycle .lifecycle-stop::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(120deg, transparent 40%, rgba(255,127,28,0.06) 50%, transparent 60%);
	transform: translateX(-100%);
	transition: transform 800ms cubic-bezier(.16,1,.3,1);
	pointer-events: none;
}
body .eduway-section--lifecycle .lifecycle-stop:hover {
	transform: translateY(-3px);
	border-color: var(--ink-300) !important;
	box-shadow: var(--sh-2) !important;
}
body .eduway-section--lifecycle .lifecycle-stop:hover::after {
	transform: translateX(100%);
}

/* Icons — square with --r-2, unified ink+fire treatment with a gentle
   warming progression across the four phases. */
body .eduway-section--lifecycle .lifecycle-stop__icon {
	width: 48px !important;
	height: 48px !important;
	border-radius: var(--r-2) !important;
	background: var(--fire-50) !important;
	color: var(--fire-700) !important;
	display: grid;
	place-items: center;
	margin-bottom: 22px;
	transition: transform var(--t2), background var(--t2), color var(--t2);
}
body .eduway-section--lifecycle .lifecycle-stop:hover .lifecycle-stop__icon {
	transform: rotate(-6deg) scale(1.05);
}
/* Subtle "warming up" — phase 01 starts cool (volt), phases 02-04 deepen
   in fire saturation. Keeps the "journey progression" idea while staying
   on Signal palette. */
body .eduway-section--lifecycle .lifecycle-stop--01 .lifecycle-stop__icon {
	background: var(--volt-50) !important;
	color: var(--volt-700) !important;
}
body .eduway-section--lifecycle .lifecycle-stop--02 .lifecycle-stop__icon {
	background: var(--fire-50) !important;
	color: var(--fire-700) !important;
}
body .eduway-section--lifecycle .lifecycle-stop--03 .lifecycle-stop__icon {
	background: var(--fire-100) !important;
	color: var(--fire-700) !important;
}
body .eduway-section--lifecycle .lifecycle-stop--04 .lifecycle-stop__icon {
	background: var(--fire-500) !important;
	color: var(--paper) !important;
	box-shadow: var(--sh-warm);
}

/* Per-phase border-color overrides removed — every card uses the same
   ink-300 hover state so the row reads as one cohesive instrument panel. */
body .eduway-section--lifecycle .lifecycle-stop--01:hover,
body .eduway-section--lifecycle .lifecycle-stop--02:hover,
body .eduway-section--lifecycle .lifecycle-stop--03:hover,
body .eduway-section--lifecycle .lifecycle-stop--04:hover {
	border-color: var(--ink-300) !important;
	box-shadow: var(--sh-2) !important;
}

/* Title + body — Signal voice */
body .eduway-section--lifecycle .lifecycle-stop__title {
	font-family: var(--font);
	color: var(--ink-900) !important;
	font-size: clamp(20px, 2.4vw, 24px) !important;
	letter-spacing: -0.018em !important;
	line-height: 1.2 !important;
	margin: 0 0 12px !important;
}
body .eduway-section--lifecycle .lifecycle-stop__body {
	color: var(--ink-400) !important;
	font-size: 14.5px !important;
	line-height: 1.6 !important;
}
body .eduway-section--lifecycle .lifecycle-stop__body .hl-quote-em {
	display: block;
	margin-top: 10px;
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	font-size: 1.08em;
	color: var(--fire-600);
	line-height: 1.35;
	letter-spacing: -0.01em;
}

/* ─────────────────────────────────────────────────────────────────
   MOBILE — hairline left rail on each card
   Under 1100px the horizontal track is hidden. Each card gets a thin
   2px fire bar on its left edge so the "instrument" voice still reads.
   ───────────────────────────────────────────────────────────────── */
@media (max-width: 1099px) {
	body .eduway-section--lifecycle .lifecycle-stop::before {
		content: "";
		position: absolute;
		left: 0;
		top: 14%;
		bottom: 14%;
		width: 2px;
		background: linear-gradient(180deg, var(--fire-500), var(--sunset));
		border-radius: 0 2px 2px 0;
		opacity: 0.55;
	}
	/* The dot doesn't make sense without a horizontal rail — promote it
	   into a bracket-style accent on the top-right of each card. */
	body .eduway-section--lifecycle .lifecycle-stop__dot {
		top: 18px;
		left: auto;
		right: 18px;
		transform: none !important;
	}
}

@media (prefers-reduced-motion: reduce) {
	body .eduway-section--lifecycle .lifecycle-thread::after { transition: none; }
	body .eduway-section--lifecycle .lifecycle-stop:hover .lifecycle-stop__dot {
		animation: none;
	}
}


/* ----------------------------------------------------------------------
   NAV — Signal v0.2 sticky bar
   The pill + wavy hand-drawn underline + warm-cream fill belongs to
   Sunrise. Signal wants a clean architectural bar: --r-3 corners,
   crisp paper-0 fill behind a backdrop blur, hairline mist border,
   sharp fire-500 underline that wipes left → right on hover/active.
   The hamburger drops its fire pill for a square ghost button to
   match the rest of the kinetic-editorial voice.
   ---------------------------------------------------------------------- */

body .eduway-nav {
	position: fixed;
	top: 16px;
	left: 50%;
	transform: translateX(-50%);
	z-index: 100;
	display: flex;
	align-items: center;
	gap: 4px;
	padding: 8px;
	background: rgba(255, 255, 255, 0.78);
	border: 1px solid var(--mist);
	border-radius: var(--r-3);
	box-shadow: var(--sh-1);
	backdrop-filter: blur(12px) saturate(140%);
	-webkit-backdrop-filter: blur(12px) saturate(140%);
	max-width: calc(100vw - 24px);
	overflow: visible;
}

body .eduway-nav .brand {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 4px 10px;
	flex-shrink: 0;
}
body .eduway-nav .brand img { height: 22px; width: auto; }

body .eduway-nav .links {
	display: flex;
	align-items: center;
	gap: 0;
}

/* Links — mono caps, ink-700 default, sharp fire-500 underline that
   wipes in from the left on hover/active. Same recipe as the Signal
   showcase navbar (.navbar .links a::after). */
body .eduway-nav .links a {
	position: relative;
	padding: 8px 14px;
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 500;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ink-400);
	border-radius: var(--r-2);
	transition: color var(--t1), background var(--t1);
	min-height: 36px;
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
	overflow: visible;
}
body .eduway-nav .links a:hover {
	color: var(--ink-900);
	background: transparent;
}

/* Reset the wavy SVG underline and replace with the Signal wipe.
   Keeping ::after means the existing scroll-spy `is-active` class still
   reveals the underline — we just changed what "underline" looks like. */
body .eduway-nav .links a::after {
	content: "";
	position: absolute;
	left: 14px;
	right: 14px;
	bottom: 4px;
	height: 2px;
	background: var(--fire-500);
	background-image: none !important;
	border-radius: 0;
	transform: scaleX(0);
	transform-origin: left center;
	opacity: 0;
	transition: transform var(--t2), opacity var(--t1);
}
body .eduway-nav .links a:hover::after,
body .eduway-nav .links a.is-active::after {
	transform: scaleX(1);
	opacity: 1;
}
body .eduway-nav .links a.is-active {
	color: var(--ink-900);
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-nav .links a::after { transition: none; }
}

/* CTA — small fire button anchored to the right of the bar */
body .eduway-nav .cta {
	margin-left: 6px;
}

/* HAMBURGER — square ghost button, --r-2 corners, ink stroke. The fire
   pill + warm shadow is dropped — Signal doesn't ride on cream warmth. */
body .eduway-nav .hamburger {
	width: 40px !important;
	height: 40px !important;
	border-radius: var(--r-2) !important;
	background: transparent !important;
	color: var(--ink-900) !important;
	border: 1px solid var(--mist) !important;
	box-shadow: none !important;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	flex-shrink: 0;
	padding: 0;
	transition: background var(--t1), border-color var(--t1), transform var(--t1);
}
body .eduway-nav .hamburger:hover,
body .eduway-nav .hamburger:active {
	background: var(--paper-2) !important;
	border-color: var(--ink-900) !important;
	transform: none !important;
}
body .eduway-nav .hamburger svg {
	width: 18px;
	height: 18px;
	stroke: currentColor;
}

@media (max-width: 767px) {
	body .eduway-nav { padding: 6px; gap: 6px; }
	body .eduway-nav .links { display: none; }
	body .eduway-nav .cta   { display: none; }
	body .eduway-nav .hamburger { display: inline-flex !important; }
	/* When brand is hidden (hero in view), zero the flex gap so the empty
	   collapsed brand doesn't add a phantom 6px to the left side, and tighten
	   padding so the hamburger sits perfectly centered in the pill. */
	body .eduway-nav:not(.is-revealed) {
		padding: 4px;
		gap: 0;
	}
	body .eduway-nav:not(.is-revealed) .brand {
		display: none;
	}
}
@media (max-width: 419px) {
	body .eduway-nav .brand__text { display: none; }
}
@media (min-width: 768px) {
	body .eduway-nav .hamburger { display: none !important; }
}


/* ----------------------------------------------------------------------
   MOBILE DRAWER — Signal voice
   Drops the giant plum-bold-700 list for a clean stacked menu: mono
   caps eyebrow at the top, ink-900 link text, sharp fire-500 wipe
   under the active item. Close button is a square --r-2 ghost.
   ---------------------------------------------------------------------- */

body .eduway-drawer {
	position: fixed;
	inset: 0;
	background: var(--paper);
	z-index: 200;
	padding: 80px 24px 40px;
	overflow-y: auto;
	transform: translateY(-100%);
	transition: transform var(--t2);
}
/* Subtle dot-grid floor — same architectural texture the body uses */
body .eduway-drawer::before {
	content: "";
	position: absolute;
	inset: 0;
	pointer-events: none;
	z-index: 0;
	opacity: 0.4;
	background-image: radial-gradient(rgba(11,8,32,0.08) 1px, transparent 1px);
	background-size: 24px 24px;
	mask-image: linear-gradient(180deg, black 0%, black 70%, transparent 100%);
}
body .eduway-drawer > * { position: relative; z-index: 1; }
body .eduway-drawer[aria-hidden="false"] { transform: translateY(0); }

body .eduway-drawer__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	margin-bottom: 32px;
	padding-bottom: 20px;
	border-bottom: 1px solid var(--mist);
}
body .eduway-drawer__brand img { height: 24px; width: auto; }

body .eduway-drawer__close {
	width: 44px !important;
	height: 44px !important;
	border-radius: var(--r-2) !important;
	border: 1px solid var(--mist) !important;
	background: transparent !important;
	color: var(--ink-900) !important;
	cursor: pointer;
	display: grid;
	place-items: center;
	transition: background var(--t1), border-color var(--t1);
}
body .eduway-drawer__close:hover {
	background: var(--paper-2) !important;
	border-color: var(--ink-900) !important;
}

body .eduway-drawer ul {
	list-style: none;
	margin: 0;
	padding: 0;
	border-top: none;
}
body .eduway-drawer li {
	border-bottom: 1px solid var(--mist);
}
body .eduway-drawer li + li { margin-top: 0; }

body .eduway-drawer a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	font-family: var(--font);
	font-size: clamp(22px, 4.4vw, 32px);
	font-weight: 700;
	letter-spacing: -0.02em;
	color: var(--ink-900);
	padding: 18px 0;
	transition: color var(--t1), padding var(--t2);
	position: relative;
}
body .eduway-drawer a::after {
	content: "→";
	font-family: var(--mono);
	font-size: 0.75em;
	color: var(--fire-500);
	font-weight: 400;
	transition: transform var(--t1);
}
body .eduway-drawer a:hover {
	color: var(--fire-600);
	padding-left: 8px;
}
body .eduway-drawer a:hover::after {
	transform: translateX(4px);
}

body .eduway-drawer__cta {
	margin-top: 32px;
	padding-top: 24px;
	border-top: 1px solid var(--mist);
}


/* ─────────────────────────────────────────────────────────────────
   PINNED LIFECYCLE — desktop (≥1100px) layout for the GSAP scrub-pin
   When .is-pinned is set by the JS the section locks to the viewport
   while the rail scrubs and the cards animate in. We need:
     · the section to fit in exactly one viewport (no clipping)
     · the content to vertically center inside it
     · the standard 144px padding override to step out of the way
   The class is only applied at desktop with no reduced-motion, which
   matches the matchMedia breakpoint that creates the pin in the JS.
   ───────────────────────────────────────────────────────────────── */
@media (min-width: 1100px) {
	body .eduway-section--lifecycle.is-pinned {
		min-height: 100vh;
		display: flex;
		flex-direction: column;
		justify-content: center;
		padding-top: 64px !important;
		padding-bottom: 64px !important;
	}
	body .eduway-section--lifecycle.is-pinned > .eduway-container {
		display: flex;
		flex-direction: column;
		justify-content: center;
		gap: 8px;
	}
	/* Tighten header margin so everything fits comfortably above the rail */
	body .eduway-section--lifecycle.is-pinned .lifecycle-head {
		margin: 0 auto 32px !important;
	}
	body .eduway-section--lifecycle.is-pinned .lifecycle-thread {
		margin: 0 auto -10px !important;
	}
}


/* ----------------------------------------------------------------------
   DIFFERENTIATOR — three-row editorial with alternating photo column
   Photos are transparent PNGs, so the container has no border / no
   background / no overlay — the asset paints itself on the section.
   Layout: text gets first refusal on horizontal space; photo column
   sizes itself within a clamp so it can never squeeze the body copy
   into a wrap. Rows alternate 01 photo right · 02 photo left · 03 right.
   ---------------------------------------------------------------------- */

/* All three rows have a photo column on web. We use minmax(0, ...) on the
   text column so it can never shrink below 0 (its only source of "tight"
   wrapping was the photo column being too greedy on tablet widths). */
@media (min-width: 768px) {
	body .eduway-section--diff .diff-row.diff-row--with-photo {
		grid-template-columns:
			minmax(160px, 200px)
			minmax(0, 1fr)
			clamp(180px, 22vw, 240px) !important;
		gap: clamp(24px, 3vw, 40px) !important;
		align-items: center !important;
	}
}
@media (min-width: 1100px) {
	body .eduway-section--diff .diff-row.diff-row--with-photo {
		grid-template-columns:
			240px
			minmax(0, 1fr)
			clamp(240px, 24vw, 320px) !important;
		gap: clamp(40px, 4vw, 56px) !important;
	}
}

/* Reverse modifier: flip the columns so the photo sits on the left.
   Source order stays for accessibility — grid-column placement swaps. */
@media (min-width: 768px) {
	body .eduway-section--diff .diff-row.diff-row--reverse {
		grid-template-columns:
			clamp(180px, 22vw, 240px)
			minmax(0, 1fr)
			minmax(160px, 200px) !important;
	}
	body .eduway-section--diff .diff-row.diff-row--reverse .diff-row__photo {
		grid-column: 1;
		grid-row: 1;
	}
	body .eduway-section--diff .diff-row.diff-row--reverse .diff-row__num {
		grid-column: 3;
		grid-row: 1;
		text-align: left !important;
	}
	body .eduway-section--diff .diff-row.diff-row--reverse .diff-row__content {
		grid-column: 2;
		grid-row: 1;
	}
}
@media (min-width: 1100px) {
	body .eduway-section--diff .diff-row.diff-row--reverse {
		grid-template-columns:
			clamp(240px, 24vw, 320px)
			minmax(0, 1fr)
			240px !important;
	}
}

/* Photo container — transparent assets sit cleanly on the section's paper.
   No border, no shadow, no overlay. Just a contain-fit canvas that scales
   nicely between breakpoints. */
body .eduway-section--diff .diff-row__photo {
	margin-top: 16px;
	border-radius: 0;
	overflow: visible;
	box-shadow: none;
	border: 0;
	background: transparent;
	aspect-ratio: 1 / 1;
	position: relative;
	transition: transform var(--t2);
}
@media (min-width: 768px) {
	body .eduway-section--diff .diff-row__photo {
		margin-top: 0;
		aspect-ratio: 1 / 1;
		min-height: 0;
		align-self: center;
	}
}
body .eduway-section--diff .diff-row__photo img {
	width: 100%;
	height: 100%;
	object-fit: contain;
	object-position: center;
	display: block;
	background: transparent;
	transition: transform var(--t3);
}
/* Kill the dark vignette overlay — the assets are transparent, an overlay
   would just paint a ghost rectangle around them. */
body .eduway-section--diff .diff-row__photo::after { content: none !important; }

body .eduway-section--diff .diff-row--with-photo.is-focused .diff-row__photo img {
	transform: scale(1.03);
}

/* Mobile — photos stack below the content. Wider aspect so they read
   well at narrow widths. No frame, no overlay. */
@media (max-width: 767px) {
	body .eduway-section--diff .diff-row__photo {
		margin-top: 20px;
		aspect-ratio: 16 / 10;
	}
}


/* ----------------------------------------------------------------------
   ALUMNI BACKGROUND PHOTO
   Keep the original full-bleed faded photo treatment — Alumni.png is
   the new asset, but it sits behind everything just like the previous
   image did, with the orange arch + blob as atmosphere on top.
   ---------------------------------------------------------------------- */
/* (intentionally left as the original .alumni__bg-photo styles — no
    overrides needed here. The src swap to Alumni.png is in the markup.) */


/* ----------------------------------------------------------------------
   MOBILE HERO — drop the frame, tighten the stack
   On narrow viewports the inset hairline frame around the whole hero
   reads as a random rectangle, not an "instrument panel". The 100svh
   centering also pushes the wordmark + ribbon stack into the middle of
   a sea of empty paper. Both belong to the desktop layout only — on
   mobile we want the content to start right under the floating nav and
   flow naturally to the CTAs.
   ---------------------------------------------------------------------- */
@media (max-width: 767px) {
	/* Kill the inset instrument-panel frame */
	body .ribbon-preview::after {
		content: none !important;
		display: none !important;
	}

	/* Refresh the atmosphere — match the Signal palette (volt + fire)
	   instead of the inherited warm-cream gradient that's still bleeding
	   through from an earlier override. */
	body .ribbon-preview::before {
		background:
			radial-gradient(circle at 82% 14%, rgba(255,127,28,0.18), transparent 38%),
			radial-gradient(circle at 14% 88%, rgba(11,179,149,0.10), transparent 42%),
			linear-gradient(180deg, var(--paper-0), var(--paper)) !important;
	}

	/* Section padding — anchor the content right below the floating nav.
	   The 80px top clears the nav comfortably; bottom stays loose. */
	body .eduway-section--hero.ribbon-preview {
		padding: 80px 16px 32px !important;
		min-height: 0 !important;
	}

	/* Inner stack — let it grow with content instead of stretching to a
	   full viewport. align-items: flex-start so everything starts at the
	   top of the stage right where the user enters the page. */
	body .ribbon-preview .ribbon-preview__inner {
		min-height: 0 !important;
		align-items: flex-start !important;
		padding-top: 0 !important;
	}

	/* Ribbon stage — kill the extra top padding that was pushing the
	   wordmark down on small screens. */
	body .ribbon-preview .ribbon-stage {
		padding: 0 !important;
	}

	/* Ribbon stack — tighten gaps between logo and the three message
	   ribbons so they read as one tight composition. */
	body .ribbon-preview .ribbon-stack {
		padding: 0 !important;
		gap: 8px;
		margin-bottom: 18px;
	}
	/* The wordmark sits at the very top with breathing room before the
	   first message ribbon — but not the giant empty zone the centered
	   layout was producing. */
	body .ribbon-preview .ribbon-tilt--logo {
		margin-bottom: 12px;
	}

	/* Ribbon copy — pull it closer to the stack and trim the lede width
	   so it doesn't crowd the edge. */
	body .ribbon-preview .ribbon-copy {
		margin-top: 18px !important;
		padding-left: 0 !important;
	}
	body .ribbon-preview .ribbon-copy .lede {
		font-size: clamp(15px, 4.2vw, 17px);
		line-height: 1.55;
	}
	body .ribbon-preview .ribbon-copy .ctas {
		margin-top: 20px !important;
		gap: 10px;
	}

	/* Hero scroll cue — keep it close to the CTAs, not floating in space. */
	body .ribbon-preview .hero__scroll-cue {
		margin-top: 24px;
	}
}


/* ----------------------------------------------------------------------
   NAV BRAND — hide while hero is in view, reveal on scroll past
   The eduway wordmark is already the dominant element of the hero (the
   first ribbon in the stack). Showing it again in the floating nav is
   redundant. JS toggles `.is-revealed` on the nav when the hero leaves
   the viewport — until then, the brand fades + scales out and the nav
   is a clean links + CTA pill.
   ---------------------------------------------------------------------- */
body .eduway-nav .brand {
	opacity: 0;
	transform: translateX(-6px) scale(0.96);
	transform-origin: left center;
	pointer-events: none;
	transition: opacity 320ms cubic-bezier(.32,.72,.22,1),
	            transform 320ms cubic-bezier(.32,.72,.22,1);
	max-width: 0;
	overflow: hidden;
	padding-left: 0;
	padding-right: 0;
	margin-right: 0;
}
body .eduway-nav.is-revealed .brand {
	opacity: 1;
	transform: translateX(0) scale(1);
	pointer-events: auto;
	max-width: 200px;
	padding-left: 10px;
	padding-right: 10px;
	margin-right: 4px;
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-nav .brand { transition: none; }
}


/* ----------------------------------------------------------------------
   SUNRISE-RELIC HEADLINE TREATMENTS — replace with Signal v0.2 voice
   These were leftover sunrise sage-dashed lines that escaped the earlier
   pass. Now they use Signal's display-italic moment instead.
   ---------------------------------------------------------------------- */

/* Lifecycle headline italic — was sage dashed underline. Now pure
   Instrument Serif italic in fire-600, no background-image trickery. */
body .eduway-section--lifecycle .lifecycle-headline .hl-italic {
	background-image: none !important;
	background: none !important;
	padding-bottom: 0 !important;
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-600);
	letter-spacing: -0.01em;
	display: inline;
}

/* Mobile lifecycle dashed-thread connector between cards — drop it.
   Each card in the new Signal redesign carries its own fire bar on the
   left edge; the dashed sage thread that ran behind them was sunrise
   leftover that no longer fits the architectural language. */
body .eduway-section--lifecycle .lifecycle-stops::before {
	display: none !important;
	content: none !important;
}


/* ----------------------------------------------------------------------
   STAT-LABEL HIGHLIGHTS
   Two different treatments so each section reads cleanly:

   PROBLEM — fire-500 → sunset gradient sweep (`.hl-sweep`). Bold
   "look at this" highlight against the ink-400 label color. Same
   recipe as the lifecycle thread, animated in via --pencil-fill.

   OUTCOMES — semibold text + soft fire-50 background pill
   (`.outcomes-mark`). Same body font so it reads naturally without
   pulling the eye. The pill background scales in from the left on
   scroll via a `::before` pseudo-element with `scaleX(0→1)`.
   Triggered by the GSAP block below toggling `.is-in`.
   ---------------------------------------------------------------------- */

/* Problem section sweep — sized to sit cleanly over the label text */
body .eduway-section--problem .problem-stat__label .hl-sweep {
	font-weight: 600;
	color: var(--ink-900);
	white-space: nowrap;
}
body .eduway-section--problem .problem-stat__label .hl-sweep::after {
	height: 0.22em;
	bottom: -0.02em;
	border-radius: 1px;
	box-shadow: 0 0 12px rgba(255,127,28,0.35);
}

/* Outcomes tint-pill mark — semibold text with a soft fire-50
   background pill that scales in from the left on scroll.
   Same body font (Plus Jakarta Sans) so it reads naturally. */
body .eduway-section--outcomes .outcomes-stat__label .outcomes-mark {
	font-weight: 600;
	color: var(--ink-900);
	position: relative;
	display: inline;
	padding: 1px 7px 2px;
	border-radius: 4px;
	white-space: nowrap;
	/* Pill bg drawn via pseudo so we can animate scaleX */
}
body .eduway-section--outcomes .outcomes-stat__label .outcomes-mark::before {
	content: '';
	position: absolute;
	inset: 0;
	border-radius: 4px;
	background: var(--volt-100);
	transform-origin: left center;
	transform: scaleX(0);
	transition: transform 500ms cubic-bezier(.32,.72,.22,1);
	z-index: -1;
}
body .eduway-section--outcomes .outcomes-stat__label .outcomes-mark.is-in::before {
	transform: scaleX(1);
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-section--outcomes .outcomes-stat__label .outcomes-mark::before {
		transform: scaleX(1); transition: none;
	}
}


/* ----------------------------------------------------------------------
   LIFECYCLE CARDS v2 — compact, icon next to title, no tilt
   Phase numbers are removed in markup. Icon + title now live in one
   flex row at the top of each card. Bodies take up less vertical space.
   The hover-tilt rotation on the icon is disabled (still keeps a soft
   color shift on hover for affordance).
   ---------------------------------------------------------------------- */

/* Tighter card padding so the cards feel architectural rather than
   a tall block of whitespace. */
body .eduway-section--lifecycle .lifecycle-stop {
	padding: 22px 22px 24px !important;
}
@media (min-width: 768px) {
	body .eduway-section--lifecycle .lifecycle-stop {
		padding: 24px 22px 26px !important;
	}
}
@media (min-width: 1100px) {
	body .eduway-section--lifecycle .lifecycle-stop {
		padding: 26px 22px 28px !important;
	}
}

/* New head row — icon + title side by side, vertically centered */
body .eduway-section--lifecycle .lifecycle-stop__head {
	display: flex;
	align-items: center;
	gap: 14px;
	margin-bottom: 14px;
}

/* Icon container — keep --r-2 square, drop the bottom margin and
   stop the rotate-on-hover. */
body .eduway-section--lifecycle .lifecycle-stop__icon {
	width: 40px !important;
	height: 40px !important;
	border-radius: var(--r-2) !important;
	margin-bottom: 0 !important;
	flex-shrink: 0;
	display: grid;
	place-items: center;
	transition: background var(--t2), color var(--t2);
}
/* Override the previous rotate(-6deg) scale(1.05) on hover — user
   asked for no tilt. Keep an instant color/bg shift for affordance. */
body .eduway-section--lifecycle .lifecycle-stop:hover .lifecycle-stop__icon {
	transform: none !important;
}

/* Title — sit on the same baseline as the icon. Bumped tracking down
   slightly so it reads as a row label. */
body .eduway-section--lifecycle .lifecycle-stop__head .lifecycle-stop__title {
	margin: 0 !important;
	font-size: clamp(18px, 2.1vw, 21px) !important;
	letter-spacing: -0.014em !important;
	line-height: 1.2 !important;
	flex: 1;
	min-width: 0;
}

/* ----------------------------------------------------------------------
   HERO SCROLL CUE — Signal v0.2 voice
   Replaces the cream Sunrise pill with an instrument-grade indicator:
   a vertical hairline track with a fire dot traveling down, and a
   mono-caps "SCROLL" label. No background, no bounce, no chrome.
   ---------------------------------------------------------------------- */
body .hero__scroll-cue.hero__scroll-cue--signal {
	display: none;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 10px;
	margin: 32px auto 0 !important;
	padding: 0 !important;
	background: transparent !important;
	border: 0 !important;
	border-radius: 0 !important;
	width: max-content;
	color: var(--ink-400);
	text-decoration: none;
	transition: color 220ms cubic-bezier(.32,.72,.22,1);
}
body .hero__scroll-cue.hero__scroll-cue--signal:hover {
	background: transparent !important;
	transform: none !important;
	color: var(--ink-900);
}
body .hero__scroll-cue--signal .hero__scroll-cue-label {
	font-family: var(--mono);
	font-size: 10px;
	font-weight: 600;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	font-style: normal;
	color: inherit;
}
body .hero__scroll-cue--signal .hero__scroll-cue-track {
	position: relative;
	display: block;
	width: 3px;
	height: 40px;
	background: var(--mist);
	border-radius: 3px;
	overflow: hidden;
}
body .hero__scroll-cue--signal .hero__scroll-cue-dot {
	position: absolute;
	left: 50%;
	top: 0;
	width: 9px;
	height: 9px;
	border-radius: 50%;
	background: var(--fire-500);
	transform: translate(-50%, -100%);
	box-shadow: 0 0 10px rgba(255,127,28,0.6);
	animation: hero-cue-travel 1.8s cubic-bezier(.55,.05,.55,.95) infinite;
}
@keyframes hero-cue-travel {
	0%   { transform: translate(-50%, -100%); opacity: 0; }
	15%  { opacity: 1; }
	85%  { opacity: 1; }
	100% { transform: translate(-50%, 40px); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
	body .hero__scroll-cue--signal .hero__scroll-cue-dot { animation: none; opacity: 1; transform: translate(-50%, 14px); }
}
@media (max-width: 767px) {
	/* Center the cue under the CTAs by switching the parent .ribbon-copy
	   into a flex column and aligning the cue to center. The cue itself
	   uses display: flex (block-level) so margin: auto centers it. */
	body .ribbon-preview .ribbon-copy {
		display: flex;
		flex-direction: column;
		align-items: stretch;
	}
	body .hero__scroll-cue.hero__scroll-cue--signal {
		display: flex;
		align-self: center;
	}
}


/* The existing mobile ribbon motion lives in JS at the bottom of this file.
   It writes --tx, --ty, --rz on each ribbon, combining both ambient float
   AND scroll-driven offsets. The CSS that reads those vars is in the
   `(hover: none) and (pointer: coarse)` block earlier in this stylesheet.
   We don't add a separate scroll-only override here — that would clobber
   the float animation. Stronger scroll values are configured in JS instead. */

/* ----------------------------------------------------------------------
   ALUMNI APP — compact desktop + sticky-phone scroll-spy on mobile
   Desktop: trim padding so the spotlight fits one viewport.
   Mobile: reorder so head is on top, phone sticks while user scrolls
   benefits, and the phone screen swaps as each benefit enters view.
   ---------------------------------------------------------------------- */

/* DESKTOP — tighten the section so it fits a single viewport */
@media (min-width: 1024px) {
	body .eduway-section--alumni {
		padding: 88px 0 !important;
	}
	body .eduway-section--alumni .alumni__grid {
		gap: 64px !important;
		grid-template-columns: 340px 1fr !important;
	}
	body .eduway-section--alumni .alumni-headline {
		font-size: clamp(28px, 3.6vw, 44px) !important;
		margin-bottom: 16px !important;
	}
	body .eduway-section--alumni .alumni-lede {
		margin-bottom: 24px !important;
	}
	body .eduway-section--alumni .alumni-benefits {
		gap: 18px 28px !important;
		margin-bottom: 20px !important;
	}
	body .eduway-section--alumni .alumni-close {
		margin-top: 20px !important;
		padding-top: 18px;
	}
}
@media (min-width: 768px) and (max-width: 1023px) {
	body .eduway-section--alumni {
		padding: 72px 0 !important;
	}
}

/* MOBILE — scroll-locked sequence: head, phone, benefit, close.
   Layout rules in normal mode AND pinned mode below.
   `display: contents` on .alumni__content lifts its children into the
   parent flex container so we can interleave them with the phone. */
@media (max-width: 767px) {
	body .eduway-section--alumni {
		padding: 56px 0 !important;
	}
	body .eduway-section--alumni .alumni__grid {
		display: flex !important;
		flex-direction: column;
		gap: 20px !important;
	}
	body .eduway-section--alumni .alumni__content {
		display: contents;
	}
	body .eduway-section--alumni .alumni-head {
		order: 1;
		width: 100%;
		margin: 0 !important;
	}
	body .eduway-section--alumni .alumni-headline {
		font-size: clamp(26px, 6.8vw, 34px) !important;
		margin-bottom: 10px !important;
		max-width: 22ch;
	}
	body .eduway-section--alumni .alumni-lede {
		margin: 0 !important;
		font-size: 14px !important;
		line-height: 1.5;
	}
	body .eduway-section--alumni .alumni__phone {
		order: 2;
		align-self: center;
		max-width: 200px;
		margin: 0 auto !important;
	}
	body .eduway-section--alumni .alumni-benefits {
		order: 3;
		grid-template-columns: 1fr !important;
		gap: 16px !important;
		margin: 0 !important;
	}
	body .eduway-section--alumni .alumni-benefit {
		padding-top: 14px;
	}
	body .eduway-section--alumni .alumni-benefit__title {
		font-size: 15.5px !important;
	}
	body .eduway-section--alumni .alumni-benefit__body {
		font-size: 13.5px !important;
		line-height: 1.5 !important;
	}
	body .eduway-section--alumni .alumni-close {
		order: 4;
		margin: 4px 0 0 !important;
		padding-top: 14px;
		font-size: 13px;
	}
	/* Hide the dot selector — the scroll-locked pin drives screen swaps. */
	body .eduway-section--alumni .phone__dots {
		display: none !important;
	}

	/* PINNED STATE — set by GSAP at the bottom of the file when the
	   section locks to the top of the viewport. The benefits collapse
	   into a single absolutely-positioned slot, so only one benefit
	   shows at a time, fading in/out as scroll progresses. */
	body .eduway-section--alumni.is-pinned-alumni {
		min-height: 100svh;
		display: flex;
		align-items: flex-start;
		padding: 84px 0 32px !important;
	}
	/* Hide the floating Talk-to-us pill while pinned — it would otherwise
	   sit over the benefit text and shrink the readable area. */
	body:has(.eduway-section--alumni.is-pinned-alumni.is-active-pin) .floating-cta {
		opacity: 0 !important;
		pointer-events: none !important;
		transform: translateX(-50%) translateY(20px) !important;
	}

	/* Force the benefits container itself to span the full grid width.
	   Without this, the inner buttons sized to content and the text wrapped
	   one word per line in the right half of the viewport. */
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefits {
		width: 100% !important;
		max-width: 420px;
		margin-left: auto !important;
		margin-right: auto !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit {
		left: 0 !important;
		right: 0 !important;
		width: 100%;
	}

	/* PINNED BENEFIT LAYOUT — icon centred above the text, text takes the
	   full width of the container and is centre-aligned. align-items: stretch
	   (default) lets the copy block fill horizontally; the icon centres
	   itself with align-self: center. */
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__btn {
		display: flex;
		flex-direction: column;
		align-items: stretch;
		gap: 10px;
		padding: 0 8px !important;
		text-align: center;
		width: 100%;
		box-sizing: border-box;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__icon {
		align-self: center;
		width: 36px;
		height: 36px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__icon svg {
		width: 18px;
		height: 18px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__copy {
		display: block;
		width: 100%;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__title {
		display: block;
		font-size: 16px !important;
		text-align: center;
		margin-bottom: 4px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__body {
		display: block;
		font-size: 13.5px !important;
		line-height: 1.5 !important;
		text-align: center;
		margin: 0 auto;
		max-width: 36ch;
	}
}

/* Hide the decorative orange arch on the alumni section — it competes with
   the lifecycle/sections aesthetic and reads as a leftover sunrise shape. */
body .eduway-section--alumni .alumni__bg-arch {
	display: none !important;
}

/* SHORT-VIEWPORT RESCUE — iPhone SE (667px), iPhone X (812px), small Androids.
   At full size the pinned layout (84px top + head + 180px-wide phone + benefit
   slot + 32px bottom) can total >700px, clipping the bottom benefit body on
   short screens. These scale every element down based on viewport HEIGHT so
   the entire sequence always fits one viewport without cropping. */

/* ≤720px tall (covers iPhone X / 13 mini / pre-Pro) */
@media (max-width: 767px) and (max-height: 760px) {
	body .eduway-section--alumni.is-pinned-alumni {
		padding: 72px 0 24px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni__grid {
		gap: 12px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-headline {
		font-size: clamp(20px, 5vw, 24px) !important;
		margin-bottom: 6px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-lede {
		font-size: 12.5px !important;
		line-height: 1.45 !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni__phone {
		max-width: 150px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefits {
		min-height: 110px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__title {
		font-size: 14.5px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__body {
		font-size: 12.5px !important;
	}
}

/* ≤680px tall (iPhone SE 1st/2nd/3rd gen, very small Androids) */
@media (max-width: 767px) and (max-height: 680px) {
	body .eduway-section--alumni.is-pinned-alumni {
		padding: 64px 0 16px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni__grid {
		gap: 8px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-headline {
		font-size: 18px !important;
		max-width: 26ch;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-lede {
		font-size: 11.5px !important;
		line-height: 1.4 !important;
		max-width: 32ch;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni__phone {
		max-width: 130px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefits {
		min-height: 96px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__icon {
		width: 28px;
		height: 28px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__icon svg {
		width: 14px;
		height: 14px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__title {
		font-size: 13.5px !important;
		margin-bottom: 2px;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit__body {
		font-size: 12px !important;
		line-height: 1.4 !important;
	}
}

/* Mobile background photo — shift the visible crop so the photo's content
   sits behind the foreground (phone + text), giving the section more of a
   "subject in the background" feel than a centred photo competing for the eye. */
@media (max-width: 767px) {
	body .eduway-section--alumni .alumni__bg-photo img {
		object-position: 78% center;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni__grid {
		gap: 14px !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-head {
		text-align: center;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-headline {
		margin: 0 auto 8px !important;
		font-size: clamp(22px, 5.6vw, 28px) !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-lede {
		margin: 0 auto !important;
		font-size: 13.5px !important;
		max-width: 38ch;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni__phone {
		max-width: 180px;
	}
	/* Benefits — single visible slot, all four absolutely stacked */
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefits {
		position: relative;
		min-height: 130px;
		display: block !important;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit {
		position: absolute;
		inset: 0;
		padding: 14px 0 0 !important;
		border-top: 1px solid rgba(255, 214, 168, 0.18);
		opacity: 0;
		pointer-events: none;
		transform: translateY(8px);
		transition: opacity 360ms cubic-bezier(.32,.72,.22,1),
		            transform 360ms cubic-bezier(.32,.72,.22,1);
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefit.is-current {
		opacity: 1;
		pointer-events: auto;
		transform: translateY(0);
	}
	/* Tiny progress dots above the benefit area — quiet visual indicator
	   showing 1/4, 2/4, etc. as scroll moves through the sequence. */
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefits::before {
		content: '';
		position: absolute;
		top: -16px;
		left: 50%;
		transform: translateX(-50%);
		width: 80px;
		height: 4px;
		background:
			radial-gradient(circle at 12.5% 50%, var(--fire-300) 2px, transparent 2.5px),
			radial-gradient(circle at 37.5% 50%, var(--fire-300) 2px, transparent 2.5px),
			radial-gradient(circle at 62.5% 50%, var(--fire-300) 2px, transparent 2.5px),
			radial-gradient(circle at 87.5% 50%, var(--fire-300) 2px, transparent 2.5px);
		opacity: 0.3;
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-benefits::after {
		content: '';
		position: absolute;
		top: -16px;
		left: 50%;
		transform: translateX(-50%);
		width: 20px;
		height: 4px;
		display: block;
		background: radial-gradient(circle at 50% 50%, var(--fire-500) 2.5px, transparent 3px);
		margin-left: calc(-30px + var(--alumni-progress, 0) * 60px);
		transition: margin-left 360ms cubic-bezier(.32,.72,.22,1);
		filter: drop-shadow(0 0 6px rgba(255,127,28,0.6));
	}
	body .eduway-section--alumni.is-pinned-alumni .alumni-close {
		display: none;
	}
}

/* ----------------------------------------------------------------------
   HOW IT WORKS — Signal v0.2 voice
   The original tiles were sunrise-era: cream surfaces, plum-* text,
   bold sans-serif numbers. Refreshed to match the rest of the page:
   ink palette, mono-caps numerals with a hairline rail, Instrument
   Serif italic on the closing emphasis, hairline borders that warm
   to fire-300 on hover. Same layout, new voice.
   ---------------------------------------------------------------------- */

/* Section + head — eyebrow gets a small mono lead-in dash */
body .eduway-section--how {
	background: var(--paper);
}
body .eduway-section--how .how-headline {
	font-family: var(--font);
	font-weight: 700;
	letter-spacing: -0.025em;
	color: var(--ink-900);
}
body .eduway-section--how .how-headline .hl-italic {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--ink-900);
	letter-spacing: -0.015em;
	background: none;
	padding: 0;
}
body .eduway-section--how .how-lede {
	color: var(--ink-400);
}

/* Tile surface — paper-0 with the mist hairline + signal radius/shadow */
body .eduway-section--how .how-tile,
body .eduway-section--how .how-tile.feature {
	background: var(--paper-0) !important;
	border: 1px solid var(--mist) !important;
	border-radius: var(--r-3) !important;
	box-shadow: var(--sh-1);
	padding: 28px 26px !important;
	transition: border-color 280ms cubic-bezier(.32,.72,.22,1),
	            box-shadow 280ms cubic-bezier(.32,.72,.22,1),
	            transform 320ms cubic-bezier(.32,.72,.22,1);
}
@media (min-width: 1024px) {
	body .eduway-section--how .how-tile,
	body .eduway-section--how .how-tile.feature { padding: 32px 30px !important; }
}
body .eduway-section--how .how-tile:hover,
body .eduway-section--how .how-tile.feature:hover {
	border-color: var(--fire-300) !important;
	box-shadow: var(--sh-warm);
	transform: translateY(-2px);
}

/* Tile number — mono caps in fire-500, with a small fire hairline rail
   to the left so it reads as instrument-grade chapter marker, not a
   sunrise plum-italic. */
body .eduway-section--how .how-tile__num {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	margin: 0 0 14px !important;
	font-family: var(--mono) !important;
	font-style: normal !important;
	font-size: 11px !important;
	font-weight: 600 !important;
	letter-spacing: 0.18em !important;
	text-transform: uppercase;
	color: var(--fire-600) !important;
}
body .eduway-section--how .how-tile__num::before {
	content: '';
	display: inline-block;
	width: 18px;
	height: 1px;
	background: var(--fire-500);
}

/* Title — ink-900, slightly tighter; size unchanged so the visual
   hierarchy isn't disturbed. */
body .eduway-section--how .how-tile__title {
	color: var(--ink-900) !important;
	font-family: var(--font);
	font-weight: 700;
	letter-spacing: -0.015em;
	margin: 0 0 12px !important;
}

/* Body — ink-400, the standard signal body color */
body .eduway-section--how .how-tile__body {
	color: var(--ink-400) !important;
	font-size: 14.5px;
	line-height: 1.6;
}

/* Closing emphasis — Instrument Serif italic in ink-900, no underline.
   Same recipe used on lifecycle stops + outcomes caveat pop. */
body .eduway-section--how .how-tile__body .hl-quote-em {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--ink-900);
	font-size: 1.05em;
	background: none !important;
	padding: 0;
	letter-spacing: -0.005em;
}

/* Dark tile (AI) — flip to plum-900 surface but keep the same hairline
   warmth on hover. Body text uses peach-200 from existing rules; we
   just tighten the title + num to match Signal voice. */
body .eduway-section--how .how-tile.dark,
body .eduway-section--how .how-tile.feature.dark {
	background: var(--plum-900) !important;
	border-color: rgba(255, 127, 28, 0.18) !important;
}
body .eduway-section--how .how-tile.dark:hover,
body .eduway-section--how .how-tile.feature.dark:hover {
	border-color: var(--fire-500) !important;
}
body .eduway-section--how .how-tile.dark .how-tile__num {
	color: var(--fire-300) !important;
}
body .eduway-section--how .how-tile.dark .how-tile__num::before {
	background: var(--fire-300);
}
body .eduway-section--how .how-tile.dark .how-tile__title {
	color: var(--paper-0) !important;
}
body .eduway-section--how .how-tile.dark .how-tile__body {
	color: var(--peach-200) !important;
}
body .eduway-section--how .how-tile.dark .how-tile__body .hl-quote-em {
	color: var(--paper-0) !important;
}

/* UI frame chrome — slim it slightly so it sits inside the lighter
   tile without competing for attention. */
body .eduway-section--how .ui-frame {
	border-radius: var(--r-2);
	border: 1px solid var(--mist);
	overflow: hidden;
	box-shadow: none;
}
body .eduway-section--how .ui-frame__chrome {
	background: var(--paper-2);
	border-bottom: 1px solid var(--mist);
	padding: 8px 12px;
}
body .eduway-section--how .ui-frame__chrome-url {
	font-family: var(--mono);
	font-size: 10px;
	color: var(--ink-400);
	letter-spacing: 0.04em;
}
body .eduway-section--how .ui-frame--dark {
	border-color: rgba(255, 248, 240, 0.12);
}
body .eduway-section--how .ui-frame--dark .ui-frame__chrome {
	background: rgba(0, 0, 0, 0.35);
	border-bottom-color: rgba(255, 248, 240, 0.08);
}
body .eduway-section--how .ui-frame--dark .ui-frame__chrome-url {
	color: var(--peach-200);
}


/* ----------------------------------------------------------------------
   OUTCOMES METHODOLOGY — subtle click-to-expand
   Replaces the always-visible caveat paragraph with a quiet expandable.
   The summary is a small mono-caps "Methodology" label + tiny chevron
   that rotates 180° on open. No background, no border, no shout — just
   a hairline cue that more context lives behind a click.
   ---------------------------------------------------------------------- */
body .eduway-section--outcomes .outcomes-source {
	max-width: 760px;
	margin: 28px auto 0;
	padding-top: 24px;
	border-top: 1px solid var(--paper-3);
	/* Centre the inline-flex summary toggle horizontally */
	text-align: center;
}
body .eduway-section--outcomes .outcomes-source__summary {
	list-style: none;
	cursor: pointer;
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 4px 0;
	font-family: var(--mono);
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--ink-400);
	transition: color 220ms cubic-bezier(.32,.72,.22,1);
	user-select: none;
}
body .eduway-section--outcomes .outcomes-source__summary::-webkit-details-marker { display: none; }
body .eduway-section--outcomes .outcomes-source__summary::marker { content: ''; }
body .eduway-section--outcomes .outcomes-source__summary:hover {
	color: var(--ink-900);
}
body .eduway-section--outcomes .outcomes-source__summary:focus-visible {
	outline: 2px solid var(--fire-300);
	outline-offset: 4px;
	border-radius: 2px;
}
body .eduway-section--outcomes .outcomes-source__chevron {
	color: currentColor;
	transition: transform 280ms cubic-bezier(.32,.72,.22,1);
	flex-shrink: 0;
}
body .eduway-section--outcomes .outcomes-source[open] .outcomes-source__chevron {
	transform: rotate(180deg);
}
/* Body wrap — animates open/close. JS at the bottom of the file sets the
   inline `height` from 0 → scrollHeight (and back) so the transition runs
   in both directions. Native <details> snaps the content visibility, so
   the JS defers the [open] attribute removal until after the close transition. */
body .eduway-section--outcomes .outcomes-source__body-wrap {
	overflow: hidden;
	opacity: 0;
	transition: height 380ms cubic-bezier(.32,.72,.22,1),
	            opacity 280ms cubic-bezier(.32,.72,.22,1);
}
body .eduway-section--outcomes .outcomes-source[open] .outcomes-source__body-wrap {
	opacity: 1;
}
body .eduway-section--outcomes .outcomes-source__body {
	margin: 14px auto 0;
	max-width: 600px;
	font-size: 14px;
	line-height: 1.6;
	color: var(--ink-400);
	text-align: center;
}
@media (min-width: 768px) {
	body .eduway-section--outcomes .outcomes-source__body { font-size: 14.5px; }
}
body .eduway-section--outcomes .outcomes-source__pop {
	color: var(--ink-900);
	font-weight: 600;
	font-style: italic;
}
@media (prefers-reduced-motion: reduce) {
	body .eduway-section--outcomes .outcomes-source__chevron,
	body .eduway-section--outcomes .outcomes-source__body-wrap {
		transition: none;
	}
}


/* Body — slightly tighter line-height to compact the card */
body .eduway-section--lifecycle .lifecycle-stop__body {
	font-size: 14px !important;
	line-height: 1.55 !important;
}
body .eduway-section--lifecycle .lifecycle-stop__body .hl-quote-em {
	margin-top: 8px !important;
	font-size: 1.04em !important;
}


/* ----------------------------------------------------------------------
   LIFECYCLE — MOBILE SCROLL-LOCKED STACK
   On mobile (<1100px), GSAP pins the section and animates each card to
   fly up from below and stack on top of the previous one with a slight
   rotational fan, like a dealt deck. A vertical fire rail on the left
   tracks progress through the four phases. After all four cards land,
   a dotted circular loop indicator appears, signaling that the lifecycle
   continues — the engagement loops back to recruitment for the next class.

   Hidden by default; only takes over when GSAP adds .is-pinned-mobile.
   ---------------------------------------------------------------------- */
.lifecycle-mobile-rail { display: none; }

@media (max-width: 1099px) {
	body .eduway-section--lifecycle.is-pinned-mobile {
		--lifecycle-progress: 0;
		min-height: 100svh;
		padding-top: 0 !important;
		padding-bottom: 0 !important;
		overflow: hidden;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .eduway-container {
		min-height: 100svh;
		display: flex;
		flex-direction: column;
		justify-content: flex-start;
		padding: 80px 20px 28px;
		position: relative;
	}
	/* Compact header so the card stage gets vertical room on small screens */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-head {
		margin: 0 auto 18px !important;
		text-align: center;
		max-width: 100%;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-headline {
		font-size: clamp(26px, 6.4vw, 34px) !important;
		line-height: 1.08 !important;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-lede {
		font-size: 14.5px !important;
		line-height: 1.5 !important;
		max-width: 36ch;
		margin-left: auto;
		margin-right: auto;
	}

	/* Hide the original horizontal dashed thread on mobile pinned state —
	   the new vertical rail replaces it. */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-thread {
		display: none !important;
	}

	/* The card stage — relative + fixed height, cards stack absolutely inside.
	   Reset the grid layout that mobile inherits otherwise. */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stops {
		position: relative;
		display: block !important;
		grid-template-columns: none !important;
		gap: 0 !important;
		width: calc(100% - 56px);
		max-width: 380px;
		margin: 0 auto;
		flex: 1;
		min-height: 360px;
		padding: 0 !important;
		list-style: none;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop {
		position: absolute !important;
		top: 16px !important;
		left: 0 !important;
		right: 0 !important;
		margin: 0 !important;
		padding: 22px 22px 24px !important;
		background: var(--paper-0);
		border: 1px solid var(--mist);
		border-radius: var(--r-3);
		box-shadow: var(--sh-2);
		will-change: transform, opacity;
		transform-origin: 50% 100%;
		/* Initial state — off-screen below, faded out. GSAP animates each
		   card in sequence to its resting fan position. */
		opacity: 0;
		transform: translate3d(0, 110%, 0) rotate(-6deg);
		z-index: 1;
	}
	/* Each card fans slightly when it lands — different angles per card */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop--01 { z-index: 1; }
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop--02 { z-index: 2; }
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop--03 { z-index: 3; }
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop--04 { z-index: 4; }

	/* Soften the inner spacing so the card reads compact at this viewport */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop__head {
		margin-bottom: 8px;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop__title {
		font-size: 19px !important;
		line-height: 1.2 !important;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stop__body {
		font-size: 13.5px !important;
		line-height: 1.5 !important;
	}

	/* MOBILE RAIL — slim vertical fire thread on the left of the card stage.
	   Lives INSIDE .lifecycle-stops (the card stage) so it can never overlap
	   the headline above. Four tiny dots fill in as cards land; a single
	   pulsing fire dot at the end signals the cycle continues. */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-stops {
		padding-left: 22px !important;
		box-sizing: border-box;
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail {
		display: block;
		position: absolute;
		left: 4px;
		top: 16px;
		bottom: 0;
		width: 12px;
		pointer-events: none;
	}
	/* Track — neutral hairline */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__track {
		position: absolute;
		left: 50%;
		top: 0;
		bottom: 28px;
		width: 1px;
		transform: translateX(-50%);
		background: var(--mist);
	}
	/* Fill — fire hairline, scrubbed by --lifecycle-progress (0→1) */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__fill {
		position: absolute;
		left: 50%;
		top: 0;
		width: 1px;
		transform: translateX(-50%);
		height: calc(var(--lifecycle-progress, 0) * (100% - 28px));
		background: linear-gradient(to bottom, var(--fire-500), var(--fire-700));
		box-shadow: 0 0 8px rgba(255,127,28,0.45);
	}
	/* Nodes — tiny dots, no numbers */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__node {
		position: absolute;
		left: 50%;
		transform: translate(-50%, -50%) scale(0.8);
		width: 7px;
		height: 7px;
		border-radius: 50%;
		background: var(--paper-0);
		border: 1px solid var(--mist);
		transition: background 280ms cubic-bezier(.32,.72,.22,1),
		            border-color 280ms cubic-bezier(.32,.72,.22,1),
		            transform 320ms cubic-bezier(.32,.72,.22,1),
		            box-shadow 320ms cubic-bezier(.32,.72,.22,1);
	}
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__node--01 { top: 0%; }
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__node--02 { top: calc((100% - 28px) * 0.333); }
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__node--03 { top: calc((100% - 28px) * 0.666); }
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__node--04 { top: calc(100% - 28px); }
	/* Active state — JS toggles .is-on as each card stacks */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__node.is-on {
		background: var(--fire-500);
		border-color: var(--fire-500);
		transform: translate(-50%, -50%) scale(1.15);
		box-shadow: 0 0 10px rgba(255,127,28,0.55);
	}
	/* Loop indicator — single pulsing fire dot under the last node.
	   Subtle "the signal continues" cue without a chrome chart icon. */
	body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__loop {
		position: absolute;
		left: 50%;
		bottom: 8px;
		width: 6px;
		height: 6px;
		border-radius: 50%;
		background: var(--fire-500);
		transform: translateX(-50%);
		opacity: calc(max(0, var(--lifecycle-progress, 0) - 0.7) * 3.33);
		animation: lifecycle-loop-pulse 1.6s ease-in-out infinite;
	}
	@keyframes lifecycle-loop-pulse {
		0%, 100% { box-shadow: 0 0 0 0 rgba(255,127,28,0.55); }
		50%      { box-shadow: 0 0 0 6px rgba(255,127,28,0); }
	}
	@media (prefers-reduced-motion: reduce) {
		body .eduway-section--lifecycle.is-pinned-mobile .lifecycle-mobile-rail__loop {
			animation: none;
		}
	}
}

/* =============================================================
   INTEGRATIONS — CONVEYOR (replaces hub-and-spokes)
   Two-row dark ticker with system names separated by Eduway icons.
   Scoped under .eduway-section--integrations to inherit page styling.
   ============================================================= */
.eduway-section--integrations .integrations-intro {
	display: grid;
	gap: 28px;
	margin: 0 0 34px;
}
/* Override the existing centered .integrations-head rules when inside .integrations-intro. */
.eduway-section--integrations .integrations-intro .integrations-head {
	max-width: 900px !important;
	margin: 0 !important;
	text-align: left !important;
}
.eduway-section--integrations .integrations-intro .integrations-head .eyebrow {
	margin: 0 !important;
	justify-content: flex-start;
}
.eduway-section--integrations .integrations-intro .integrations-headline {
	margin: 14px 0 0 !important;
	max-width: 860px;
	text-align: left !important;
}
.eduway-section--integrations .integrations-intro .integrations-lede {
	margin: 22px 0 0 !important;
	max-width: 660px;
	text-align: left !important;
}

.integrations-visual {
	width: min(100%, 560px);
	margin: clamp(-88px, -8vw, -32px) auto clamp(-72px, -6vw, -24px);
	min-width: 0;
	pointer-events: none;
}
.integrations-visual img {
	width: 100%;
	height: auto;
	object-fit: contain;
	object-position: center;
}

@media (min-width: 768px) {
	.eduway-section--integrations .integrations-intro { margin-bottom: 42px; }
}
@media (min-width: 521px) and (max-width: 1099px) {
	.integrations-visual { width: min(68vw, 560px); }
}
@media (min-width: 1100px) {
	.eduway-section--integrations .integrations-intro {
		grid-template-columns: minmax(0, 0.66fr) minmax(320px, 0.34fr);
		align-items: end;
		gap: 44px;
	}
	.integrations-visual {
		align-self: end;
		justify-self: end;
		width: 100%;
		margin: 0;
	}
	.integrations-visual img { margin-inline: auto 0; }
}

/* ----- The conveyor itself ----- */
.conveyor {
	position: relative;
	overflow: hidden;
	width: 100%;
	max-width: 100%;
	border: 1px solid var(--ink-900);
	border-radius: var(--r-3);
	background: var(--ink-900);
	color: var(--paper);
}

.conveyor__lanes { display: grid; }

.conveyor__lane {
	position: relative;
	overflow: hidden;
}
.conveyor__lane + .conveyor__lane { border-top: 1px solid rgba(255, 255, 255, 0.14); }

.conveyor__lane::before,
.conveyor__lane::after {
	content: "";
	position: absolute;
	top: 0;
	bottom: 0;
	z-index: 2;
	width: 44px;
	pointer-events: none;
}
.conveyor__lane::before { left: 0;  background: linear-gradient(90deg,  var(--ink-900), transparent); }
.conveyor__lane::after  { right: 0; background: linear-gradient(270deg, var(--ink-900), transparent); }

.conveyor__track {
	display: flex;
	align-items: center;
	width: max-content;
	padding: 16px 0;
	will-change: transform;
	transform: translate3d(0, 0, 0);
}
.conveyor__set {
	display: inline-flex;
	align-items: center;
	flex: 0 0 auto;
}

.system-word {
	display: inline-flex;
	align-items: center;
	padding: 0 14px;
	color: var(--paper);
	font-size: clamp(24px, 4.2vw, 50px);
	font-weight: 800;
	line-height: 1;
	letter-spacing: 0;
	white-space: nowrap;
}
.system-word[data-kind="open"] {
	font-family: var(--font-display);
	font-style: italic;
	font-weight: 400;
	color: var(--fire-200);
}

.system-separator {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: clamp(56px, 6.4vw, 84px);
	height: clamp(56px, 6.4vw, 84px);
	margin: 0 14px;
	flex: 0 0 auto;
}
.system-separator img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: contain;
}

.conveyor.is-ready .conveyor__track {
	animation: conveyor-ticker 22s linear infinite;
}
.conveyor.is-ready .conveyor__lane:nth-child(2) .conveyor__track {
	animation-direction: reverse;
	animation-duration: 26s;
}
.conveyor:hover .conveyor__track { animation-play-state: paused; }

@keyframes conveyor-ticker {
	from { transform: translate3d(0, 0, 0); }
	to   { transform: translate3d(calc(var(--ticker-distance, 0px) * -1), 0, 0); }
}

@media (prefers-reduced-motion: reduce) {
	.conveyor__track {
		animation: none !important;
		transform: none !important;
	}
}

