{"id":8,"date":"2022-08-14T16:35:58","date_gmt":"2022-08-14T14:35:58","guid":{"rendered":"https:\/\/adelouvain.be\/?page_id=8"},"modified":"2026-05-07T11:12:18","modified_gmt":"2026-05-07T09:12:18","slug":"bienvenue","status":"publish","type":"page","link":"https:\/\/adelouvain.be\/","title":{"rendered":"Bienvenue"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Stories&#8221; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#f5f3ee&#8221; background_image=&#8221;https:\/\/adelouvain.be\/wp-content\/uploads\/2022\/12\/UNamur-\u00a9-Christophe-Danaux-20221125201208-scaled.jpg&#8221; parallax=&#8221;on&#8221; custom_padding=&#8221;0vw||0vw||true|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;0px|||||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;]<!--<!-- [et_pb_line_break_holder] -->================================================================================<!-- [et_pb_line_break_holder] -->  ADEL \u2014 Section &#8220;Mot du Pr\u00e9sident&#8221; (v2 avec don Stripe + IBAN)<!-- [et_pb_line_break_holder] -->  \u00c0 coller dans un module DIVI > CODE<!-- [et_pb_line_break_holder] -->================================================================================<!-- [et_pb_line_break_holder] -->&#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:wght@500;600;700&#038;family=Inter:wght@400;500;600;700&#038;family=JetBrains+Mono:wght@500;600&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->.adel-welcome {<!-- [et_pb_line_break_holder] -->  --adel-ink: #0e1a2b;<!-- [et_pb_line_break_holder] -->  --adel-ink-soft: #2c3e52;<!-- [et_pb_line_break_holder] -->  --adel-paper: #ffffff;<!-- [et_pb_line_break_holder] -->  --adel-paper-warm: #f7f4ed;<!-- [et_pb_line_break_holder] -->  --adel-accent: #6b1f2c;<!-- [et_pb_line_break_holder] -->  --adel-line: #d8d2c4;<!-- [et_pb_line_break_holder] -->  --adel-muted: #6b7280;<!-- [et_pb_line_break_holder] -->  --adel-gold: #b08a3e;<!-- [et_pb_line_break_holder] -->  --adel-font-display: 'Cormorant Garamond', Georgia, serif;<!-- [et_pb_line_break_holder] -->  --adel-font-body: 'Inter', -apple-system, sans-serif;<!-- [et_pb_line_break_holder] -->  --adel-font-mono: 'JetBrains Mono', ui-monospace, monospace;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  max-width: 920px;<!-- [et_pb_line_break_holder] -->  margin: 0 auto;<!-- [et_pb_line_break_holder] -->  padding: 60px 20px;<!-- [et_pb_line_break_holder] -->  box-sizing: border-box;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome *, .adel-welcome *::before, .adel-welcome *::after { box-sizing: border-box; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__card {<!-- [et_pb_line_break_holder] -->  background: var(--adel-paper);<!-- [et_pb_line_break_holder] -->  border-radius: 4px;<!-- [et_pb_line_break_holder] -->  padding: 64px 72px 56px;<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  box-shadow:<!-- [et_pb_line_break_holder] -->    0 30px 60px -20px rgba(14, 26, 43, 0.35),<!-- [et_pb_line_break_holder] -->    0 0 0 1px rgba(216, 210, 196, 0.5);<!-- [et_pb_line_break_holder] -->  overflow: hidden;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__card::before {<!-- [et_pb_line_break_holder] -->  content: '';<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  top: 0; left: 0; right: 0;<!-- [et_pb_line_break_holder] -->  height: 4px;<!-- [et_pb_line_break_holder] -->  background: linear-gradient(90deg,<!-- [et_pb_line_break_holder] -->    var(--adel-accent) 0%,<!-- [et_pb_line_break_holder] -->    var(--adel-gold) 50%,<!-- [et_pb_line_break_holder] -->    var(--adel-accent) 100%);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__card::after {<!-- [et_pb_line_break_holder] -->  content: '';<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  top: 30px; right: 30px;<!-- [et_pb_line_break_holder] -->  width: 80px; height: 80px;<!-- [et_pb_line_break_holder] -->  background-image: url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 100 100'><circle cx='50' cy='50' r='48' fill='none' stroke='%23b08a3e' stroke-width='0.5' opacity='0.3'\/><circle cx='50' cy='50' r='40' fill='none' stroke='%23b08a3e' stroke-width='0.5' opacity='0.3'\/><text x='50' y='58' text-anchor='middle' font-family='Cormorant Garamond' font-size='24' font-style='italic' fill='%23b08a3e' opacity='0.4'>A<\/text><\/svg>\");<!-- [et_pb_line_break_holder] -->  background-repeat: no-repeat;<!-- [et_pb_line_break_holder] -->  background-size: contain;<!-- [et_pb_line_break_holder] -->  pointer-events: none;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__title {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: clamp(2.4rem, 4.5vw, 3.4rem);<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  line-height: 1.1;<!-- [et_pb_line_break_holder] -->  margin: 0 0 12px;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  text-align: center;<!-- [et_pb_line_break_holder] -->  letter-spacing: -0.01em;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__title em {<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__subtitle {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 12px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.25em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  text-align: center;<!-- [et_pb_line_break_holder] -->  margin: 0;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__divider {<!-- [et_pb_line_break_holder] -->  width: 60px;<!-- [et_pb_line_break_holder] -->  height: 1px;<!-- [et_pb_line_break_holder] -->  background: var(--adel-gold);<!-- [et_pb_line_break_holder] -->  margin: 32px auto 40px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__body {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 16px;<!-- [et_pb_line_break_holder] -->  line-height: 1.75;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink-soft);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__body p { margin: 0 0 20px; }<!-- [et_pb_line_break_holder] -->.adel-welcome__body p:last-child { margin-bottom: 0; }<!-- [et_pb_line_break_holder] -->.adel-welcome__body p:first-child::first-letter {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: 4.2rem;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  line-height: 0.85;<!-- [et_pb_line_break_holder] -->  float: left;<!-- [et_pb_line_break_holder] -->  margin: 6px 12px 0 0;<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__body strong {<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__quote {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: 22px;<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->  line-height: 1.5;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  text-align: center;<!-- [et_pb_line_break_holder] -->  margin: 48px auto 0;<!-- [et_pb_line_break_holder] -->  max-width: 640px;<!-- [et_pb_line_break_holder] -->  padding: 0 40px;<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__quote::before {<!-- [et_pb_line_break_holder] -->  content: '\u201c';<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  top: -28px; left: 0;<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: 72px;<!-- [et_pb_line_break_holder] -->  font-style: normal;<!-- [et_pb_line_break_holder] -->  color: var(--adel-gold);<!-- [et_pb_line_break_holder] -->  line-height: 1;<!-- [et_pb_line_break_holder] -->  opacity: 0.55;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__quote::after {<!-- [et_pb_line_break_holder] -->  content: '\u201d';<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  bottom: -52px; right: 0;<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: 72px;<!-- [et_pb_line_break_holder] -->  font-style: normal;<!-- [et_pb_line_break_holder] -->  color: var(--adel-gold);<!-- [et_pb_line_break_holder] -->  line-height: 1;<!-- [et_pb_line_break_holder] -->  opacity: 0.55;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__signature {<!-- [et_pb_line_break_holder] -->  margin-top: 64px;<!-- [et_pb_line_break_holder] -->  text-align: right;<!-- [et_pb_line_break_holder] -->  padding-right: 12px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__signature-name {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: 22px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  margin: 0 0 4px;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.005em;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__signature-role {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 11px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.2em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  margin: 0;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* ============================================================<!-- [et_pb_line_break_holder] -->   ZONE DE CONTRIBUTION \u2014 CTA + IBAN<!-- [et_pb_line_break_holder] -->   ============================================================ *\/<!-- [et_pb_line_break_holder] -->.adel-welcome__contribute {<!-- [et_pb_line_break_holder] -->  margin-top: 56px;<!-- [et_pb_line_break_holder] -->  padding-top: 40px;<!-- [et_pb_line_break_holder] -->  border-top: 1px solid var(--adel-line);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__contribute-header {<!-- [et_pb_line_break_holder] -->  text-align: center;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__contribute-eyebrow {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 11px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.25em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  margin: 0 0 8px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__contribute-title {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-size: 28px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  margin: 0 0 8px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__contribute-subtitle {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 14px;<!-- [et_pb_line_break_holder] -->  color: var(--adel-muted);<!-- [et_pb_line_break_holder] -->  margin: 0;<!-- [et_pb_line_break_holder] -->  line-height: 1.6;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* CTA Stripe *\/<!-- [et_pb_line_break_holder] -->.adel-welcome__cta-wrapper {<!-- [et_pb_line_break_holder] -->  text-align: center;<!-- [et_pb_line_break_holder] -->  margin-bottom: 32px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__cta {<!-- [et_pb_line_break_holder] -->  display: inline-flex;<!-- [et_pb_line_break_holder] -->  align-items: center;<!-- [et_pb_line_break_holder] -->  gap: 12px;<!-- [et_pb_line_break_holder] -->  padding: 16px 36px;<!-- [et_pb_line_break_holder] -->  background: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  color: var(--adel-paper) !important;<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 14px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.05em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  text-decoration: none !important;<!-- [et_pb_line_break_holder] -->  border: 1px solid var(--adel-ink);<!-- [et_pb_line_break_holder] -->  border-radius: 2px;<!-- [et_pb_line_break_holder] -->  transition: all 0.3s cubic-bezier(0.2, 0.8, 0.2, 1);<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  overflow: hidden;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__cta::before {<!-- [et_pb_line_break_holder] -->  content: '';<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  inset: 0;<!-- [et_pb_line_break_holder] -->  background: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  transform: translateX(-100%);<!-- [et_pb_line_break_holder] -->  transition: transform 0.4s ease;<!-- [et_pb_line_break_holder] -->  z-index: 0;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__cta > * { position: relative; z-index: 1; }<!-- [et_pb_line_break_holder] -->.adel-welcome__cta:hover {<!-- [et_pb_line_break_holder] -->  border-color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  transform: translateY(-2px);<!-- [et_pb_line_break_holder] -->  box-shadow: 0 12px 24px -8px rgba(107, 31, 44, 0.4);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__cta:hover::before { transform: translateX(0); }<!-- [et_pb_line_break_holder] -->.adel-welcome__cta-icon {<!-- [et_pb_line_break_holder] -->  width: 16px;<!-- [et_pb_line_break_holder] -->  height: 16px;<!-- [et_pb_line_break_holder] -->  transition: transform 0.3s ease;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__cta:hover .adel-welcome__cta-icon { transform: translateX(4px); }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* S\u00e9parateur \"ou\" *\/<!-- [et_pb_line_break_holder] -->.adel-welcome__or {<!-- [et_pb_line_break_holder] -->  display: flex;<!-- [et_pb_line_break_holder] -->  align-items: center;<!-- [et_pb_line_break_holder] -->  gap: 16px;<!-- [et_pb_line_break_holder] -->  margin: 24px auto;<!-- [et_pb_line_break_holder] -->  max-width: 320px;<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-display);<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->  font-size: 14px;<!-- [et_pb_line_break_holder] -->  color: var(--adel-muted);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__or::before,<!-- [et_pb_line_break_holder] -->.adel-welcome__or::after {<!-- [et_pb_line_break_holder] -->  content: '';<!-- [et_pb_line_break_holder] -->  flex: 1;<!-- [et_pb_line_break_holder] -->  height: 1px;<!-- [et_pb_line_break_holder] -->  background: var(--adel-line);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Encadr\u00e9 IBAN *\/<!-- [et_pb_line_break_holder] -->.adel-welcome__bank {<!-- [et_pb_line_break_holder] -->  background: var(--adel-paper-warm);<!-- [et_pb_line_break_holder] -->  border: 1px solid var(--adel-line);<!-- [et_pb_line_break_holder] -->  border-radius: 4px;<!-- [et_pb_line_break_holder] -->  padding: 28px 32px;<!-- [et_pb_line_break_holder] -->  position: relative;<!-- [et_pb_line_break_holder] -->  max-width: 580px;<!-- [et_pb_line_break_holder] -->  margin: 0 auto;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__bank::before {<!-- [et_pb_line_break_holder] -->  content: '';<!-- [et_pb_line_break_holder] -->  position: absolute;<!-- [et_pb_line_break_holder] -->  top: 0;<!-- [et_pb_line_break_holder] -->  left: 24px;<!-- [et_pb_line_break_holder] -->  right: 24px;<!-- [et_pb_line_break_holder] -->  height: 2px;<!-- [et_pb_line_break_holder] -->  background: var(--adel-gold);<!-- [et_pb_line_break_holder] -->  border-radius: 0 0 2px 2px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__bank-title {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 11px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.2em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  margin: 0 0 16px;<!-- [et_pb_line_break_holder] -->  display: flex;<!-- [et_pb_line_break_holder] -->  align-items: center;<!-- [et_pb_line_break_holder] -->  gap: 8px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__bank-title svg {<!-- [et_pb_line_break_holder] -->  width: 14px;<!-- [et_pb_line_break_holder] -->  height: 14px;<!-- [et_pb_line_break_holder] -->  color: var(--adel-gold);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__bank-row {<!-- [et_pb_line_break_holder] -->  display: flex;<!-- [et_pb_line_break_holder] -->  align-items: baseline;<!-- [et_pb_line_break_holder] -->  gap: 12px;<!-- [et_pb_line_break_holder] -->  padding: 10px 0;<!-- [et_pb_line_break_holder] -->  border-bottom: 1px dashed var(--adel-line);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__bank-row:last-child {<!-- [et_pb_line_break_holder] -->  border-bottom: none;<!-- [et_pb_line_break_holder] -->  padding-bottom: 0;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__bank-label {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 11px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.15em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  color: var(--adel-muted);<!-- [et_pb_line_break_holder] -->  flex-shrink: 0;<!-- [et_pb_line_break_holder] -->  width: 110px;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__bank-value {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-mono);<!-- [et_pb_line_break_holder] -->  font-size: 15px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink);<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.02em;<!-- [et_pb_line_break_holder] -->  flex: 1;<!-- [et_pb_line_break_holder] -->  word-break: break-word;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->.adel-welcome__bank-value-text {<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 14px;<!-- [et_pb_line_break_holder] -->  font-weight: 500;<!-- [et_pb_line_break_holder] -->  color: var(--adel-ink-soft);<!-- [et_pb_line_break_holder] -->  font-style: italic;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Bouton copier *\/<!-- [et_pb_line_break_holder] -->.adel-welcome__copy-btn {<!-- [et_pb_line_break_holder] -->  background: transparent;<!-- [et_pb_line_break_holder] -->  border: 1px solid var(--adel-line);<!-- [et_pb_line_break_holder] -->  color: var(--adel-muted);<!-- [et_pb_line_break_holder] -->  border-radius: 2px;<!-- [et_pb_line_break_holder] -->  padding: 4px 10px;<!-- [et_pb_line_break_holder] -->  font-family: var(--adel-font-body);<!-- [et_pb_line_break_holder] -->  font-size: 10px;<!-- [et_pb_line_break_holder] -->  font-weight: 600;<!-- [et_pb_line_break_holder] -->  letter-spacing: 0.1em;<!-- [et_pb_line_break_holder] -->  text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  cursor: pointer;<!-- [et_pb_line_break_holder] -->  transition: all 0.2s ease;<!-- [et_pb_line_break_holder] -->  margin-left: 8px;<!-- [et_pb_line_break_holder] -->  flex-shrink: 0;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__copy-btn:hover {<!-- [et_pb_line_break_holder] -->  border-color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__copy-btn.is-copied {<!-- [et_pb_line_break_holder] -->  background: var(--adel-accent);<!-- [et_pb_line_break_holder] -->  color: white;<!-- [et_pb_line_break_holder] -->  border-color: var(--adel-accent);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* Responsive *\/<!-- [et_pb_line_break_holder] -->@media (max-width: 768px) {<!-- [et_pb_line_break_holder] -->  .adel-welcome { padding: 32px 12px; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__card { padding: 40px 28px 36px; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__card::after { width: 50px; height: 50px; top: 16px; right: 16px; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__body { font-size: 15px; line-height: 1.7; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__body p:first-child::first-letter { font-size: 3.4rem; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__quote { font-size: 18px; padding: 0 30px; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__cta { padding: 14px 28px; font-size: 13px; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__bank { padding: 22px 20px; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__bank-row { flex-direction: column; gap: 4px; align-items: flex-start; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__bank-label { width: auto; }<!-- [et_pb_line_break_holder] -->  .adel-welcome__contribute-title { font-size: 24px; }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->@keyframes adel-welcome-fade {<!-- [et_pb_line_break_holder] -->  from { opacity: 0; transform: translateY(16px); }<!-- [et_pb_line_break_holder] -->  to { opacity: 1; transform: translateY(0); }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->.adel-welcome__card { animation: adel-welcome-fade 0.8s ease backwards; }<!-- [et_pb_line_break_holder] -->.adel-welcome__title { animation: adel-welcome-fade 0.8s 0.2s ease backwards; }<!-- [et_pb_line_break_holder] -->.adel-welcome__body { animation: adel-welcome-fade 0.8s 0.4s ease backwards; }<!-- [et_pb_line_break_holder] -->.adel-welcome__contribute { animation: adel-welcome-fade 0.8s 0.6s ease backwards; }<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<section class=\"adel-welcome\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<article class=\"adel-welcome__card\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<h1 class=\"adel-welcome__title\">Bienvenue \u00e0 <em>l&#8217;ADEL<\/em><\/h1>\n<p><!-- [et_pb_line_break_holder] -->    <pee class=\"adel-welcome__subtitle\">\u2014 Mot du Pr\u00e9sident \u2014<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"adel-welcome__divider\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"adel-welcome__body\"><!-- [et_pb_line_break_holder] -->      <pee>L&#8217;<strong>Association des \u00c9conomistes de Louvain (ADEL)<\/strong> est n\u00e9e il y a plus de 30 ans. Elle se veut un lieu d&#8217;\u00e9changes, de contacts et de formation continue dans le domaine des sciences \u00e9conomiques.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <pee>Au quotidien, l&#8217;association soutient les projets de l&#8217;<strong>Economics School of Louvain<\/strong> qui visent \u00e0 resserrer les liens entre l&#8217;enseignement acad\u00e9mique et la pratique professionnelle. Elle promeut la carri\u00e8re professionnelle des jeunes (et moins jeunes) dipl\u00f4m\u00e9s par le biais du service Emploi et de ses multiples activit\u00e9s.<\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <pee>Elle propose \u00e0 ses membres et aux anciens des conf\u00e9rences, des soir\u00e9es \u00e0 th\u00e8mes mais \u00e9galement une information continue de tout ce qui s&#8217;\u00e9dite dans le domaine de l&#8217;\u00e9conomie via sa Jobfair.<\/pee><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<blockquote class=\"adel-welcome__quote\"><p><!-- [et_pb_line_break_holder] -->      L&#8217;ADEL est une passerelle entre les \u00e9tudiants, les jeunes dipl\u00f4m\u00e9s et les \u00e9conomistes de terrain.<!-- [et_pb_line_break_holder] -->    <\/p><\/blockquote>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"adel-welcome__signature\"><!-- [et_pb_line_break_holder] -->      <pee class=\"adel-welcome__signature-name\">Bernard Fierens Gevaert<\/pee><!-- [et_pb_line_break_holder] -->      <pee class=\"adel-welcome__signature-role\">Pr\u00e9sident<\/pee><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <!-- ============================================================<!-- [et_pb_line_break_holder] -->         ZONE CONTRIBUTION<!-- [et_pb_line_break_holder] -->         ============================================================ &#8211;><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"adel-welcome__contribute\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<header class=\"adel-welcome__contribute-header\"><!-- [et_pb_line_break_holder] -->        <pee class=\"adel-welcome__contribute-eyebrow\">Soutenez notre mission<\/pee><!-- [et_pb_line_break_holder] -->        <\/p>\n<h2 class=\"adel-welcome__contribute-title\">Faire un don \u00e0 l&#8217;ADEL<\/h2>\n<p><!-- [et_pb_line_break_holder] -->        <pee class=\"adel-welcome__contribute-subtitle\">Votre soutien permet \u00e0 notre association de continuer \u00e0 promouvoir l&#8217;excellence acad\u00e9mique et professionnelle des \u00e9conomistes de Louvain.<\/pee><!-- [et_pb_line_break_holder] -->      <\/header>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"adel-welcome__cta-wrapper\"><!-- [et_pb_line_break_holder] -->        <a href=\"https:\/\/donate.stripe.com\/7sY9AV5Pj2FF0bSe3RfjG00\"<!-- [et_pb_line_break_holder] -->           class=&#8221;adel-welcome__cta&#8221;<!-- [et_pb_line_break_holder] -->           target=&#8221;_blank&#8221;<!-- [et_pb_line_break_holder] -->           rel=&#8221;noopener&#8221;><!-- [et_pb_line_break_holder] -->          <span>Donner en ligne<\/span><!-- [et_pb_line_break_holder] -->          <svg class=\"adel-welcome__cta-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><!-- [et_pb_line_break_holder] -->            <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><!-- [et_pb_line_break_holder] -->            <polyline points=\"12 5 19 12 12 19\"\/><!-- [et_pb_line_break_holder] -->          <\/svg><!-- [et_pb_line_break_holder] -->        <\/a><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"adel-welcome__or\">ou par virement bancaire<\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"adel-welcome__bank\"><!-- [et_pb_line_break_holder] -->        <pee class=\"adel-welcome__bank-title\"><!-- [et_pb_line_break_holder] -->          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><!-- [et_pb_line_break_holder] -->            <rect x=\"3\" y=\"6\" width=\"18\" height=\"13\" rx=\"1\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/><!-- [et_pb_line_break_holder] -->            <line x1=\"7\" y1=\"15\" x2=\"9\" y2=\"15\"\/><!-- [et_pb_line_break_holder] -->          <\/svg><!-- [et_pb_line_break_holder] -->          Modalit\u00e9s de contribution<!-- [et_pb_line_break_holder] -->        <\/pee><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"adel-welcome__bank-row\"><!-- [et_pb_line_break_holder] -->          <span class=\"adel-welcome__bank-label\">IBAN<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"adel-welcome__bank-value\" id=\"adel-iban\">BE55 2710 3710 3744<\/span><!-- [et_pb_line_break_holder] -->          <button class=\"adel-welcome__copy-btn\"<!-- [et_pb_line_break_holder] -->                  type=&#8221;button&#8221;<!-- [et_pb_line_break_holder] -->                  data-copy-target=&#8221;adel-iban&#8221;>Copier<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"adel-welcome__bank-row\"><!-- [et_pb_line_break_holder] -->          <span class=\"adel-welcome__bank-label\">Communication<\/span><!-- [et_pb_line_break_holder] -->          <span class=\"adel-welcome__bank-value-text\">Soutien ADEL \u2013 [Votre Nom]<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <\/article>\n<p><!-- [et_pb_line_break_holder] --><\/section>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  document.querySelectorAll('.adel-welcome__copy-btn').forEach(function(btn) {<!-- [et_pb_line_break_holder] -->    btn.addEventListener('click', function() {<!-- [et_pb_line_break_holder] -->      var targetId = btn.getAttribute('data-copy-target');<!-- [et_pb_line_break_holder] -->      var target = document.getElementById(targetId);<!-- [et_pb_line_break_holder] -->      if (!target) return;<!-- [et_pb_line_break_holder] -->      var text = target.textContent.trim();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      \/\/ M\u00e9thode moderne (clipboard API)<!-- [et_pb_line_break_holder] -->      if (navigator.clipboard && navigator.clipboard.writeText) {<!-- [et_pb_line_break_holder] -->        navigator.clipboard.writeText(text).then(function() {<!-- [et_pb_line_break_holder] -->          showCopied(btn);<!-- [et_pb_line_break_holder] -->        }).catch(function() {<!-- [et_pb_line_break_holder] -->          fallbackCopy(text, btn);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        fallbackCopy(text, btn);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function showCopied(btn) {<!-- [et_pb_line_break_holder] -->    var originalText = btn.textContent;<!-- [et_pb_line_break_holder] -->    btn.textContent = 'Copi\u00e9 \u2713';<!-- [et_pb_line_break_holder] -->    btn.classList.add('is-copied');<!-- [et_pb_line_break_holder] -->    setTimeout(function() {<!-- [et_pb_line_break_holder] -->      btn.textContent = originalText;<!-- [et_pb_line_break_holder] -->      btn.classList.remove('is-copied');<!-- [et_pb_line_break_holder] -->    }, 1800);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function fallbackCopy(text, btn) {<!-- [et_pb_line_break_holder] -->    var ta = document.createElement('textarea');<!-- [et_pb_line_break_holder] -->    ta.value = text;<!-- [et_pb_line_break_holder] -->    ta.style.position = 'fixed';<!-- [et_pb_line_break_holder] -->    ta.style.left = '-9999px';<!-- [et_pb_line_break_holder] -->    document.body.appendChild(ta);<!-- [et_pb_line_break_holder] -->    ta.select();<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      document.execCommand('copy');<!-- [et_pb_line_break_holder] -->      showCopied(btn);<!-- [et_pb_line_break_holder] -->    } catch(e) {}<!-- [et_pb_line_break_holder] -->    document.body.removeChild(ta);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]<\/p>\n<div style=\"position:relative;width:100%;aspect-ratio:16\/9;overflow:hidden;background:#0F2C4A;\"><!-- [et_pb_line_break_holder] --><iframe srcdoc=\"<!doctype html><!-- [et_pb_line_break_holder] --><html lang=&quot;fr&quot;><head><!-- [et_pb_line_break_holder] --><meta charset=&quot;utf-8&quot;><!-- [et_pb_line_break_holder] --><title>Data Stream<\/title><!-- [et_pb_line_break_holder] --><meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;><!-- [et_pb_line_break_holder] --><link rel=&quot;preconnect&quot; href=&quot;https:\/\/fonts.googleapis.com&quot;><!-- [et_pb_line_break_holder] --><link rel=&quot;preconnect&quot; href=&quot;https:\/\/fonts.gstatic.com&quot; crossorigin><!-- [et_pb_line_break_holder] --><link href=&quot;https:\/\/fonts.googleapis.com\/css2?family=Archivo+Black&amp;family=Inter:wght@400;500;700;800;900&amp;family=JetBrains+Mono:wght@400;500;700&amp;family=Caveat:wght@500;700&amp;display=swap&quot; rel=&quot;stylesheet&quot;><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->  html,body{margin:0;padding:0;background:#0F2C4A;font-family:Inter,system-ui,sans-serif;overflow:hidden;width:100%;height:100%}<!-- [et_pb_line_break_holder] -->  #w{position:fixed;inset:0;overflow:hidden;background:#0F2C4A}<!-- [et_pb_line_break_holder] -->  #s{position:absolute;top:50%;left:50%;width:1920px;height:1080px;transform-origin:center center}<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><body><!-- [et_pb_line_break_holder] --><\/p>\n<div id=&quot;w&quot;>\n<div id=&quot;s&quot;><\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] --><script src=&quot;https:\/\/unpkg.com\/react@18.3.1\/umd\/react.production.min.js&quot;><\/script><!-- [et_pb_line_break_holder] --><script src=&quot;https:\/\/unpkg.com\/react-dom@18.3.1\/umd\/react-dom.production.min.js&quot;><\/script><!-- [et_pb_line_break_holder] --><script src=&quot;https:\/\/unpkg.com\/@babel\/standalone@7.29.0\/babel.min.js&quot;><\/script><!-- [et_pb_line_break_holder] --><script type=&quot;text\/babel&quot; data-presets=&quot;react&quot;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ animations.jsx<!-- [et_pb_line_break_holder] -->\/\/ Reusable animation starter: Stage, Timeline, Sprite, easing helpers.<!-- [et_pb_line_break_holder] -->\/\/ Usage (in an HTML file that loads React + Babel):<!-- [et_pb_line_break_holder] -->\/\/<!-- [et_pb_line_break_holder] -->\/\/   <Stage width={1280} height={720} duration={10} background=&quot;#f6f4ef&quot;><!-- [et_pb_line_break_holder] -->\/\/     <MyScene \/><!-- [et_pb_line_break_holder] -->\/\/   <\/Stage><!-- [et_pb_line_break_holder] -->\/\/<!-- [et_pb_line_break_holder] -->\/\/ Inside <Stage>, any child can call useTime() to read the current<!-- [et_pb_line_break_holder] -->\/\/ playhead (seconds). Or wrap content in <Sprite start={1} end={4}>...<\/Sprite><!-- [et_pb_line_break_holder] -->\/\/ to only render during that window -- children receive a `localTime` and<!-- [et_pb_line_break_holder] -->\/\/ `progress` via the useSprite() hook.<!-- [et_pb_line_break_holder] -->\/\/<!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 Easing functions (hand-rolled, Popmotion-style) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] -->\/\/ All easings take t \u2208 [0,1] and return eased t \u2208 [0,1] (may overshoot for back\/elastic).<!-- [et_pb_line_break_holder] -->const Easing = {<!-- [et_pb_line_break_holder] -->  linear: (t) => t,<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Quad<!-- [et_pb_line_break_holder] -->  easeInQuad:    (t) => t * t,<!-- [et_pb_line_break_holder] -->  easeOutQuad:   (t) => t * (2 - t),<!-- [et_pb_line_break_holder] -->  easeInOutQuad: (t) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Cubic<!-- [et_pb_line_break_holder] -->  easeInCubic:    (t) => t * t * t,<!-- [et_pb_line_break_holder] -->  easeOutCubic:   (t) => (--t) * t * t + 1,<!-- [et_pb_line_break_holder] -->  easeInOutCubic: (t) => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Quart<!-- [et_pb_line_break_holder] -->  easeInQuart:    (t) => t * t * t * t,<!-- [et_pb_line_break_holder] -->  easeOutQuart:   (t) => 1 - (--t) * t * t * t,<!-- [et_pb_line_break_holder] -->  easeInOutQuart: (t) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t),<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Expo<!-- [et_pb_line_break_holder] -->  easeInExpo:  (t) => (t === 0 ? 0 : Math.pow(2, 10 * (t - 1))),<!-- [et_pb_line_break_holder] -->  easeOutExpo: (t) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t)),<!-- [et_pb_line_break_holder] -->  easeInOutExpo: (t) => {<!-- [et_pb_line_break_holder] -->    if (t === 0) return 0;<!-- [et_pb_line_break_holder] -->    if (t === 1) return 1;<!-- [et_pb_line_break_holder] -->    if (t < 0.5) return 0.5 * Math.pow(2, 20 * t - 10);<!-- [et_pb_line_break_holder] -->    return 1 - 0.5 * Math.pow(2, -20 * t + 10);<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Sine<!-- [et_pb_line_break_holder] -->  easeInSine:    (t) => 1 - Math.cos((t * Math.PI) \/ 2),<!-- [et_pb_line_break_holder] -->  easeOutSine:   (t) => Math.sin((t * Math.PI) \/ 2),<!-- [et_pb_line_break_holder] -->  easeInOutSine: (t) => -(Math.cos(Math.PI * t) - 1) \/ 2,<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Back (overshoot)<!-- [et_pb_line_break_holder] -->  easeOutBack: (t) => {<!-- [et_pb_line_break_holder] -->    const c1 = 1.70158, c3 = c1 + 1;<!-- [et_pb_line_break_holder] -->    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  easeInBack: (t) => {<!-- [et_pb_line_break_holder] -->    const c1 = 1.70158, c3 = c1 + 1;<!-- [et_pb_line_break_holder] -->    return c3 * t * t * t - c1 * t * t;<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->  easeInOutBack: (t) => {<!-- [et_pb_line_break_holder] -->    const c1 = 1.70158, c2 = c1 * 1.525;<!-- [et_pb_line_break_holder] -->    return t < 0.5<!-- [et_pb_line_break_holder] -->      ? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) \/ 2<!-- [et_pb_line_break_holder] -->      : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) \/ 2;<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Elastic<!-- [et_pb_line_break_holder] -->  easeOutElastic: (t) => {<!-- [et_pb_line_break_holder] -->    const c4 = (2 * Math.PI) \/ 3;<!-- [et_pb_line_break_holder] -->    if (t === 0) return 0;<!-- [et_pb_line_break_holder] -->    if (t === 1) return 1;<!-- [et_pb_line_break_holder] -->    return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;<!-- [et_pb_line_break_holder] -->  },<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 Core interpolation helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Clamp a value to [min, max]<!-- [et_pb_line_break_holder] -->const clamp = (v, min, max) => Math.max(min, Math.min(max, v));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ interpolate([0, 0.5, 1], [0, 100, 50], ease?) -> fn(t)<!-- [et_pb_line_break_holder] -->\/\/ Popmotion-style: linearly maps t across input keyframes to output values,<!-- [et_pb_line_break_holder] -->\/\/ with optional easing per segment (single fn or array of fns).<!-- [et_pb_line_break_holder] -->function interpolate(input, output, ease = Easing.linear) {<!-- [et_pb_line_break_holder] -->  return (t) => {<!-- [et_pb_line_break_holder] -->    if (t <= input[0]) return output[0];<!-- [et_pb_line_break_holder] -->    if (t >= input[input.length - 1]) return output[output.length - 1];<!-- [et_pb_line_break_holder] -->    for (let i = 0; i < input.length - 1; i++) {<!-- [et_pb_line_break_holder] -->      if (t >= input[i] &amp;&amp; t <= input[i + 1]) {<!-- [et_pb_line_break_holder] -->        const span = input[i + 1] - input[i];<!-- [et_pb_line_break_holder] -->        const local = span === 0 ? 0 : (t - input[i]) \/ span;<!-- [et_pb_line_break_holder] -->        const easeFn = Array.isArray(ease) ? (ease[i] || Easing.linear) : ease;<!-- [et_pb_line_break_holder] -->        const eased = easeFn(local);<!-- [et_pb_line_break_holder] -->        return output[i] + (output[i + 1] - output[i]) * eased;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return output[output.length - 1];<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ animate({from, to, start, end, ease})(t) \u2014 simpler single-segment tween.<!-- [et_pb_line_break_holder] -->\/\/ Returns `from` before `start`, `to` after `end`.<!-- [et_pb_line_break_holder] -->function animate({ from = 0, to = 1, start = 0, end = 1, ease = Easing.easeInOutCubic }) {<!-- [et_pb_line_break_holder] -->  return (t) => {<!-- [et_pb_line_break_holder] -->    if (t <= start) return from;<!-- [et_pb_line_break_holder] -->    if (t >= end) return to;<!-- [et_pb_line_break_holder] -->    const local = (t - start) \/ (end - start);<!-- [et_pb_line_break_holder] -->    return from + (to - from) * ease(local);<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 Timeline context \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const TimelineContext = React.createContext({ time: 0, duration: 10, playing: false });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const useTime = () => React.useContext(TimelineContext).time;<!-- [et_pb_line_break_holder] -->const useTimeline = () => React.useContext(TimelineContext);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 Sprite \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] -->\/\/ Renders children only when the playhead is inside [start, end]. Provides<!-- [et_pb_line_break_holder] -->\/\/ a sub-context with `localTime` (seconds since start) and `progress` (0..1).<!-- [et_pb_line_break_holder] -->\/\/<!-- [et_pb_line_break_holder] -->\/\/   <Sprite start={2} end={5}><!-- [et_pb_line_break_holder] -->\/\/     {({ localTime, progress }) => <Thing x={progress * 100} \/>}<!-- [et_pb_line_break_holder] -->\/\/   <\/Sprite><!-- [et_pb_line_break_holder] -->\/\/<!-- [et_pb_line_break_holder] -->\/\/ Or as a plain wrapper \u2014 children can call useSprite() themselves.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const SpriteContext = React.createContext({ localTime: 0, progress: 0, duration: 0 });<!-- [et_pb_line_break_holder] -->const useSprite = () => React.useContext(SpriteContext);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function Sprite({ start = 0, end = Infinity, children, keepMounted = false }) {<!-- [et_pb_line_break_holder] -->  const { time } = useTimeline();<!-- [et_pb_line_break_holder] -->  const visible = time >= start &amp;&amp; time <= end;<!-- [et_pb_line_break_holder] -->  if (!visible &amp;&amp; !keepMounted) return null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const duration = end - start;<!-- [et_pb_line_break_holder] -->  const localTime = Math.max(0, time - start);<!-- [et_pb_line_break_holder] -->  const progress = duration > 0 &amp;&amp; isFinite(duration)<!-- [et_pb_line_break_holder] -->    ? clamp(localTime \/ duration, 0, 1)<!-- [et_pb_line_break_holder] -->    : 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const value = { localTime, progress, duration, visible };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <SpriteContext.Provider value={value}><!-- [et_pb_line_break_holder] -->      {typeof children === 'function' ? children(value) : children}<!-- [et_pb_line_break_holder] -->    <\/SpriteContext.Provider><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 Sample sprite components \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ TextSprite: fades\/slides text in on entry, holds, then fades out on exit.<!-- [et_pb_line_break_holder] -->\/\/ Props: text, x, y, size, color, font, entryDur, exitDur, align<!-- [et_pb_line_break_holder] -->function TextSprite({<!-- [et_pb_line_break_holder] -->  text,<!-- [et_pb_line_break_holder] -->  x = 0, y = 0,<!-- [et_pb_line_break_holder] -->  size = 48,<!-- [et_pb_line_break_holder] -->  color = '#111',<!-- [et_pb_line_break_holder] -->  font = 'Inter, system-ui, sans-serif',<!-- [et_pb_line_break_holder] -->  weight = 600,<!-- [et_pb_line_break_holder] -->  entryDur = 0.45,<!-- [et_pb_line_break_holder] -->  exitDur = 0.35,<!-- [et_pb_line_break_holder] -->  entryEase = Easing.easeOutBack,<!-- [et_pb_line_break_holder] -->  exitEase = Easing.easeInCubic,<!-- [et_pb_line_break_holder] -->  align = 'left',<!-- [et_pb_line_break_holder] -->  letterSpacing = '-0.01em',<!-- [et_pb_line_break_holder] -->}) {<!-- [et_pb_line_break_holder] -->  const { localTime, duration } = useSprite();<!-- [et_pb_line_break_holder] -->  const exitStart = Math.max(0, duration - exitDur);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let opacity = 1;<!-- [et_pb_line_break_holder] -->  let ty = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (localTime < entryDur) {<!-- [et_pb_line_break_holder] -->    const t = entryEase(clamp(localTime \/ entryDur, 0, 1));<!-- [et_pb_line_break_holder] -->    opacity = t;<!-- [et_pb_line_break_holder] -->    ty = (1 - t) * 16;<!-- [et_pb_line_break_holder] -->  } else if (localTime > exitStart) {<!-- [et_pb_line_break_holder] -->    const t = exitEase(clamp((localTime - exitStart) \/ exitDur, 0, 1));<!-- [et_pb_line_break_holder] -->    opacity = 1 - t;<!-- [et_pb_line_break_holder] -->    ty = -t * 8;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const translateX = align === 'center' ? '-50%' : align === 'right' ? '-100%' : '0';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute',<!-- [et_pb_line_break_holder] -->      left: x, top: y,<!-- [et_pb_line_break_holder] -->      transform: `translate(${translateX}, ${ty}px)`,<!-- [et_pb_line_break_holder] -->      opacity,<!-- [et_pb_line_break_holder] -->      fontFamily: font,<!-- [et_pb_line_break_holder] -->      fontSize: size,<!-- [et_pb_line_break_holder] -->      fontWeight: weight,<!-- [et_pb_line_break_holder] -->      color,<!-- [et_pb_line_break_holder] -->      letterSpacing,<!-- [et_pb_line_break_holder] -->      whiteSpace: 'pre',<!-- [et_pb_line_break_holder] -->      lineHeight: 1.1,<!-- [et_pb_line_break_holder] -->      willChange: 'transform, opacity',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      {text}<!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ ImageSprite: scales + fades in; optional Ken Burns drift during hold.<!-- [et_pb_line_break_holder] -->function ImageSprite({<!-- [et_pb_line_break_holder] -->  src,<!-- [et_pb_line_break_holder] -->  x = 0, y = 0,<!-- [et_pb_line_break_holder] -->  width = 400, height = 300,<!-- [et_pb_line_break_holder] -->  entryDur = 0.6,<!-- [et_pb_line_break_holder] -->  exitDur = 0.4,<!-- [et_pb_line_break_holder] -->  kenBurns = false,<!-- [et_pb_line_break_holder] -->  kenBurnsScale = 1.08,<!-- [et_pb_line_break_holder] -->  radius = 12,<!-- [et_pb_line_break_holder] -->  fit = 'cover',<!-- [et_pb_line_break_holder] -->  placeholder = null, \/\/ {label: string} for striped placeholder<!-- [et_pb_line_break_holder] -->}) {<!-- [et_pb_line_break_holder] -->  const { localTime, duration } = useSprite();<!-- [et_pb_line_break_holder] -->  const exitStart = Math.max(0, duration - exitDur);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let opacity = 1;<!-- [et_pb_line_break_holder] -->  let scale = 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (localTime < entryDur) {<!-- [et_pb_line_break_holder] -->    const t = Easing.easeOutCubic(clamp(localTime \/ entryDur, 0, 1));<!-- [et_pb_line_break_holder] -->    opacity = t;<!-- [et_pb_line_break_holder] -->    scale = 0.96 + 0.04 * t;<!-- [et_pb_line_break_holder] -->  } else if (localTime > exitStart) {<!-- [et_pb_line_break_holder] -->    const t = Easing.easeInCubic(clamp((localTime - exitStart) \/ exitDur, 0, 1));<!-- [et_pb_line_break_holder] -->    opacity = 1 - t;<!-- [et_pb_line_break_holder] -->    scale = (kenBurns ? kenBurnsScale : 1) + 0.02 * t;<!-- [et_pb_line_break_holder] -->  } else if (kenBurns) {<!-- [et_pb_line_break_holder] -->    const holdSpan = exitStart - entryDur;<!-- [et_pb_line_break_holder] -->    const holdT = holdSpan > 0 ? (localTime - entryDur) \/ holdSpan : 0;<!-- [et_pb_line_break_holder] -->    scale = 1 + (kenBurnsScale - 1) * holdT;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const content = placeholder ? (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      width: '100%', height: '100%',<!-- [et_pb_line_break_holder] -->      display: 'flex', alignItems: 'center', justifyContent: 'center',<!-- [et_pb_line_break_holder] -->      background: 'repeating-linear-gradient(135deg, #e9e6df 0 10px, #dcd8cf 10px 20px)',<!-- [et_pb_line_break_holder] -->      color: '#6b6458',<!-- [et_pb_line_break_holder] -->      fontFamily: 'JetBrains Mono, ui-monospace, monospace',<!-- [et_pb_line_break_holder] -->      fontSize: 13,<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.04em',<!-- [et_pb_line_break_holder] -->      textTransform: 'uppercase',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      {placeholder.label || 'image'}<!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  ) : (<!-- [et_pb_line_break_holder] -->    <img src={src} alt=&quot;&quot; style={{ width: '100%', height: '100%', objectFit: fit, display: 'block' }} \/><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute',<!-- [et_pb_line_break_holder] -->      left: x, top: y,<!-- [et_pb_line_break_holder] -->      width, height,<!-- [et_pb_line_break_holder] -->      opacity,<!-- [et_pb_line_break_holder] -->      transform: `scale(${scale})`,<!-- [et_pb_line_break_holder] -->      transformOrigin: 'center',<!-- [et_pb_line_break_holder] -->      borderRadius: radius,<!-- [et_pb_line_break_holder] -->      overflow: 'hidden',<!-- [et_pb_line_break_holder] -->      willChange: 'transform, opacity',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      {content}<!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ RectSprite: simple rectangle that animates position\/size\/color via props.<!-- [et_pb_line_break_holder] -->\/\/ Useful demo primitive \u2014 takes a `render` fn for per-frame customization.<!-- [et_pb_line_break_holder] -->function RectSprite({<!-- [et_pb_line_break_holder] -->  x = 0, y = 0,<!-- [et_pb_line_break_holder] -->  width = 100, height = 100,<!-- [et_pb_line_break_holder] -->  color = '#111',<!-- [et_pb_line_break_holder] -->  radius = 8,<!-- [et_pb_line_break_holder] -->  entryDur = 0.4,<!-- [et_pb_line_break_holder] -->  exitDur = 0.3,<!-- [et_pb_line_break_holder] -->  render, \/\/ optional: (ctx) => style overrides<!-- [et_pb_line_break_holder] -->}) {<!-- [et_pb_line_break_holder] -->  const spriteCtx = useSprite();<!-- [et_pb_line_break_holder] -->  const { localTime, duration } = spriteCtx;<!-- [et_pb_line_break_holder] -->  const exitStart = Math.max(0, duration - exitDur);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let opacity = 1;<!-- [et_pb_line_break_holder] -->  let scale = 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (localTime < entryDur) {<!-- [et_pb_line_break_holder] -->    const t = Easing.easeOutBack(clamp(localTime \/ entryDur, 0, 1));<!-- [et_pb_line_break_holder] -->    opacity = clamp(localTime \/ entryDur, 0, 1);<!-- [et_pb_line_break_holder] -->    scale = 0.4 + 0.6 * t;<!-- [et_pb_line_break_holder] -->  } else if (localTime > exitStart) {<!-- [et_pb_line_break_holder] -->    const t = Easing.easeInQuad(clamp((localTime - exitStart) \/ exitDur, 0, 1));<!-- [et_pb_line_break_holder] -->    opacity = 1 - t;<!-- [et_pb_line_break_holder] -->    scale = 1 - 0.15 * t;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const overrides = render ? render(spriteCtx) : {};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute',<!-- [et_pb_line_break_holder] -->      left: x, top: y,<!-- [et_pb_line_break_holder] -->      width, height,<!-- [et_pb_line_break_holder] -->      background: color,<!-- [et_pb_line_break_holder] -->      borderRadius: radius,<!-- [et_pb_line_break_holder] -->      opacity,<!-- [et_pb_line_break_holder] -->      transform: `scale(${scale})`,<!-- [et_pb_line_break_holder] -->      transformOrigin: 'center',<!-- [et_pb_line_break_holder] -->      willChange: 'transform, opacity',<!-- [et_pb_line_break_holder] -->      ...overrides,<!-- [et_pb_line_break_holder] -->    }} \/><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function Stage({<!-- [et_pb_line_break_holder] -->  width = 1280,<!-- [et_pb_line_break_holder] -->  height = 720,<!-- [et_pb_line_break_holder] -->  duration = 10,<!-- [et_pb_line_break_holder] -->  background = '#f6f4ef',<!-- [et_pb_line_break_holder] -->  fps = 60,<!-- [et_pb_line_break_holder] -->  loop = true,<!-- [et_pb_line_break_holder] -->  autoplay = true,<!-- [et_pb_line_break_holder] -->  persistKey = 'animstage',<!-- [et_pb_line_break_holder] -->  children,<!-- [et_pb_line_break_holder] -->}) {<!-- [et_pb_line_break_holder] -->  const [time, setTime] = React.useState(() => {<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const v = parseFloat(localStorage.getItem(persistKey + ':t') || '0');<!-- [et_pb_line_break_holder] -->      return isFinite(v) ? clamp(v, 0, duration) : 0;<!-- [et_pb_line_break_holder] -->    } catch { return 0; }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  const [playing, setPlaying] = React.useState(autoplay);<!-- [et_pb_line_break_holder] -->  const [hoverTime, setHoverTime] = React.useState(null);<!-- [et_pb_line_break_holder] -->  const [scale, setScale] = React.useState(1);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const stageRef = React.useRef(null);<!-- [et_pb_line_break_holder] -->  const canvasRef = React.useRef(null);<!-- [et_pb_line_break_holder] -->  const rafRef = React.useRef(null);<!-- [et_pb_line_break_holder] -->  const lastTsRef = React.useRef(null);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Persist playhead<!-- [et_pb_line_break_holder] -->  React.useEffect(() => {<!-- [et_pb_line_break_holder] -->    try { localStorage.setItem(persistKey + ':t', String(time)); } catch {}<!-- [et_pb_line_break_holder] -->  }, [time, persistKey]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Auto-scale to fit viewport<!-- [et_pb_line_break_holder] -->  React.useEffect(() => {<!-- [et_pb_line_break_holder] -->    if (!stageRef.current) return;<!-- [et_pb_line_break_holder] -->    const el = stageRef.current;<!-- [et_pb_line_break_holder] -->    const measure = () => {<!-- [et_pb_line_break_holder] -->      const barH = 44; \/\/ playback bar height<!-- [et_pb_line_break_holder] -->      const s = Math.min(<!-- [et_pb_line_break_holder] -->        el.clientWidth \/ width,<!-- [et_pb_line_break_holder] -->        (el.clientHeight - barH) \/ height<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->      setScale(Math.max(0.05, s));<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->    measure();<!-- [et_pb_line_break_holder] -->    const ro = new ResizeObserver(measure);<!-- [et_pb_line_break_holder] -->    ro.observe(el);<!-- [et_pb_line_break_holder] -->    window.addEventListener('resize', measure);<!-- [et_pb_line_break_holder] -->    return () => {<!-- [et_pb_line_break_holder] -->      ro.disconnect();<!-- [et_pb_line_break_holder] -->      window.removeEventListener('resize', measure);<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->  }, [width, height]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Animation loop<!-- [et_pb_line_break_holder] -->  React.useEffect(() => {<!-- [et_pb_line_break_holder] -->    if (!playing) {<!-- [et_pb_line_break_holder] -->      lastTsRef.current = null;<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    const step = (ts) => {<!-- [et_pb_line_break_holder] -->      if (lastTsRef.current == null) lastTsRef.current = ts;<!-- [et_pb_line_break_holder] -->      const dt = (ts - lastTsRef.current) \/ 1000;<!-- [et_pb_line_break_holder] -->      lastTsRef.current = ts;<!-- [et_pb_line_break_holder] -->      setTime((t) => {<!-- [et_pb_line_break_holder] -->        let next = t + dt;<!-- [et_pb_line_break_holder] -->        if (next >= duration) {<!-- [et_pb_line_break_holder] -->          if (loop) next = next % duration;<!-- [et_pb_line_break_holder] -->          else { next = duration; setPlaying(false); }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        return next;<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      rafRef.current = requestAnimationFrame(step);<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->    rafRef.current = requestAnimationFrame(step);<!-- [et_pb_line_break_holder] -->    return () => {<!-- [et_pb_line_break_holder] -->      if (rafRef.current) cancelAnimationFrame(rafRef.current);<!-- [et_pb_line_break_holder] -->      lastTsRef.current = null;<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->  }, [playing, duration, loop]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Keyboard: space = play\/pause, \u2190 \u2192 = seek<!-- [et_pb_line_break_holder] -->  React.useEffect(() => {<!-- [et_pb_line_break_holder] -->    const onKey = (e) => {<!-- [et_pb_line_break_holder] -->      if (e.target &amp;&amp; (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA')) return;<!-- [et_pb_line_break_holder] -->      if (e.code === 'Space') {<!-- [et_pb_line_break_holder] -->        e.preventDefault();<!-- [et_pb_line_break_holder] -->        setPlaying(p => !p);<!-- [et_pb_line_break_holder] -->      } else if (e.code === 'ArrowLeft') {<!-- [et_pb_line_break_holder] -->        setTime(t => clamp(t - (e.shiftKey ? 1 : 0.1), 0, duration));<!-- [et_pb_line_break_holder] -->      } else if (e.code === 'ArrowRight') {<!-- [et_pb_line_break_holder] -->        setTime(t => clamp(t + (e.shiftKey ? 1 : 0.1), 0, duration));<!-- [et_pb_line_break_holder] -->      } else if (e.key === '0' || e.code === 'Home') {<!-- [et_pb_line_break_holder] -->        setTime(0);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->    window.addEventListener('keydown', onKey);<!-- [et_pb_line_break_holder] -->    return () => window.removeEventListener('keydown', onKey);<!-- [et_pb_line_break_holder] -->  }, [duration]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const displayTime = hoverTime != null ? hoverTime : time;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const ctxValue = React.useMemo(<!-- [et_pb_line_break_holder] -->    () => ({ time: displayTime, duration, playing, setTime, setPlaying }),<!-- [et_pb_line_break_holder] -->    [displayTime, duration, playing]<!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <div<!-- [et_pb_line_break_holder] -->      ref={stageRef}<!-- [et_pb_line_break_holder] -->      style={{<!-- [et_pb_line_break_holder] -->        position: 'absolute', inset: 0,<!-- [et_pb_line_break_holder] -->        display: 'flex', flexDirection: 'column',<!-- [et_pb_line_break_holder] -->        alignItems: 'center',<!-- [et_pb_line_break_holder] -->        background: '#0a0a0a',<!-- [et_pb_line_break_holder] -->        fontFamily: 'Inter, system-ui, sans-serif',<!-- [et_pb_line_break_holder] -->      }}<!-- [et_pb_line_break_holder] -->    ><!-- [et_pb_line_break_holder] -->      {\/* Canvas area \u2014 vertically centered in remaining space *\/}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        flex: 1,<!-- [et_pb_line_break_holder] -->        width: '100%',<!-- [et_pb_line_break_holder] -->        display: 'flex', alignItems: 'center', justifyContent: 'center',<!-- [et_pb_line_break_holder] -->        overflow: 'hidden',<!-- [et_pb_line_break_holder] -->        minHeight: 0,<!-- [et_pb_line_break_holder] -->      }}><!-- [et_pb_line_break_holder] -->        <div<!-- [et_pb_line_break_holder] -->          ref={canvasRef}<!-- [et_pb_line_break_holder] -->          style={{<!-- [et_pb_line_break_holder] -->            width, height,<!-- [et_pb_line_break_holder] -->            background,<!-- [et_pb_line_break_holder] -->            position: 'relative',<!-- [et_pb_line_break_holder] -->            transform: `scale(${scale})`,<!-- [et_pb_line_break_holder] -->            transformOrigin: 'center',<!-- [et_pb_line_break_holder] -->            flexShrink: 0,<!-- [et_pb_line_break_holder] -->            boxShadow: '0 20px 60px rgba(0,0,0,0.4)',<!-- [et_pb_line_break_holder] -->            overflow: 'hidden',<!-- [et_pb_line_break_holder] -->          }}<!-- [et_pb_line_break_holder] -->        ><!-- [et_pb_line_break_holder] -->          <TimelineContext.Provider value={ctxValue}><!-- [et_pb_line_break_holder] -->            {children}<!-- [et_pb_line_break_holder] -->          <\/TimelineContext.Provider><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* Playback bar \u2014 stacked below canvas, never overlapping *\/}<!-- [et_pb_line_break_holder] -->      <PlaybackBar<!-- [et_pb_line_break_holder] -->        time={displayTime}<!-- [et_pb_line_break_holder] -->        actualTime={time}<!-- [et_pb_line_break_holder] -->        duration={duration}<!-- [et_pb_line_break_holder] -->        playing={playing}<!-- [et_pb_line_break_holder] -->        onPlayPause={() => setPlaying(p => !p)}<!-- [et_pb_line_break_holder] -->        onReset={() => { setTime(0); }}<!-- [et_pb_line_break_holder] -->        onSeek={(t) => setTime(t)}<!-- [et_pb_line_break_holder] -->        onHover={(t) => setHoverTime(t)}<!-- [et_pb_line_break_holder] -->      \/><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 Playback bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] -->\/\/ Play\/pause, return-to-begin, scrub track, time display.<!-- [et_pb_line_break_holder] -->\/\/ Uses fixed-width time fields so layout doesn't thrash.<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function PlaybackBar({ time, duration, playing, onPlayPause, onReset, onSeek, onHover }) {<!-- [et_pb_line_break_holder] -->  const trackRef = React.useRef(null);<!-- [et_pb_line_break_holder] -->  const [dragging, setDragging] = React.useState(false);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const timeFromEvent = React.useCallback((e) => {<!-- [et_pb_line_break_holder] -->    const rect = trackRef.current.getBoundingClientRect();<!-- [et_pb_line_break_holder] -->    const x = clamp((e.clientX - rect.left) \/ rect.width, 0, 1);<!-- [et_pb_line_break_holder] -->    return x * duration;<!-- [et_pb_line_break_holder] -->  }, [duration]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const onTrackMove = (e) => {<!-- [et_pb_line_break_holder] -->    if (!trackRef.current) return;<!-- [et_pb_line_break_holder] -->    const t = timeFromEvent(e);<!-- [et_pb_line_break_holder] -->    if (dragging) {<!-- [et_pb_line_break_holder] -->      onSeek(t);<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      onHover(t);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const onTrackLeave = () => {<!-- [et_pb_line_break_holder] -->    if (!dragging) onHover(null);<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const onTrackDown = (e) => {<!-- [et_pb_line_break_holder] -->    setDragging(true);<!-- [et_pb_line_break_holder] -->    const t = timeFromEvent(e);<!-- [et_pb_line_break_holder] -->    onSeek(t);<!-- [et_pb_line_break_holder] -->    onHover(null);<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  React.useEffect(() => {<!-- [et_pb_line_break_holder] -->    if (!dragging) return;<!-- [et_pb_line_break_holder] -->    const onUp = () => setDragging(false);<!-- [et_pb_line_break_holder] -->    const onMove = (e) => {<!-- [et_pb_line_break_holder] -->      if (!trackRef.current) return;<!-- [et_pb_line_break_holder] -->      const t = timeFromEvent(e);<!-- [et_pb_line_break_holder] -->      onSeek(t);<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->    window.addEventListener('mouseup', onUp);<!-- [et_pb_line_break_holder] -->    window.addEventListener('mousemove', onMove);<!-- [et_pb_line_break_holder] -->    return () => {<!-- [et_pb_line_break_holder] -->      window.removeEventListener('mouseup', onUp);<!-- [et_pb_line_break_holder] -->      window.removeEventListener('mousemove', onMove);<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->  }, [dragging, timeFromEvent, onSeek]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const pct = duration > 0 ? (time \/ duration) * 100 : 0;<!-- [et_pb_line_break_holder] -->  const fmt = (t) => {<!-- [et_pb_line_break_holder] -->    const total = Math.max(0, t);<!-- [et_pb_line_break_holder] -->    const m = Math.floor(total \/ 60);<!-- [et_pb_line_break_holder] -->    const s = Math.floor(total % 60);<!-- [et_pb_line_break_holder] -->    const cs = Math.floor((total * 100) % 100);<!-- [et_pb_line_break_holder] -->    return `${String(m).padStart(1, '0')}:${String(s).padStart(2, '0')}.${String(cs).padStart(2, '0')}`;<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const mono = 'JetBrains Mono, ui-monospace, SFMono-Regular, monospace';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      display: 'flex', alignItems: 'center', gap: 12,<!-- [et_pb_line_break_holder] -->      padding: '8px 16px',<!-- [et_pb_line_break_holder] -->      background: 'rgba(20,20,20,0.92)',<!-- [et_pb_line_break_holder] -->      borderTop: '1px solid rgba(255,255,255,0.08)',<!-- [et_pb_line_break_holder] -->      width: '100%',<!-- [et_pb_line_break_holder] -->      maxWidth: 680,<!-- [et_pb_line_break_holder] -->      alignSelf: 'center',<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      borderRadius: 8,<!-- [et_pb_line_break_holder] -->      color: '#f6f4ef',<!-- [et_pb_line_break_holder] -->      fontFamily: 'Inter, system-ui, sans-serif',<!-- [et_pb_line_break_holder] -->      userSelect: 'none',<!-- [et_pb_line_break_holder] -->      flexShrink: 0,<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <IconButton onClick={onReset} title=&quot;Return to start (0)&quot;><!-- [et_pb_line_break_holder] -->        <svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 14 14&quot; fill=&quot;none&quot;><!-- [et_pb_line_break_holder] -->          <path d=&quot;M3 2v10M12 2L5 7l7 5V2z&quot; stroke=&quot;currentColor&quot; strokeWidth=&quot;1.5&quot; strokeLinejoin=&quot;round&quot; strokeLinecap=&quot;round&quot;\/><!-- [et_pb_line_break_holder] -->        <\/svg><!-- [et_pb_line_break_holder] -->      <\/IconButton><!-- [et_pb_line_break_holder] -->      <IconButton onClick={onPlayPause} title=&quot;Play\/pause (space)&quot;><!-- [et_pb_line_break_holder] -->        {playing ? (<!-- [et_pb_line_break_holder] -->          <svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 14 14&quot; fill=&quot;none&quot;><!-- [et_pb_line_break_holder] -->            <rect x=&quot;3&quot; y=&quot;2&quot; width=&quot;3&quot; height=&quot;10&quot; fill=&quot;currentColor&quot;\/><!-- [et_pb_line_break_holder] -->            <rect x=&quot;8&quot; y=&quot;2&quot; width=&quot;3&quot; height=&quot;10&quot; fill=&quot;currentColor&quot;\/><!-- [et_pb_line_break_holder] -->          <\/svg><!-- [et_pb_line_break_holder] -->        ) : (<!-- [et_pb_line_break_holder] -->          <svg width=&quot;14&quot; height=&quot;14&quot; viewBox=&quot;0 0 14 14&quot; fill=&quot;none&quot;><!-- [et_pb_line_break_holder] -->            <path d=&quot;M3 2l9 5-9 5V2z&quot; fill=&quot;currentColor&quot;\/><!-- [et_pb_line_break_holder] -->          <\/svg><!-- [et_pb_line_break_holder] -->        )}<!-- [et_pb_line_break_holder] -->      <\/IconButton><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* Current time: fixed width so it doesn't thrash *\/}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        fontFamily: mono,<!-- [et_pb_line_break_holder] -->        fontSize: 12,<!-- [et_pb_line_break_holder] -->        fontVariantNumeric: 'tabular-nums',<!-- [et_pb_line_break_holder] -->        width: 64, textAlign: 'right',<!-- [et_pb_line_break_holder] -->        color: '#f6f4ef',<!-- [et_pb_line_break_holder] -->      }}><!-- [et_pb_line_break_holder] -->        {fmt(time)}<!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* Scrub track *\/}<!-- [et_pb_line_break_holder] -->      <div<!-- [et_pb_line_break_holder] -->        ref={trackRef}<!-- [et_pb_line_break_holder] -->        onMouseMove={onTrackMove}<!-- [et_pb_line_break_holder] -->        onMouseLeave={onTrackLeave}<!-- [et_pb_line_break_holder] -->        onMouseDown={onTrackDown}<!-- [et_pb_line_break_holder] -->        style={{<!-- [et_pb_line_break_holder] -->          flex: 1,<!-- [et_pb_line_break_holder] -->          height: 22,<!-- [et_pb_line_break_holder] -->          position: 'relative',<!-- [et_pb_line_break_holder] -->          cursor: 'pointer',<!-- [et_pb_line_break_holder] -->          display: 'flex', alignItems: 'center',<!-- [et_pb_line_break_holder] -->        }}<!-- [et_pb_line_break_holder] -->      ><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->          position: 'absolute',<!-- [et_pb_line_break_holder] -->          left: 0, right: 0, height: 4,<!-- [et_pb_line_break_holder] -->          background: 'rgba(255,255,255,0.12)',<!-- [et_pb_line_break_holder] -->          borderRadius: 2,<!-- [et_pb_line_break_holder] -->        }}\/><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->          position: 'absolute',<!-- [et_pb_line_break_holder] -->          left: 0, width: `${pct}%`, height: 4,<!-- [et_pb_line_break_holder] -->          background: 'oklch(72% 0.12 250)',<!-- [et_pb_line_break_holder] -->          borderRadius: 2,<!-- [et_pb_line_break_holder] -->        }}\/><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->          position: 'absolute',<!-- [et_pb_line_break_holder] -->          left: `${pct}%`, top: '50%',<!-- [et_pb_line_break_holder] -->          width: 12, height: 12,<!-- [et_pb_line_break_holder] -->          marginLeft: -6, marginTop: -6,<!-- [et_pb_line_break_holder] -->          background: '#fff',<!-- [et_pb_line_break_holder] -->          borderRadius: 6,<!-- [et_pb_line_break_holder] -->          boxShadow: '0 2px 4px rgba(0,0,0,0.4)',<!-- [et_pb_line_break_holder] -->        }}\/><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* Duration: fixed width *\/}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        fontFamily: mono,<!-- [et_pb_line_break_holder] -->        fontSize: 12,<!-- [et_pb_line_break_holder] -->        fontVariantNumeric: 'tabular-nums',<!-- [et_pb_line_break_holder] -->        width: 64, textAlign: 'left',<!-- [et_pb_line_break_holder] -->        color: 'rgba(246,244,239,0.55)',<!-- [et_pb_line_break_holder] -->      }}><!-- [et_pb_line_break_holder] -->        {fmt(duration)}<!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function IconButton({ children, onClick, title }) {<!-- [et_pb_line_break_holder] -->  const [hover, setHover] = React.useState(false);<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <button<!-- [et_pb_line_break_holder] -->      onClick={onClick}<!-- [et_pb_line_break_holder] -->      title={title}<!-- [et_pb_line_break_holder] -->      onMouseEnter={() => setHover(true)}<!-- [et_pb_line_break_holder] -->      onMouseLeave={() => setHover(false)}<!-- [et_pb_line_break_holder] -->      style={{<!-- [et_pb_line_break_holder] -->        width: 28, height: 28,<!-- [et_pb_line_break_holder] -->        display: 'flex', alignItems: 'center', justifyContent: 'center',<!-- [et_pb_line_break_holder] -->        background: hover ? 'rgba(255,255,255,0.12)' : 'rgba(255,255,255,0.04)',<!-- [et_pb_line_break_holder] -->        border: '1px solid rgba(255,255,255,0.1)',<!-- [et_pb_line_break_holder] -->        borderRadius: 6,<!-- [et_pb_line_break_holder] -->        color: '#f6f4ef',<!-- [et_pb_line_break_holder] -->        cursor: 'pointer',<!-- [et_pb_line_break_holder] -->        padding: 0,<!-- [et_pb_line_break_holder] -->        transition: 'background 120ms',<!-- [et_pb_line_break_holder] -->      }}<!-- [et_pb_line_break_holder] -->    ><!-- [et_pb_line_break_holder] -->      {children}<!-- [et_pb_line_break_holder] -->    <\/button><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->Object.assign(window, {<!-- [et_pb_line_break_holder] -->  Easing, interpolate, animate, clamp,<!-- [et_pb_line_break_holder] -->  TimelineContext, useTime, useTimeline,<!-- [et_pb_line_break_holder] -->  Sprite, SpriteContext, useSprite,<!-- [et_pb_line_break_holder] -->  TextSprite, ImageSprite, RectSprite,<!-- [et_pb_line_break_holder] -->  Stage, PlaybackBar,<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Direction A \u2014 &quot;Data Stream&quot;<!-- [et_pb_line_break_holder] -->\/\/ Boucle 12s : binary rain + grid \u2192 JOB FAIR reveal \u2192 infos cards \u2192 CTA<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const COLORS = {<!-- [et_pb_line_break_holder] -->  navy: '#0F2C4A',<!-- [et_pb_line_break_holder] -->  navyDeep: '#081A2E',<!-- [et_pb_line_break_holder] -->  gold: '#F5B72C',<!-- [et_pb_line_break_holder] -->  goldSoft: '#F8C94D',<!-- [et_pb_line_break_holder] -->  cream: '#F8F4EC',<!-- [et_pb_line_break_holder] -->  white: '#FFFFFF',<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const FONTS = {<!-- [et_pb_line_break_holder] -->  display: '&quot;Archivo Black&quot;, &quot;Anton&quot;, system-ui, sans-serif',<!-- [et_pb_line_break_holder] -->  sans: '&quot;Inter&quot;, system-ui, sans-serif',<!-- [et_pb_line_break_holder] -->  script: '&quot;Caveat&quot;, cursive',<!-- [et_pb_line_break_holder] -->  mono: '&quot;JetBrains Mono&quot;, ui-monospace, monospace',<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] -->\/\/ Background: data grid + binary rain<!-- [et_pb_line_break_holder] -->function BinaryRain({ cols = 30, rows = 14, w = 1920, h = 1080 }) {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const colW = w \/ cols;<!-- [et_pb_line_break_holder] -->  const rowH = h \/ rows;<!-- [et_pb_line_break_holder] -->  const cells = [];<!-- [et_pb_line_break_holder] -->  for (let c = 0; c < cols; c++) {<!-- [et_pb_line_break_holder] -->    for (let r = 0; r < rows; r++) {<!-- [et_pb_line_break_holder] -->      const seed = (c * 31 + r * 7) % 97;<!-- [et_pb_line_break_holder] -->      const speed = 0.4 + (seed % 5) * 0.15;<!-- [et_pb_line_break_holder] -->      const phase = (seed % 13) \/ 13;<!-- [et_pb_line_break_holder] -->      const v = (t * speed + phase) % 1;<!-- [et_pb_line_break_holder] -->      const opacity = 0.05 + 0.18 * Math.max(0, Math.sin(v * Math.PI * 2 + r * 0.3));<!-- [et_pb_line_break_holder] -->      const ch = ((Math.floor(t * 4 + c * 3 + r) % 2) === 0) ? '0' : '1';<!-- [et_pb_line_break_holder] -->      cells.push(<!-- [et_pb_line_break_holder] -->        <\/p>\n<div key={`${c}-${r}`} style={{<!-- [et_pb_line_break_holder] -->          position: 'absolute',<!-- [et_pb_line_break_holder] -->          left: c * colW, top: r * rowH,<!-- [et_pb_line_break_holder] -->          width: colW, height: rowH,<!-- [et_pb_line_break_holder] -->          color: COLORS.gold,<!-- [et_pb_line_break_holder] -->          opacity,<!-- [et_pb_line_break_holder] -->          fontFamily: FONTS.mono,<!-- [et_pb_line_break_holder] -->          fontSize: 22,<!-- [et_pb_line_break_holder] -->          display: 'flex', alignItems: 'center', justifyContent: 'center',<!-- [et_pb_line_break_holder] -->          fontWeight: 700,<!-- [et_pb_line_break_holder] -->        }}>{ch}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  return <\/p>\n<div style={{ position: 'absolute', inset: 0, overflow: 'hidden' }}>{cells}<\/div>\n<p>;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function DataGrid({ w = 1920, h = 1080 }) {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const drift = (t * 30) % 80;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <svg width={w} height={h} style={{ position: 'absolute', inset: 0, opacity: 0.18 }}><!-- [et_pb_line_break_holder] -->      <defs><!-- [et_pb_line_break_holder] -->        <pattern id=&quot;dgrid&quot; width=&quot;80&quot; height=&quot;80&quot; patternUnits=&quot;userSpaceOnUse&quot; x={-drift} y={-drift}><!-- [et_pb_line_break_holder] -->          <path d=&quot;M80 0H0V80&quot; fill=&quot;none&quot; stroke={COLORS.gold} strokeWidth=&quot;0.6&quot; \/><!-- [et_pb_line_break_holder] -->        <\/pattern><!-- [et_pb_line_break_holder] -->      <\/defs><!-- [et_pb_line_break_holder] -->      <rect width=&quot;100%&quot; height=&quot;100%&quot; fill=&quot;url(#dgrid)&quot; \/><!-- [et_pb_line_break_holder] -->    <\/svg><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Scanning line that sweeps across<!-- [et_pb_line_break_holder] -->function ScanLine() {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const y = ((t * 180) % 1200) - 100;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: 0, right: 0,<!-- [et_pb_line_break_holder] -->      top: y, height: 2,<!-- [et_pb_line_break_holder] -->      background: `linear-gradient(90deg, transparent, ${COLORS.gold}, transparent)`,<!-- [et_pb_line_break_holder] -->      opacity: 0.5,<!-- [et_pb_line_break_holder] -->      filter: 'blur(1px)',<!-- [et_pb_line_break_holder] -->    }} \/><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Floating particles<!-- [et_pb_line_break_holder] -->function Particles() {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const particles = React.useMemo(() => {<!-- [et_pb_line_break_holder] -->    return Array.from({ length: 40 }, (_, i) => ({<!-- [et_pb_line_break_holder] -->      x: (i * 137.5) % 1920,<!-- [et_pb_line_break_holder] -->      y: (i * 89.3) % 1080,<!-- [et_pb_line_break_holder] -->      size: 2 + (i % 4),<!-- [et_pb_line_break_holder] -->      speed: 0.3 + (i % 5) * 0.1,<!-- [et_pb_line_break_holder] -->      phase: (i * 7) % 100 \/ 100,<!-- [et_pb_line_break_holder] -->    }));<!-- [et_pb_line_break_holder] -->  }, []);<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <><!-- [et_pb_line_break_holder] -->      {particles.map((p, i) => {<!-- [et_pb_line_break_holder] -->        const drift = (t * p.speed + p.phase) % 1;<!-- [et_pb_line_break_holder] -->        const y = p.y - drift * 200;<!-- [et_pb_line_break_holder] -->        const opacity = 0.15 + 0.4 * Math.sin(drift * Math.PI);<!-- [et_pb_line_break_holder] -->        return (<!-- [et_pb_line_break_holder] -->          <\/p>\n<div key={i} style={{<!-- [et_pb_line_break_holder] -->            position: 'absolute',<!-- [et_pb_line_break_holder] -->            left: p.x, top: y,<!-- [et_pb_line_break_holder] -->            width: p.size, height: p.size,<!-- [et_pb_line_break_holder] -->            background: COLORS.gold,<!-- [et_pb_line_break_holder] -->            borderRadius: '50%',<!-- [et_pb_line_break_holder] -->            opacity,<!-- [et_pb_line_break_holder] -->            boxShadow: `0 0 ${p.size * 3}px ${COLORS.gold}`,<!-- [et_pb_line_break_holder] -->          }} \/><!-- [et_pb_line_break_holder] -->        );<!-- [et_pb_line_break_holder] -->      })}<!-- [et_pb_line_break_holder] -->    <\/><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Glitch text \u2014 uses CSS clip + offset<!-- [et_pb_line_break_holder] -->function GlitchText({ children, style, intensity = 1 }) {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const flicker = Math.sin(t * 30) * intensity;<!-- [et_pb_line_break_holder] -->  const offset = Math.abs(flicker) > 0.92 ? 4 : 0;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{ position: 'relative', ...style }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ position: 'absolute', inset: 0, color: COLORS.gold, transform: `translate(${offset}px, 0)`, opacity: offset ? 0.7 : 0, mixBlendMode: 'screen' }}>{children}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ position: 'relative' }}>{children}<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ JOB FAIR title that assembles from scattered letters<!-- [et_pb_line_break_holder] -->function AssembleTitle({ x, y }) {<!-- [et_pb_line_break_holder] -->  const { localTime, duration } = useSprite();<!-- [et_pb_line_break_holder] -->  const word1 = 'JOB';<!-- [et_pb_line_break_holder] -->  const word2 = 'FAIR';<!-- [et_pb_line_break_holder] -->  const letters = (word1 + ' ' + word2).split('');<!-- [et_pb_line_break_holder] -->  const charW = 200;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: x, top: y,<!-- [et_pb_line_break_holder] -->      transform: 'translate(-50%, -50%)',<!-- [et_pb_line_break_holder] -->      display: 'flex', gap: 0,<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.display,<!-- [et_pb_line_break_holder] -->      fontSize: 280,<!-- [et_pb_line_break_holder] -->      fontWeight: 900,<!-- [et_pb_line_break_holder] -->      color: COLORS.cream,<!-- [et_pb_line_break_holder] -->      lineHeight: 0.9,<!-- [et_pb_line_break_holder] -->      letterSpacing: '-0.02em',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      {letters.map((ch, i) => {<!-- [et_pb_line_break_holder] -->        if (ch === ' ') return <\/p>\n<div key={i} style={{ width: 80 }} \/>;<!-- [et_pb_line_break_holder] -->        const delay = 0.05 + (i * 0.06);<!-- [et_pb_line_break_holder] -->        const local = clamp((localTime - delay) \/ 0.5, 0, 1);<!-- [et_pb_line_break_holder] -->        const eased = Easing.easeOutBack(local);<!-- [et_pb_line_break_holder] -->        const opacity = clamp(local * 1.4, 0, 1);<!-- [et_pb_line_break_holder] -->        const ty = (1 - eased) * 80;<!-- [et_pb_line_break_holder] -->        const tx = (1 - eased) * (((i % 2) ? 1 : -1) * 40);<!-- [et_pb_line_break_holder] -->        const blur = (1 - local) * 8;<!-- [et_pb_line_break_holder] -->        return (<!-- [et_pb_line_break_holder] -->          <span key={i} style={{<!-- [et_pb_line_break_holder] -->            display: 'inline-block',<!-- [et_pb_line_break_holder] -->            transform: `translate(${tx}px, ${ty}px)`,<!-- [et_pb_line_break_holder] -->            opacity,<!-- [et_pb_line_break_holder] -->            filter: `blur(${blur}px)`,<!-- [et_pb_line_break_holder] -->            color: COLORS.cream,<!-- [et_pb_line_break_holder] -->            textShadow: opacity > 0.95 ? `0 0 30px rgba(245,183,44,0.4)` : 'none',<!-- [et_pb_line_break_holder] -->          }}>{ch}<\/span><!-- [et_pb_line_break_holder] -->        );<!-- [et_pb_line_break_holder] -->      })}<!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Tagline above title<!-- [et_pb_line_break_holder] -->function Tagline({ x, y, text }) {<!-- [et_pb_line_break_holder] -->  const { localTime } = useSprite();<!-- [et_pb_line_break_holder] -->  const t = clamp(localTime \/ 0.6, 0, 1);<!-- [et_pb_line_break_holder] -->  const eased = Easing.easeOutCubic(t);<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: x, top: y,<!-- [et_pb_line_break_holder] -->      transform: `translate(-50%, ${(1 - eased) * 20}px)`,<!-- [et_pb_line_break_holder] -->      opacity: eased,<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.display,<!-- [et_pb_line_break_holder] -->      fontSize: 56,<!-- [et_pb_line_break_holder] -->      fontWeight: 900,<!-- [et_pb_line_break_holder] -->      color: COLORS.gold,<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.04em',<!-- [et_pb_line_break_holder] -->      whiteSpace: 'nowrap',<!-- [et_pb_line_break_holder] -->    }}>{text}<\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Info card with icon + label<!-- [et_pb_line_break_holder] -->function InfoCard({ x, y, w = 480, label, value, sub, delay = 0, side = 'left' }) {<!-- [et_pb_line_break_holder] -->  const { localTime } = useSprite();<!-- [et_pb_line_break_holder] -->  const t = clamp((localTime - delay) \/ 0.6, 0, 1);<!-- [et_pb_line_break_holder] -->  const eased = Easing.easeOutCubic(t);<!-- [et_pb_line_break_holder] -->  const exitT = clamp((localTime - 3.2) \/ 0.4, 0, 1);<!-- [et_pb_line_break_holder] -->  const exit = Easing.easeInQuad(exitT);<!-- [et_pb_line_break_holder] -->  const opacity = eased * (1 - exit);<!-- [et_pb_line_break_holder] -->  const tx = (1 - eased) * (side === 'left' ? -60 : 60) - exit * 30;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: x, top: y,<!-- [et_pb_line_break_holder] -->      width: w,<!-- [et_pb_line_break_holder] -->      transform: `translate(${tx}px, 0)`,<!-- [et_pb_line_break_holder] -->      opacity,<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        fontFamily: FONTS.mono,<!-- [et_pb_line_break_holder] -->        fontSize: 14,<!-- [et_pb_line_break_holder] -->        color: COLORS.gold,<!-- [et_pb_line_break_holder] -->        letterSpacing: '0.2em',<!-- [et_pb_line_break_holder] -->        marginBottom: 12,<!-- [et_pb_line_break_holder] -->        textTransform: 'uppercase',<!-- [et_pb_line_break_holder] -->        display: 'flex', alignItems: 'center', gap: 10,<!-- [et_pb_line_break_holder] -->      }}><!-- [et_pb_line_break_holder] -->        <\/p>\n<div style={{ width: 28, height: 1, background: COLORS.gold }} \/><!-- [et_pb_line_break_holder] -->        {label}<!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        fontFamily: FONTS.display,<!-- [et_pb_line_break_holder] -->        fontSize: 72,<!-- [et_pb_line_break_holder] -->        fontWeight: 900,<!-- [et_pb_line_break_holder] -->        color: COLORS.cream,<!-- [et_pb_line_break_holder] -->        lineHeight: 1,<!-- [et_pb_line_break_holder] -->        letterSpacing: '-0.01em',<!-- [et_pb_line_break_holder] -->      }}>{value}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      {sub &amp;&amp; (<!-- [et_pb_line_break_holder] -->        <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->          fontFamily: FONTS.sans,<!-- [et_pb_line_break_holder] -->          fontSize: 22,<!-- [et_pb_line_break_holder] -->          color: 'rgba(248,244,236,0.7)',<!-- [et_pb_line_break_holder] -->          marginTop: 10,<!-- [et_pb_line_break_holder] -->          fontWeight: 400,<!-- [et_pb_line_break_holder] -->        }}>{sub}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      )}<!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Big CTA pill<!-- [et_pb_line_break_holder] -->function CTA({ x, y, text, sub }) {<!-- [et_pb_line_break_holder] -->  const { localTime } = useSprite();<!-- [et_pb_line_break_holder] -->  const t = clamp(localTime \/ 0.6, 0, 1);<!-- [et_pb_line_break_holder] -->  const eased = Easing.easeOutBack(t);<!-- [et_pb_line_break_holder] -->  const pulse = 1 + Math.sin(localTime * 4) * 0.02;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: x, top: y,<!-- [et_pb_line_break_holder] -->      transform: `translate(-50%, -50%) scale(${eased * pulse})`,<!-- [et_pb_line_break_holder] -->      opacity: eased,<!-- [et_pb_line_break_holder] -->      textAlign: 'center',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        background: COLORS.gold,<!-- [et_pb_line_break_holder] -->        color: COLORS.navy,<!-- [et_pb_line_break_holder] -->        fontFamily: FONTS.display,<!-- [et_pb_line_break_holder] -->        fontSize: 64,<!-- [et_pb_line_break_holder] -->        fontWeight: 900,<!-- [et_pb_line_break_holder] -->        padding: '22px 56px',<!-- [et_pb_line_break_holder] -->        letterSpacing: '0.04em',<!-- [et_pb_line_break_holder] -->        boxShadow: `0 0 40px rgba(245,183,44,0.4)`,<!-- [et_pb_line_break_holder] -->      }}>{text}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      {sub &amp;&amp; (<!-- [et_pb_line_break_holder] -->        <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->          marginTop: 20,<!-- [et_pb_line_break_holder] -->          fontFamily: FONTS.mono,<!-- [et_pb_line_break_holder] -->          fontSize: 20,<!-- [et_pb_line_break_holder] -->          color: COLORS.gold,<!-- [et_pb_line_break_holder] -->          letterSpacing: '0.3em',<!-- [et_pb_line_break_holder] -->        }}>{sub}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      )}<!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Tech icons (lock shield, chip, network) \u2014 abstract data motifs<!-- [et_pb_line_break_holder] -->function FloatingIcons() {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <><!-- [et_pb_line_break_holder] -->      {\/* Top-right hex chip *\/}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        position: 'absolute', right: 100, top: 120,<!-- [et_pb_line_break_holder] -->        transform: `rotate(${Math.sin(t) * 4}deg)`,<!-- [et_pb_line_break_holder] -->        opacity: 0.5,<!-- [et_pb_line_break_holder] -->      }}><!-- [et_pb_line_break_holder] -->        <svg width=&quot;120&quot; height=&quot;120&quot; viewBox=&quot;0 0 120 120&quot; fill=&quot;none&quot;><!-- [et_pb_line_break_holder] -->          <rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;80&quot; height=&quot;80&quot; rx=&quot;8&quot; stroke={COLORS.gold} strokeWidth=&quot;2&quot;\/><!-- [et_pb_line_break_holder] -->          <rect x=&quot;38&quot; y=&quot;38&quot; width=&quot;44&quot; height=&quot;44&quot; stroke={COLORS.gold} strokeWidth=&quot;1.5&quot;\/><!-- [et_pb_line_break_holder] -->          {[10, 30, 50, 70, 90, 110].map((p, i) => (<!-- [et_pb_line_break_holder] -->            <React.Fragment key={i}><!-- [et_pb_line_break_holder] -->              <line x1={p} y1=&quot;0&quot; x2={p} y2=&quot;20&quot; stroke={COLORS.gold} strokeWidth=&quot;2&quot;\/><!-- [et_pb_line_break_holder] -->              <line x1={p} y1=&quot;100&quot; x2={p} y2=&quot;120&quot; stroke={COLORS.gold} strokeWidth=&quot;2&quot;\/><!-- [et_pb_line_break_holder] -->              <line x1=&quot;0&quot; y1={p} x2=&quot;20&quot; y2={p} stroke={COLORS.gold} strokeWidth=&quot;2&quot;\/><!-- [et_pb_line_break_holder] -->              <line x1=&quot;100&quot; y1={p} x2=&quot;120&quot; y2={p} stroke={COLORS.gold} strokeWidth=&quot;2&quot;\/><!-- [et_pb_line_break_holder] -->            <\/React.Fragment><!-- [et_pb_line_break_holder] -->          ))}<!-- [et_pb_line_break_holder] -->        <\/svg><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* Bottom-left data nodes *\/}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->        position: 'absolute', left: 80, bottom: 100,<!-- [et_pb_line_break_holder] -->        opacity: 0.4,<!-- [et_pb_line_break_holder] -->      }}><!-- [et_pb_line_break_holder] -->        <svg width=&quot;160&quot; height=&quot;120&quot; viewBox=&quot;0 0 160 120&quot; fill=&quot;none&quot;><!-- [et_pb_line_break_holder] -->          <circle cx=&quot;20&quot; cy=&quot;20&quot; r=&quot;6&quot; fill={COLORS.gold}\/><!-- [et_pb_line_break_holder] -->          <circle cx=&quot;80&quot; cy=&quot;60&quot; r=&quot;8&quot; fill={COLORS.gold}\/><!-- [et_pb_line_break_holder] -->          <circle cx=&quot;140&quot; cy=&quot;20&quot; r=&quot;6&quot; fill={COLORS.gold}\/><!-- [et_pb_line_break_holder] -->          <circle cx=&quot;40&quot; cy=&quot;100&quot; r=&quot;6&quot; fill={COLORS.gold}\/><!-- [et_pb_line_break_holder] -->          <circle cx=&quot;120&quot; cy=&quot;100&quot; r=&quot;6&quot; fill={COLORS.gold}\/><!-- [et_pb_line_break_holder] -->          <line x1=&quot;20&quot; y1=&quot;20&quot; x2=&quot;80&quot; y2=&quot;60&quot; stroke={COLORS.gold} strokeWidth=&quot;1&quot; strokeDasharray={`${10 + Math.sin(t*2)*3} 4`}\/><!-- [et_pb_line_break_holder] -->          <line x1=&quot;140&quot; y1=&quot;20&quot; x2=&quot;80&quot; y2=&quot;60&quot; stroke={COLORS.gold} strokeWidth=&quot;1&quot; strokeDasharray={`${10 + Math.sin(t*2+1)*3} 4`}\/><!-- [et_pb_line_break_holder] -->          <line x1=&quot;40&quot; y1=&quot;100&quot; x2=&quot;80&quot; y2=&quot;60&quot; stroke={COLORS.gold} strokeWidth=&quot;1&quot; strokeDasharray={`${10 + Math.sin(t*2+2)*3} 4`}\/><!-- [et_pb_line_break_holder] -->          <line x1=&quot;120&quot; y1=&quot;100&quot; x2=&quot;80&quot; y2=&quot;60&quot; stroke={COLORS.gold} strokeWidth=&quot;1&quot; strokeDasharray={`${10 + Math.sin(t*2+3)*3} 4`}\/><!-- [et_pb_line_break_holder] -->        <\/svg><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Logo placeholders (typographic \u2014 no recreation)<!-- [et_pb_line_break_holder] -->function LogoBar() {<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute',<!-- [et_pb_line_break_holder] -->      top: 50, left: 0, right: 0,<!-- [et_pb_line_break_holder] -->      display: 'flex', justifyContent: 'space-between',<!-- [et_pb_line_break_holder] -->      padding: '0 80px',<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.sans,<!-- [et_pb_line_break_holder] -->      fontWeight: 700,<!-- [et_pb_line_break_holder] -->      fontSize: 22,<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.05em',<!-- [et_pb_line_break_holder] -->      color: COLORS.cream,<!-- [et_pb_line_break_holder] -->      opacity: 0.85,<!-- [et_pb_line_break_holder] -->      zIndex: 5,<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div>EPHEC<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div>UCLouvain<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function FooterBar() {<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute',<!-- [et_pb_line_break_holder] -->      bottom: 40, left: 0, right: 0,<!-- [et_pb_line_break_holder] -->      display: 'flex', justifyContent: 'center', gap: 40,<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.mono,<!-- [et_pb_line_break_holder] -->      fontSize: 16,<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.2em',<!-- [et_pb_line_break_holder] -->      color: 'rgba(248,244,236,0.5)',<!-- [et_pb_line_break_holder] -->      zIndex: 5,<!-- [et_pb_line_break_holder] -->      textTransform: 'uppercase',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div>WWW.ADELOUVAIN.BE<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ color: COLORS.gold }}>\u25cf<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div>WWW.EPHEC.BE<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Bilingual rotating tagline<!-- [et_pb_line_break_holder] -->function BilingualLabel({ x, y, fr, en }) {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const cycle = 4; \/\/ each language shows 4s<!-- [et_pb_line_break_holder] -->  const phase = (t % (cycle * 2)) \/ cycle;<!-- [et_pb_line_break_holder] -->  const showFR = phase < 1;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: x, top: y,<!-- [et_pb_line_break_holder] -->      transform: 'translate(-50%, 0)',<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.mono,<!-- [et_pb_line_break_holder] -->      fontSize: 18,<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.3em',<!-- [et_pb_line_break_holder] -->      color: COLORS.gold,<!-- [et_pb_line_break_holder] -->      textAlign: 'center',<!-- [et_pb_line_break_holder] -->      textTransform: 'uppercase',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ opacity: showFR ? 1 : 0, transition: 'opacity 0.4s' }}>{fr}<\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500\u2500 Main scene composition \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<!-- [et_pb_line_break_holder] -->function DataStreamScene() {<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <><!-- [et_pb_line_break_holder] -->      {\/* Persistent background *\/}<!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ position: 'absolute', inset: 0, background: `radial-gradient(ellipse at center, ${COLORS.navy} 0%, ${COLORS.navyDeep} 100%)` }} \/><!-- [et_pb_line_break_holder] -->      <BinaryRain \/><!-- [et_pb_line_break_holder] -->      <DataGrid \/><!-- [et_pb_line_break_holder] -->      <ScanLine \/><!-- [et_pb_line_break_holder] -->      <Particles \/><!-- [et_pb_line_break_holder] -->      <FloatingIcons \/><!-- [et_pb_line_break_holder] -->      <LogoBar \/><!-- [et_pb_line_break_holder] -->      <FooterBar \/><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* BEAT 1 \u2014 0-4s : Tease + Title reveal *\/}<!-- [et_pb_line_break_holder] -->      <Sprite start={0.2} end={5.5}><!-- [et_pb_line_break_holder] -->        <Tagline x={960} y={250} text=&quot;IT \u2022 ECONOMICS \u2022 DATA&quot; \/><!-- [et_pb_line_break_holder] -->      <\/Sprite><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <Sprite start={0.6} end={5.5}><!-- [et_pb_line_break_holder] -->        <AssembleTitle x={960} y={490} \/><!-- [et_pb_line_break_holder] -->      <\/Sprite><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <Sprite start={2.4} end={5.5}><!-- [et_pb_line_break_holder] -->        <ScriptOverlay x={960} y={720} text=&quot;It's your day.&quot; \/><!-- [et_pb_line_break_holder] -->      <\/Sprite><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* BEAT 2 \u2014 5.5-9s : Infos *\/}<!-- [et_pb_line_break_holder] -->      <Sprite start={5.7} end={9.3}><!-- [et_pb_line_break_holder] -->        <InfoCard x={200} y={340} label=&quot;DATE&quot; value=&quot;13.10.26&quot; sub=&quot;13:00 \u2014 15:00&quot; delay={0.0} side=&quot;left&quot; \/><!-- [et_pb_line_break_holder] -->        <InfoCard x={200} y={580} label=&quot;LIEU \/ VENUE&quot; value=&quot;EPHEC&quot; sub=&quot;Avenue du Ciseau, 15 \u2014 Louvain-la-Neuve&quot; delay={0.2} side=&quot;left&quot; \/><!-- [et_pb_line_break_holder] -->        <InfoCard x={1100} y={340} label=&quot;POUR \/ FOR&quot; value=&quot;\u00c9TUDIANTS&quot; sub=&quot;&amp; Entreprises \u2022 Students &amp; Companies&quot; delay={0.4} side=&quot;right&quot; \/><!-- [et_pb_line_break_holder] -->        <InfoCard x={1100} y={580} label=&quot;TH\u00c8ME&quot; value=&quot;DATA + IA&quot; sub=&quot;\u00c9conomie \u2022 Informatique \u2022 Intelligence&quot; delay={0.6} side=&quot;right&quot; \/><!-- [et_pb_line_break_holder] -->      <\/Sprite><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      {\/* BEAT 3 \u2014 9-12s : CTA *\/}<!-- [et_pb_line_break_holder] -->      <Sprite start={9.4} end={11.95}><!-- [et_pb_line_break_holder] -->        <CTA x={960} y={500} text=&quot;REGISTER NOW&quot; sub=&quot;WWW.ADELOUVAIN.BE&quot; \/><!-- [et_pb_line_break_holder] -->        <BilingualSubCTA y={680} \/><!-- [et_pb_line_break_holder] -->      <\/Sprite><!-- [et_pb_line_break_holder] -->    <\/><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Script-style &quot;It's your day&quot; \/ &quot;C'est votre jour&quot;<!-- [et_pb_line_break_holder] -->function ScriptOverlay({ x, y, text }) {<!-- [et_pb_line_break_holder] -->  const { localTime, duration } = useSprite();<!-- [et_pb_line_break_holder] -->  const t = clamp(localTime \/ 0.8, 0, 1);<!-- [et_pb_line_break_holder] -->  const eased = Easing.easeOutCubic(t);<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: x, top: y,<!-- [et_pb_line_break_holder] -->      transform: `translate(-50%, ${(1 - eased) * 30}px) rotate(-3deg)`,<!-- [et_pb_line_break_holder] -->      opacity: eased,<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.script,<!-- [et_pb_line_break_holder] -->      fontSize: 80,<!-- [et_pb_line_break_holder] -->      fontWeight: 700,<!-- [et_pb_line_break_holder] -->      color: COLORS.gold,<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.01em',<!-- [et_pb_line_break_holder] -->    }}>{text}<\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Bilingual sub-CTA \u2014 flips FR\/EN<!-- [et_pb_line_break_holder] -->function BilingualSubCTA({ y }) {<!-- [et_pb_line_break_holder] -->  const t = useTime();<!-- [et_pb_line_break_holder] -->  const local = (t - 9.4);<!-- [et_pb_line_break_holder] -->  const showFR = (Math.floor(local \/ 1.2) % 2) === 0;<!-- [et_pb_line_break_holder] -->  return (<!-- [et_pb_line_break_holder] -->    <\/p>\n<div style={{<!-- [et_pb_line_break_holder] -->      position: 'absolute', left: 960, top: y,<!-- [et_pb_line_break_holder] -->      transform: 'translate(-50%, 0)',<!-- [et_pb_line_break_holder] -->      fontFamily: FONTS.display,<!-- [et_pb_line_break_holder] -->      fontSize: 36,<!-- [et_pb_line_break_holder] -->      color: COLORS.cream,<!-- [et_pb_line_break_holder] -->      textAlign: 'center',<!-- [et_pb_line_break_holder] -->      letterSpacing: '0.04em',<!-- [et_pb_line_break_holder] -->      whiteSpace: 'nowrap',<!-- [et_pb_line_break_holder] -->    }}><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ opacity: showFR ? 1 : 0, transition: 'opacity 0.3s', position: showFR ? 'relative' : 'absolute', left: showFR ? 'auto' : '50%', transform: showFR ? 'none' : 'translateX(-50%)' }}><!-- [et_pb_line_break_holder] -->        INSCRIVEZ-VOUS<!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div style={{ opacity: showFR ? 0 : 1, transition: 'opacity 0.3s', position: 'absolute', left: '50%', top: 0, transform: 'translateX(-50%)' }}><!-- [et_pb_line_break_holder] -->        REGISTER NOW<!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->window.DataStreamScene = DataStreamScene;<!-- [et_pb_line_break_holder] -->window.JF_COLORS = COLORS;<!-- [et_pb_line_break_holder] -->window.JF_FONTS = FONTS;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function MiniStage({children,duration}){<!-- [et_pb_line_break_holder] -->  const [time,setTime]=React.useState(0);<!-- [et_pb_line_break_holder] -->  const lastRef=React.useRef(null);<!-- [et_pb_line_break_holder] -->  React.useEffect(()=>{<!-- [et_pb_line_break_holder] -->    let raf;<!-- [et_pb_line_break_holder] -->    const step=(ts)=>{<!-- [et_pb_line_break_holder] -->      if(lastRef.current==null)lastRef.current=ts;<!-- [et_pb_line_break_holder] -->      const dt=(ts-lastRef.current)\/1000;<!-- [et_pb_line_break_holder] -->      lastRef.current=ts;<!-- [et_pb_line_break_holder] -->      setTime(t=>(t+dt)%duration);<!-- [et_pb_line_break_holder] -->      raf=requestAnimationFrame(step);<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->    raf=requestAnimationFrame(step);<!-- [et_pb_line_break_holder] -->    return()=>cancelAnimationFrame(raf);<!-- [et_pb_line_break_holder] -->  },[duration]);<!-- [et_pb_line_break_holder] -->  const ctxValue=React.useMemo(()=>({time,duration,playing:true}),[time,duration]);<!-- [et_pb_line_break_holder] -->  return <\/p>\n<div style={{width:1920,height:1080,position:'relative',overflow:'hidden'}}><!-- [et_pb_line_break_holder] -->    <TimelineContext.Provider value={ctxValue}>{children}<\/TimelineContext.Provider><!-- [et_pb_line_break_holder] -->  <\/div>\n<p>;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->function fit(){<!-- [et_pb_line_break_holder] -->  const w=document.getElementById('w');<!-- [et_pb_line_break_holder] -->  const s=document.getElementById('s');<!-- [et_pb_line_break_holder] -->  if(!w||!s)return;<!-- [et_pb_line_break_holder] -->  const sc=Math.max(w.clientWidth\/1920,w.clientHeight\/1080);<!-- [et_pb_line_break_holder] -->  s.style.transform='translate(-50%,-50%) scale('+sc+')';<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->fit();<!-- [et_pb_line_break_holder] -->window.addEventListener('resize',fit);<!-- [et_pb_line_break_holder] -->new ResizeObserver(fit).observe(document.getElementById('w'));<!-- [et_pb_line_break_holder] -->ReactDOM.createRoot(document.getElementById('s')).render(<!-- [et_pb_line_break_holder] -->  <MiniStage duration={12}><DataStreamScene\/><\/MiniStage><!-- [et_pb_line_break_holder] -->);<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><\/body><\/html>&#8221; style=&#8221;position:absolute;inset:0;width:100%;height:100%;border:0;display:block;&#8221; loading=&#8221;lazy&#8221; title=&#8221;Job Fair 2026 \u2014 Data Stream&#8221;><\/iframe><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; background_image=&#8221;https:\/\/adelouvain.be\/wp-content\/uploads\/2024\/03\/AdobeStock_657393389-scaled.jpeg&#8221; custom_padding=&#8221;0px||0px|||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row column_structure=&#8221;1_2,1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; text_font=&#8221;Montserrat||||||||&#8221; text_text_color=&#8221;#FFFFFF&#8221; text_font_size=&#8221;63px&#8221; text_line_height=&#8221;1.4em&#8221; text_text_shadow_style=&#8221;preset5&#8243; text_text_shadow_horizontal_length=&#8221;-0.01em&#8221; text_text_shadow_vertical_length=&#8221;-0.15em&#8221; text_text_shadow_blur_strength=&#8221;0.6em&#8221; text_text_shadow_color=&#8221;#000000&#8243; header_text_shadow_style=&#8221;preset5&#8243; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>PRIX ADEL 2025 \u00e0 venir\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_image src=&#8221;https:\/\/adelouvain.be\/wp-content\/uploads\/2022\/12\/UNamur-\u00a9-Christophe-Danaux-20221125200837-scaled.jpg&#8221; title_text=&#8221;UNamur&#8221; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; text_text_color=&#8221;#FFFFFF&#8221; text_font_size=&#8221;21px&#8221; text_text_shadow_style=&#8221;preset5&#8243; global_colors_info=&#8221;{}&#8221;][\/et_pb_text][et_pb_text _builder_version=&#8221;4.18.0&#8243; _module_preset=&#8221;default&#8221; text_text_color=&#8221;#FFFFFF&#8221; text_font_size=&#8221;20px&#8221; background_color=&#8221;#242424&#8243; text_text_shadow_style=&#8221;preset5&#8243; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p><strong><\/strong><\/p>\n<p><strong>Chaque ann\u00e9e, l&#8217;ADEL remet un prix du meilleur travail de fin de cycle &#8220;Master 120 Orientation g\u00e9n\u00e9rale \u00e0 finalit\u00e9 sp\u00e9cialis\u00e9e&#8221;\u00a0ou &#8220;Master de recherche&#8221;. Le prix se base sur deux crit\u00e8res;<\/strong><\/p>\n<p><strong><\/strong><\/p>\n<ul>\n<li><span>L\u2019originalit\u00e9 de la question de recherche<\/span><span><\/span><span><\/span><span><\/span><\/li>\n<\/ul>\n<p><span><\/span><\/p>\n<ul>\n<li><span>La revue syst\u00e9matique de la litt\u00e9rature \u00e9tait assez fouill\u00e9e\u00a0tandis que le rapport th\u00e9orie\/travail empirique \u00e9tait tr\u00e8s \u00e9quilibr\u00e9<\/span><\/li>\n<\/ul>\n<p><span><\/span><\/p>\n<ul>\n<li><span>Les outils utilis\u00e9s (le travail\u00a0<\/span>\u00e9conom\u00e9trique) \u00e9taient relativement appropri\u00e9s et les limites de l\u2019analyse bien comprises<\/li>\n<\/ul>\n<p><span><\/span><\/p>\n<ul>\n<li>une cote de 16\/20 ou plus refl\u00e9tant la qualit\u00e9 acad\u00e9mique et la reigeuru scientifique du m\u00e9moire<\/li>\n<\/ul>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>================================================================================ ADEL \u2014 Section &#8220;Mot du Pr\u00e9sident&#8221; (v2 avec don Stripe + IBAN) \u00c0 coller dans un module DIVI > CODE================================================================================&#8211;> Bienvenue \u00e0 l&#8217;ADEL \u2014 Mot du Pr\u00e9sident \u2014 L&#8217;Association des \u00c9conomistes de Louvain (ADEL) est n\u00e9e il y a plus de 30 ans. Elle se veut un lieu d&#8217;\u00e9changes, de contacts et de formation [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":"","_tec_slr_enabled":"","_tec_slr_layout":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bienvenue - Association des \u00c9conomistes de Louvain<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/adelouvain.be\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bienvenue - Association des \u00c9conomistes de Louvain\" \/>\n<meta property=\"og:description\" content=\"================================================================================ ADEL \u2014 Section &quot;Mot du Pr\u00e9sident&quot; (v2 avec don Stripe + IBAN) \u00c0 coller dans un module DIVI &gt; CODE================================================================================--&gt; Bienvenue \u00e0 l&#039;ADEL \u2014 Mot du Pr\u00e9sident \u2014 L&#039;Association des \u00c9conomistes de Louvain (ADEL) est n\u00e9e il y a plus de 30 ans. Elle se veut un lieu d&#039;\u00e9changes, de contacts et de formation [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/adelouvain.be\/\" \/>\n<meta property=\"og:site_name\" content=\"Association des \u00c9conomistes de Louvain\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-07T09:12:18+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/adelouvain.be\/\",\"url\":\"https:\/\/adelouvain.be\/\",\"name\":\"Bienvenue - Association des \u00c9conomistes de Louvain\",\"isPartOf\":{\"@id\":\"https:\/\/adelouvain.be\/#website\"},\"datePublished\":\"2022-08-14T14:35:58+00:00\",\"dateModified\":\"2026-05-07T09:12:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/adelouvain.be\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/adelouvain.be\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/adelouvain.be\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/adelouvain.be\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bienvenue\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/adelouvain.be\/#website\",\"url\":\"https:\/\/adelouvain.be\/\",\"name\":\"Association des \u00c9conomistes de Louvain\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/adelouvain.be\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bienvenue - Association des \u00c9conomistes de Louvain","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/adelouvain.be\/","og_locale":"en_US","og_type":"article","og_title":"Bienvenue - Association des \u00c9conomistes de Louvain","og_description":"================================================================================ ADEL \u2014 Section \"Mot du Pr\u00e9sident\" (v2 avec don Stripe + IBAN) \u00c0 coller dans un module DIVI > CODE================================================================================--> Bienvenue \u00e0 l'ADEL \u2014 Mot du Pr\u00e9sident \u2014 L'Association des \u00c9conomistes de Louvain (ADEL) est n\u00e9e il y a plus de 30 ans. Elle se veut un lieu d'\u00e9changes, de contacts et de formation [&hellip;]","og_url":"https:\/\/adelouvain.be\/","og_site_name":"Association des \u00c9conomistes de Louvain","article_modified_time":"2026-05-07T09:12:18+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/adelouvain.be\/","url":"https:\/\/adelouvain.be\/","name":"Bienvenue - Association des \u00c9conomistes de Louvain","isPartOf":{"@id":"https:\/\/adelouvain.be\/#website"},"datePublished":"2022-08-14T14:35:58+00:00","dateModified":"2026-05-07T09:12:18+00:00","breadcrumb":{"@id":"https:\/\/adelouvain.be\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/adelouvain.be\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/adelouvain.be\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/adelouvain.be\/"},{"@type":"ListItem","position":2,"name":"Bienvenue"}]},{"@type":"WebSite","@id":"https:\/\/adelouvain.be\/#website","url":"https:\/\/adelouvain.be\/","name":"Association des \u00c9conomistes de Louvain","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/adelouvain.be\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"ticketed":false,"_links":{"self":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":34,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":569,"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/pages\/8\/revisions\/569"}],"wp:attachment":[{"href":"https:\/\/adelouvain.be\/index.php\/wp-json\/wp\/v2\/media?parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}