{"id":2811,"date":"2026-09-24T21:20:48","date_gmt":"2026-09-24T18:20:48","guid":{"rendered":"https:\/\/yeng.ro\/?page_id=2811"},"modified":"2026-09-27T23:56:15","modified_gmt":"2026-09-27T20:56:15","slug":"about-new","status":"publish","type":"page","link":"https:\/\/yeng.ro\/en\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2811\" class=\"elementor elementor-2811\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e8fbf5 e-con-full yeng-about-assets e-flex e-con e-parent\" data-id=\"5e8fbf5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ae3c4c yeng-about-assets elementor-widget elementor-widget-html\" data-id=\"6ae3c4c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- YEnG About \u2014 page assets -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;900&display=swap\">\r\n\r\n<script>\r\n(function () {\r\n  document.documentElement.classList.add('yeng-about-js');\r\n\r\n  function init() {\r\n    var els = document.querySelectorAll('.yeng-about-reveal:not(.is-in)');\r\n\r\n    if (!('IntersectionObserver' in window)) {\r\n      els.forEach(function (el) {\r\n        el.classList.add('is-in');\r\n      });\r\n      return;\r\n    }\r\n\r\n    var io = new IntersectionObserver(function (entries) {\r\n      entries.forEach(function (e) {\r\n        if (e.isIntersecting) {\r\n          e.target.classList.add('is-in');\r\n          io.unobserve(e.target);\r\n        }\r\n      });\r\n    }, {\r\n      rootMargin: '0px 0px -10% 0px',\r\n      threshold: 0.05\r\n    });\r\n\r\n    els.forEach(function (el) {\r\n      io.observe(el);\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', init);\r\n  } else {\r\n    init();\r\n  }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cb6cbea e-con-full e-flex e-con e-parent\" data-id=\"cb6cbea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f836123 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"f836123\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ===== YEnG About hero (v7 \u00b7 typographic poster) \u2014 Elementor HTML widget: replace the WHOLE widget with this ===== -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;900&display=swap\">\r\n\r\n<section class=\"yeng-hero\" id=\"about\" aria-labelledby=\"yeng-hero-title\" data-yeng-hero>\r\n  <div class=\"yeng-hero__stage\">\r\n\r\n    <h1 class=\"yeng-hero__title\" id=\"yeng-hero-title\">\r\n      <span class=\"yeng-hero__mask\"><span class=\"yeng-hero__line yeng-hero__line--1\">One Program.<\/span><\/span>\r\n      <span class=\"yeng-hero__mask\"><span class=\"yeng-hero__line yeng-hero__line--2\">A Lifetime<\/span><\/span>\r\n      <span class=\"yeng-hero__row3\"><span class=\"yeng-hero__hl\"><span class=\"yeng-hero__line yeng-hero__line--3\">Mindset.<\/span><\/span><\/span>\r\n    <\/h1>\r\n\r\n    <div class=\"yeng-hero__aside\">\r\n      <span class=\"yeng-hero__rule\" aria-hidden=\"true\"><\/span>\r\n\r\n      <!-- Free to join: pulsing label that opens a short note (open by default without JS) -->\r\n      <div class=\"yeng-hero__free\" data-yeng-hero-free>\r\n        <button type=\"button\" class=\"yeng-hero__free-btn\" aria-expanded=\"true\" aria-controls=\"yeng-hero-free-text\">\r\n          <span class=\"yeng-hero__sr\">Free to join<\/span>\r\n          <span class=\"yeng-hero__free-word\" aria-hidden=\"true\"><span class=\"yeng-hero__ch\" style=\"--i:0\">F<\/span><span class=\"yeng-hero__ch\" style=\"--i:1\">r<\/span><span class=\"yeng-hero__ch\" style=\"--i:2\">e<\/span><span class=\"yeng-hero__ch\" style=\"--i:3\">e<\/span><span class=\"yeng-hero__ch yeng-hero__ch--space\" style=\"--i:4\"> <\/span><span class=\"yeng-hero__ch\" style=\"--i:5\">t<\/span><span class=\"yeng-hero__ch\" style=\"--i:6\">o<\/span><span class=\"yeng-hero__ch yeng-hero__ch--space\" style=\"--i:7\"> <\/span><span class=\"yeng-hero__ch\" style=\"--i:8\">j<\/span><span class=\"yeng-hero__ch\" style=\"--i:9\">o<\/span><span class=\"yeng-hero__ch\" style=\"--i:10\">i<\/span><span class=\"yeng-hero__ch\" style=\"--i:11\">n<\/span><\/span>\r\n          <span class=\"yeng-hero__plus\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"yeng-hero__free-body\" id=\"yeng-hero-free-text\">\r\n          <div class=\"yeng-hero__free-inner\"><p class=\"yeng-hero__free-text\">The full program is free for every selected participant.<\/p><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <p class=\"yeng-hero__lead\">\r\n        YEnG is a free entrepreneurship program for Romanian high school students built around practical learning.\r\n      <\/p>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\n\/* YEnG hero (v7): \"Free to join\" disclosure. Safe to run twice.\r\n   Everything else is CSS. Without JS the note stays open and all text is visible. *\/\r\n(function () {\r\n  function init(hero) {\r\n    if (hero.getAttribute('data-yeng-hero-ready') === '1') return;\r\n    hero.setAttribute('data-yeng-hero-ready', '1');\r\n\r\n    var free = hero.querySelector('[data-yeng-hero-free]');\r\n    var btn = free ? free.querySelector('.yeng-hero__free-btn') : null;\r\n    if (!free || !btn) return;\r\n    free.classList.add('is-js');\r\n    btn.setAttribute('aria-expanded', 'false');\r\n    btn.addEventListener('click', function () {\r\n      var open = btn.getAttribute('aria-expanded') !== 'true';\r\n      btn.setAttribute('aria-expanded', open ? 'true' : 'false');\r\n      free.classList.toggle('is-open', open);\r\n    });\r\n  }\r\n  function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-yeng-hero]'), init); }\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-63cf45f e-con-full e-flex e-con e-parent\" data-id=\"63cf45f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-16b3ac4 elementor-widget elementor-widget-html\" data-id=\"16b3ac4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ===== YEnG About \u2014 sections 02\u201308 (one Elementor HTML widget, placed directly under the hero) ===== -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;900&display=swap\">\r\n\r\n<div class=\"yeng-about-page\" data-yap-root>\r\n\r\n  <!-- ================= 01 \u00b7 WHO IT'S FOR \u2014 START (v10: profile spotlight + four numbered panels) =================\r\n       Sits directly under the About hero widget. Edit the copy below.\r\n       Styles: \"01 \u00b7 WHO IT'S FOR (v9)\" in Additional CSS. Two small scripts follow this section. -->\r\n  <section id=\"who\" class=\"yeng-about-page__section yeng-who\" aria-labelledby=\"yeng-who-title\" data-yeng-who>\r\n    <div class=\"yeng-about-page__inner\">\r\n\r\n      <div class=\"yeng-who__head\">\r\n        <p class=\"yeng-about-page__label\" data-yap-reveal>\r\n          <span>[ WHO IT\u2019S FOR ]<\/span><span class=\"yeng-about-page__label-line\" aria-hidden=\"true\"><\/span>\r\n        <\/p>\r\n        <h2 class=\"yeng-about-page__h2 yeng-who__title\" id=\"yeng-who-title\" data-yap-reveal style=\"--yap-d:1\">\r\n          Who we\u2019re looking for<span class=\"yeng-about-page__dot\">.<\/span>\r\n        <\/h2>\r\n        <p class=\"yeng-who__intro\" data-yap-reveal style=\"--yap-d:2\">\r\n          You don\u2019t need a startup, a business plan or a polished pitch. We look at how you think and how you work with others.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <!-- Profile: the round image is a real button (spotlight effect) -->\r\n      <div class=\"yeng-who__profile\" data-yeng-who-profile>\r\n        <button type=\"button\" class=\"yeng-who__avatar-btn\" aria-label=\"You: put the profile in the spotlight\" data-yeng-who-spot>\r\n          <span class=\"yeng-who__avatar\" data-yeng-who-avatar>\r\n            <svg viewBox=\"0 0 160 160\" focusable=\"false\" aria-hidden=\"true\">\r\n              <circle cx=\"80\" cy=\"80\" r=\"80\" class=\"yeng-who__avatar-bg\"><\/circle>\r\n              <circle cx=\"80\" cy=\"62\" r=\"27\" class=\"yeng-who__avatar-fig\"><\/circle>\r\n              <path class=\"yeng-who__avatar-fig\" d=\"M28 146 C31 114 53 98 80 98 C107 98 129 114 132 146 A80 80 0 0 1 28 146 Z\"><\/path>\r\n            <\/svg>\r\n          <\/span>\r\n        <\/button>\r\n        <p class=\"yeng-who__you\">You?<\/p>\r\n      <\/div>\r\n\r\n      <!-- Four numbered panels. Each header is a disclosure button; any combination can be open. -->\r\n      <ul class=\"yeng-who__panels\" data-yeng-who-panels>\r\n        <li class=\"yeng-who__panel\" data-yeng-who-panel>\r\n          <h3 class=\"yeng-who__panel-head\">\r\n            <button type=\"button\" class=\"yeng-who__panel-btn\" id=\"yeng-who-btn-1\" aria-expanded=\"true\" aria-controls=\"yeng-who-body-1\">\r\n              <span class=\"yeng-who__num\">1 <span class=\"yeng-who__slash\">\/\/<\/span><\/span>\r\n              <span class=\"yeng-who__panel-title\">Curious<\/span>\r\n              <span class=\"yeng-who__icon\" aria-hidden=\"true\"><\/span>\r\n            <\/button>\r\n          <\/h3>\r\n          <div class=\"yeng-who__panel-body\" id=\"yeng-who-body-1\">\r\n            <div class=\"yeng-who__panel-inner\"><p class=\"yeng-who__panel-text\">You ask questions and want to know how things really work.<\/p><\/div>\r\n          <\/div>\r\n        <\/li>\r\n        <li class=\"yeng-who__panel\" data-yeng-who-panel>\r\n          <h3 class=\"yeng-who__panel-head\">\r\n            <button type=\"button\" class=\"yeng-who__panel-btn\" id=\"yeng-who-btn-2\" aria-expanded=\"true\" aria-controls=\"yeng-who-body-2\">\r\n              <span class=\"yeng-who__num\">2 <span class=\"yeng-who__slash\">\/\/<\/span><\/span>\r\n              <span class=\"yeng-who__panel-title\">Ready to try<\/span>\r\n              <span class=\"yeng-who__icon\" aria-hidden=\"true\"><\/span>\r\n            <\/button>\r\n          <\/h3>\r\n          <div class=\"yeng-who__panel-body\" id=\"yeng-who-body-2\">\r\n            <div class=\"yeng-who__panel-inner\"><p class=\"yeng-who__panel-text\">You\u2019re willing to test an idea and learn from feedback.<\/p><\/div>\r\n          <\/div>\r\n        <\/li>\r\n        <li class=\"yeng-who__panel\" data-yeng-who-panel>\r\n          <h3 class=\"yeng-who__panel-head\">\r\n            <button type=\"button\" class=\"yeng-who__panel-btn\" id=\"yeng-who-btn-3\" aria-expanded=\"true\" aria-controls=\"yeng-who-body-3\">\r\n              <span class=\"yeng-who__num\">3 <span class=\"yeng-who__slash\">\/\/<\/span><\/span>\r\n              <span class=\"yeng-who__panel-title\">Open to teamwork<\/span>\r\n              <span class=\"yeng-who__icon\" aria-hidden=\"true\"><\/span>\r\n            <\/button>\r\n          <\/h3>\r\n          <div class=\"yeng-who__panel-body\" id=\"yeng-who-body-3\">\r\n            <div class=\"yeng-who__panel-inner\"><p class=\"yeng-who__panel-text\">You listen, contribute and build with others.<\/p><\/div>\r\n          <\/div>\r\n        <\/li>\r\n        <li class=\"yeng-who__panel\" data-yeng-who-panel>\r\n          <h3 class=\"yeng-who__panel-head\">\r\n            <button type=\"button\" class=\"yeng-who__panel-btn\" id=\"yeng-who-btn-4\" aria-expanded=\"true\" aria-controls=\"yeng-who-body-4\">\r\n              <span class=\"yeng-who__num\">4 <span class=\"yeng-who__slash\">\/\/<\/span><\/span>\r\n              <span class=\"yeng-who__panel-title\">Committed<\/span>\r\n              <span class=\"yeng-who__icon\" aria-hidden=\"true\"><\/span>\r\n            <\/button>\r\n          <\/h3>\r\n          <div class=\"yeng-who__panel-body\" id=\"yeng-who-body-4\">\r\n            <div class=\"yeng-who__panel-inner\"><p class=\"yeng-who__panel-text\">You\u2019re ready to show up and put in the work.<\/p><\/div>\r\n          <\/div>\r\n        <\/li>\r\n      <\/ul>\r\n\r\n      <ul class=\"yeng-who__facts\" data-yap-reveal>\r\n        <li>For high-school students in Romania<\/li>\r\n        <li>No business experience needed<\/li>\r\n      <\/ul>\r\n\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <script>\r\n  \/* WHO IT'S FOR \u00b7 panels (v10): accessible disclosures; each card opens and closes on its own.\r\n     Independent from the profile script; safe to run twice. Without JS every description stays open. *\/\r\n  (function () {\r\n    function init(list) {\r\n      if (list.getAttribute('data-yeng-who-panels-ready') === '1') return;\r\n      list.setAttribute('data-yeng-who-panels-ready', '1');\r\n      var panels = Array.prototype.slice.call(list.querySelectorAll('[data-yeng-who-panel]'));\r\n      var btns = panels.map(function (p) { return p.querySelector('.yeng-who__panel-btn'); });\r\n      function set(i, on) {\r\n        panels[i].classList.toggle('is-open', on);\r\n        if (btns[i]) btns[i].setAttribute('aria-expanded', on ? 'true' : 'false');\r\n      }\r\n      btns.forEach(function (b, i) {\r\n        if (b) b.addEventListener('click', function () { set(i, !panels[i].classList.contains('is-open')); });   \/* each card on its own *\/\r\n      });\r\n      list.classList.add('is-js');           \/* collapsed state + icons only when this script runs *\/\r\n      panels.forEach(function (p, i) { set(i, false); });\r\n    }\r\n    function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-yeng-who-panels]'), init); }\r\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n  })();\r\n  <\/script>\r\n\r\n  <script>\r\n  \/* WHO IT'S FOR \u00b7 profile (v10): a small rattle every ~4s until the first press, then a ~3s spotlight on every press.\r\n     Deliberately ALSO active with \"reduce motion\" (softer rattle, gentler light, no halo swell) \u2014 scoped to this component.\r\n     - The light is a decorative layer on <body> (outside any Elementor container), pointer-events: none:\r\n       scrolling and links keep working; it is re-centred on the avatar every frame (scroll \/ resize).\r\n     - Presses during a running spotlight are ignored; Escape ends it at once; focus stays on the button.\r\n     Independent from the panels script; safe to run twice. *\/\r\n  (function () {\r\n    var CFG = {\r\n      rattleEvery: 4000,   \/* ms between rattles (until the first press) *\/\r\n      focusMs: 1000,       \/* 1. the light gathers on the avatar while the page darkens *\/\r\n      holdMs: 900,         \/* 2. holds *\/\r\n      releaseMs: 1100,     \/* 3. spreads out, the dim fades away   (total \u2248 3s) *\/\r\n      dim: 0.8,            \/* darkness of the surroundings at full strength (0\u20131) *\/\r\n      calm: { focusMs: 1150, holdMs: 900, releaseMs: 1150, startScale: 2.2, endScale: 2.4 }   \/* reduced motion *\/\r\n    };\r\n\r\n    function ease(t) { return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) \/ 2; }   \/* easeInOutCubic *\/\r\n    function soft(t) { return 0.5 - Math.cos(Math.PI * t) \/ 2; }                               \/* easeInOutSine *\/\r\n    function lerp(a, b, t) { return a + (b - a) * t; }\r\n\r\n    function init(root) {\r\n      if (root.getAttribute('data-yeng-who-profile-ready') === '1') return;\r\n      root.setAttribute('data-yeng-who-profile-ready', '1');\r\n      var btn    = root.querySelector('[data-yeng-who-spot]');\r\n      var avatar = root.querySelector('[data-yeng-who-avatar]');\r\n      if (!btn || !avatar) return;\r\n\r\n      var rm = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n      var used = false, visible = false, running = false;\r\n      var rattleT = 0, firstT = 0, raf = 0, layer = null;\r\n\r\n      \/* ---------- invitation rattle (stops for good after the first press) ---------- *\/\r\n      function canRattle() { return !used && visible && document.visibilityState !== 'hidden'; }\r\n      function rattleOnce() {\r\n        if (!canRattle()) return;\r\n        var cls = rm.matches ? 'is-rattle-soft' : 'is-rattle';\r\n        avatar.classList.remove('is-rattle', 'is-rattle-soft');\r\n        void avatar.offsetWidth;\r\n        avatar.classList.add(cls);\r\n      }\r\n      function stopRattle() {\r\n        clearInterval(rattleT); clearTimeout(firstT); rattleT = 0; firstT = 0;\r\n        avatar.classList.remove('is-rattle', 'is-rattle-soft');\r\n      }\r\n      function loop() {\r\n        stopRattle();\r\n        if (!canRattle()) return;\r\n        firstT = setTimeout(rattleOnce, 900);\r\n        rattleT = setInterval(rattleOnce, CFG.rattleEvery);\r\n      }\r\n      avatar.addEventListener('animationend', function () { avatar.classList.remove('is-rattle', 'is-rattle-soft'); });\r\n      if ('IntersectionObserver' in window) {\r\n        new IntersectionObserver(function (entries) {\r\n          visible = entries[0].isIntersecting;\r\n          loop();\r\n        }, { threshold: 0.5 }).observe(avatar);\r\n      } else { visible = true; loop(); }\r\n      document.addEventListener('visibilitychange', loop);\r\n\r\n      \/* ---------- spotlight ---------- *\/\r\n      function paint(x, y, r, feather, dim, halo) {\r\n        var px = function (v) { return v.toFixed(1) + 'px'; };\r\n        var at = 'circle at ' + px(x) + ' ' + px(y);\r\n        layer.style.background =\r\n          \/* a faint warm halo just around the ring (never over the avatar itself) *\/\r\n          'radial-gradient(' + at + ', rgba(247, 192, 99, 0) ' + px(r * 0.52) + ', rgba(247, 192, 99, ' + (0.16 * halo).toFixed(3) + ') ' + px(r * 0.66) + ', rgba(247, 192, 99, 0) ' + px(r * 1.2) + '), ' +\r\n          \/* the light: clear centre, long feathered falloff into the dark *\/\r\n          'radial-gradient(' + at + ', rgba(6, 0, 18, 0) 0px, rgba(6, 0, 18, 0) ' + px(r) + ', ' +\r\n            'rgba(6, 0, 18, ' + (dim * 0.35).toFixed(3) + ') ' + px(r + feather * 0.3) + ', ' +\r\n            'rgba(6, 0, 18, ' + (dim * 0.75).toFixed(3) + ') ' + px(r + feather * 0.65) + ', ' +\r\n            'rgba(6, 0, 18, ' + dim.toFixed(3) + ') ' + px(r + feather) + ')';\r\n      }\r\n      function end() {\r\n        if (raf) cancelAnimationFrame(raf);\r\n        raf = 0;\r\n        running = false;\r\n        root.classList.remove('is-lit');\r\n        if (layer && layer.parentNode) layer.parentNode.removeChild(layer);\r\n        layer = null;\r\n        document.removeEventListener('keydown', onKey);\r\n      }\r\n      function onKey(e) { if (e.key === 'Escape' || e.key === 'Esc') end(); }\r\n\r\n      function spotlight() {\r\n        var calm = rm.matches;\r\n        var T = calm ? CFG.calm : CFG;\r\n        running = true;\r\n        root.classList.add('is-lit');\r\n        layer = document.createElement('div');\r\n        layer.className = 'yeng-who-spotlight';\r\n        layer.setAttribute('aria-hidden', 'true');\r\n        document.body.appendChild(layer);\r\n        document.addEventListener('keydown', onKey);\r\n\r\n        var total = T.focusMs + T.holdMs + T.releaseMs, t0 = 0;\r\n        function frame(now) {\r\n          if (!layer) return;\r\n          if (!t0) t0 = now;\r\n          var t = now - t0;\r\n          var a = avatar.getBoundingClientRect();              \/* re-measured every frame *\/\r\n          var x = a.left + a.width \/ 2, y = a.top + a.height \/ 2;\r\n          var vw = window.innerWidth, vh = window.innerHeight;\r\n          var far = Math.hypot(Math.max(x, vw - x), Math.max(y, vh - y));\r\n          var tight = a.width * 0.95;                            \/* avatar + \"You\" inside the clear light *\/\r\n          var fTight = Math.max(tight * 1.05, 120);              \/* soft edge, never a hard ring *\/\r\n          var start = calm ? tight * CFG.calm.startScale : far;  \/* reduced motion: much less travel *\/\r\n          var stop  = calm ? tight * CFG.calm.endScale : far * 0.9;\r\n          var r, feather, dim, halo, p;\r\n          if (t < T.focusMs) {\r\n            p = (calm ? soft : ease)(t \/ T.focusMs);\r\n            r = lerp(start, tight, p); feather = lerp(Math.max(start * 0.6, fTight), fTight, p); dim = CFG.dim * p; halo = p;\r\n          } else if (t < T.focusMs + T.holdMs) {\r\n            r = tight; feather = fTight; dim = CFG.dim; halo = 1;\r\n          } else if (t < total) {\r\n            p = (calm ? soft : ease)((t - T.focusMs - T.holdMs) \/ T.releaseMs);\r\n            r = lerp(tight, stop, p); feather = lerp(fTight, Math.max(stop * 0.8, fTight), p); dim = CFG.dim * (1 - p); halo = 1 - p;\r\n          } else { end(); return; }\r\n          paint(x, y, r, feather, dim, calm ? Math.min(halo, 0.6) : halo);\r\n          raf = requestAnimationFrame(frame);\r\n        }\r\n        raf = requestAnimationFrame(frame);\r\n      }\r\n\r\n      btn.addEventListener('click', function () {\r\n        if (!used) { used = true; stopRattle(); root.classList.add('is-used'); }   \/* the invitation ends here *\/\r\n        if (running) return;                                                        \/* no stacking *\/\r\n        spotlight();\r\n      });\r\n      window.addEventListener('pagehide', end);\r\n    }\r\n\r\n    function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-yeng-who-profile]'), init); }\r\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n  })();\r\n  <\/script>\r\n  <!-- ================= 01 \u00b7 WHO IT'S FOR \u2014 END ================= -->\r\n\r\n  <!-- ================= 02 \u00b7 PROGRAM \u2014 START (v10: headline + pillars + \"What you\u2019ll do\" dictionary) ================= -->\r\n  <section id=\"program\" class=\"yeng-about-page__section yeng-about-page__section--dark yeng-about-page__programme yeng-prog\" aria-labelledby=\"yeng-prog-title\">\r\n    <div class=\"yeng-about-page__inner\">\r\n\r\n      <p class=\"yeng-about-page__label\" data-yap-reveal>\r\n        <span>[ THE PROGRAM ]<\/span><span class=\"yeng-about-page__label-line\" aria-hidden=\"true\"><\/span>\r\n      <\/p>\r\n\r\n      <!-- Headline + arrow. Line two \"assembles\" word by word after the arrow arrives.\r\n           The replay button (added by the script) covers line two: click \/ tap \/ Enter replays it. -->\r\n      <div class=\"yeng-prog__head\" data-yeng-prog-head>\r\n        <h2 class=\"yeng-prog__title\" id=\"yeng-prog-title\">\r\n          <span class=\"yeng-prog__from\">From \u201cI have an idea\u201d<\/span>\r\n          <span class=\"yeng-prog__to\"><span class=\"yeng-prog__arrow\" aria-hidden=\"true\"><span class=\"yeng-prog__arrow-v\"><\/span><span class=\"yeng-prog__arrow-h\"><\/span><span class=\"yeng-prog__arrow-tip\"><\/span><\/span><span class=\"yeng-prog__to-text\"><span class=\"yeng-prog__w\" style=\"--yw:0\">to<\/span> <span class=\"yeng-prog__w\" style=\"--yw:1\">\u201cI<\/span> <span class=\"yeng-prog__w\" style=\"--yw:2\">know<\/span> <span class=\"yeng-prog__w\" style=\"--yw:3\">how<\/span> <span class=\"yeng-prog__w\" style=\"--yw:4\">to<\/span> <span class=\"yeng-prog__build\"><span class=\"yeng-prog__w\" style=\"--yw:5\">build<\/span>&nbsp;<span class=\"yeng-prog__w\" style=\"--yw:6\">it.\u201d<\/span><\/span><\/span><\/span>\r\n        <\/h2>\r\n        <button type=\"button\" class=\"yeng-prog__replay\" aria-label=\"Replay the headline animation\" hidden data-yeng-prog-replay><\/button>\r\n      <\/div>\r\n\r\n      <!-- The five pillars. On phones the script turns this list into selectable cards (data-yeng-short = the short selector label). -->\r\n      <div class=\"yeng-about-page__diagram\" data-yap-diagram data-yap-reveal data-yeng-pillars>\r\n        <div class=\"yeng-about-page__source\" data-yeng-pillars-source>\r\n          <p class=\"yeng-about-page__source-title\" data-yap-source>Educational<br>Program<\/p>\r\n          <p class=\"yeng-about-page__source-meta\">[ 05 PILLARS ]<\/p>\r\n        <\/div>\r\n\r\n        <svg class=\"yeng-about-page__lines\" aria-hidden=\"true\" focusable=\"false\" data-yap-lines><\/svg>\r\n\r\n        <ol class=\"yeng-about-page__pillars\">\r\n          <li class=\"yeng-about-page__pillar\" data-yeng-short=\"Mentors\">\r\n            <span class=\"yeng-about-page__pillar-num\" aria-hidden=\"true\">01<\/span>\r\n            <div class=\"yeng-about-page__pillar-body\">\r\n              <h3 class=\"yeng-about-page__pillar-title\">Trainers &amp; Business Mentors<\/h3>\r\n              <p class=\"yeng-about-page__pillar-desc\">Learn from trainers and mentors with real business experience, through hands-on activities.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n          <li class=\"yeng-about-page__pillar\" data-yeng-short=\"Curriculum\">\r\n            <span class=\"yeng-about-page__pillar-num\" aria-hidden=\"true\">02<\/span>\r\n            <div class=\"yeng-about-page__pillar-body\">\r\n              <h3 class=\"yeng-about-page__pillar-title\">Entrepreneurial Curriculum<\/h3>\r\n              <p class=\"yeng-about-page__pillar-desc\">Five practical modules, from finding a real problem to pitching your idea.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n          <li class=\"yeng-about-page__pillar\" data-yeng-short=\"Guests\">\r\n            <span class=\"yeng-about-page__pillar-num\" aria-hidden=\"true\">03<\/span>\r\n            <div class=\"yeng-about-page__pillar-body\">\r\n              <h3 class=\"yeng-about-page__pillar-title\">Special Guests<\/h3>\r\n              <p class=\"yeng-about-page__pillar-desc\">Entrepreneurs and specialists share real lessons, mistakes and strategies from their own journeys.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n          <li class=\"yeng-about-page__pillar\" data-yeng-short=\"Networking\">\r\n            <span class=\"yeng-about-page__pillar-num\" aria-hidden=\"true\">04<\/span>\r\n            <div class=\"yeng-about-page__pillar-body\">\r\n              <h3 class=\"yeng-about-page__pillar-title\">Online &amp; Offline Networking<\/h3>\r\n              <p class=\"yeng-about-page__pillar-desc\">Build a network of ambitious students who share your interest in business, online and offline.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n          <li class=\"yeng-about-page__pillar\" data-yeng-short=\"Competitions\">\r\n            <span class=\"yeng-about-page__pillar-num\" aria-hidden=\"true\">05<\/span>\r\n            <div class=\"yeng-about-page__pillar-body\">\r\n              <h3 class=\"yeng-about-page__pillar-title\">Competitions<\/h3>\r\n              <p class=\"yeng-about-page__pillar-desc\">Case challenges, pitching rounds and a final business pitch in front of a jury of entrepreneurs.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n        <\/ol>\r\n      <\/div>\r\n\r\n\r\n      <!-- ===== What you'll do. Edit a module: title in the <button>, its dictionary entry in data-yeng-dict-pos \/ data-yeng-dict-def,\r\n           the practical sentence in <p>. Clicking a title opens the \"YEnG \/ Dictionary\" window below. ===== -->\r\n      <div class=\"yeng-wyd\" role=\"group\" aria-labelledby=\"yeng-wyd-title\">\r\n        <div class=\"yeng-wyd__head\">\r\n          <h3 class=\"yeng-wyd__title\" id=\"yeng-wyd-title\" data-yap-reveal>What you\u2019ll do<span class=\"yeng-about-page__dot\">.<\/span><\/h3>\r\n          <p class=\"yeng-wyd__lead\" data-yap-reveal style=\"--yap-d:1\">Five modules, each practised on a real idea with your team.<\/p>\r\n        <\/div>\r\n        <ol class=\"yeng-wyd__steps\">\r\n          <li class=\"yeng-wyd__step\" data-yap-reveal>\r\n            <span class=\"yeng-wyd__num\" aria-hidden=\"true\">01<\/span>\r\n            <h4 class=\"yeng-wyd__step-title\"><button type=\"button\" class=\"yeng-wyd__term\" aria-haspopup=\"dialog\" aria-controls=\"yeng-dict\" data-yeng-dict-pos=\"noun phrase \/\/ problem-solving approach\" data-yeng-dict-def=\"A way of solving problems by understanding people\u2019s needs, exploring ideas, and testing possible solutions.\">Design Thinking<\/button><\/h4>\r\n            <p class=\"yeng-wyd__step-text\">Identify a real problem by talking to the people who experience it.<\/p>\r\n          <\/li>\r\n          <li class=\"yeng-wyd__step\" data-yap-reveal style=\"--yap-d:1\">\r\n            <span class=\"yeng-wyd__num\" aria-hidden=\"true\">02<\/span>\r\n            <h4 class=\"yeng-wyd__step-title\"><button type=\"button\" class=\"yeng-wyd__term\" aria-haspopup=\"dialog\" aria-controls=\"yeng-dict\" data-yeng-dict-pos=\"noun\" data-yeng-dict-def=\"The ability to guide and support a group toward a shared goal.\">Leadership<\/button><\/h4>\r\n            <p class=\"yeng-wyd__step-text\">Share responsibilities, make decisions and work well as a team.<\/p>\r\n          <\/li>\r\n          <li class=\"yeng-wyd__step\" data-yap-reveal style=\"--yap-d:2\">\r\n            <span class=\"yeng-wyd__num\" aria-hidden=\"true\">03<\/span>\r\n            <h4 class=\"yeng-wyd__step-title\"><button type=\"button\" class=\"yeng-wyd__term\" aria-haspopup=\"dialog\" aria-controls=\"yeng-dict\" data-yeng-dict-pos=\"noun phrase \/\/ planning tool\" data-yeng-dict-def=\"A visual framework with nine building blocks that describes how a business creates, delivers, and captures value.\">Business Model Canvas<\/button><\/h4>\r\n            <p class=\"yeng-wyd__step-text\">Map who your idea serves, how it works, and its basic costs and revenue.<\/p>\r\n          <\/li>\r\n          <li class=\"yeng-wyd__step\" data-yap-reveal style=\"--yap-d:3\">\r\n            <span class=\"yeng-wyd__num\" aria-hidden=\"true\">04<\/span>\r\n            <h4 class=\"yeng-wyd__step-title\"><button type=\"button\" class=\"yeng-wyd__term\" aria-haspopup=\"dialog\" aria-controls=\"yeng-dict\" data-yeng-dict-pos=\"noun \/\/ entrepreneurship\" data-yeng-dict-def=\"The process of testing assumptions with evidence to see whether an idea addresses a real need.\">Validation<\/button><\/h4>\r\n            <p class=\"yeng-wyd__step-text\">Test your assumptions with real people and use what you learn to improve the idea.<\/p>\r\n          <\/li>\r\n          <li class=\"yeng-wyd__step\" data-yap-reveal style=\"--yap-d:4\">\r\n            <span class=\"yeng-wyd__num\" aria-hidden=\"true\">05<\/span>\r\n            <h4 class=\"yeng-wyd__step-title\"><button type=\"button\" class=\"yeng-wyd__term\" aria-haspopup=\"dialog\" aria-controls=\"yeng-dict\" data-yeng-dict-pos=\"noun \/\/ entrepreneurship\" data-yeng-dict-def=\"Presenting an idea clearly and persuasively to gain support, feedback, or investment.\">Pitching<\/button><\/h4>\r\n            <p class=\"yeng-wyd__step-text\">Explain your idea clearly, present it and answer questions.<\/p>\r\n          <\/li>\r\n        <\/ol>\r\n        <p class=\"yeng-wyd__outcome\" data-yap-reveal>\r\n          You leave having developed and tested an idea, pitched it and worked in a team, whether or not it becomes a company.\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <!-- ===== YEnG \/ Dictionary: one small window for all five terms (filled by the script from the buttons above).\r\n           Visual idea: a miniature browser window (inspired by a Uiverse \"browser card\"; no code reused). ===== -->\r\n      <dialog class=\"yeng-dict\" id=\"yeng-dict\" aria-labelledby=\"yeng-dict-term\" data-yeng-dict>\r\n        <div class=\"yeng-dict__window\">\r\n          <div class=\"yeng-dict__bar\">\r\n            <span class=\"yeng-dict__dots\" aria-hidden=\"true\"><span><\/span><span><\/span><span><\/span><\/span>\r\n            <span class=\"yeng-dict__nav\">\r\n              <button type=\"button\" class=\"yeng-dict__navbtn yeng-dict__navbtn--prev\" aria-label=\"Previous definition\" data-yeng-dict-prev><\/button>\r\n              <button type=\"button\" class=\"yeng-dict__navbtn yeng-dict__navbtn--next\" aria-label=\"Next definition\" data-yeng-dict-next><\/button>\r\n            <\/span>\r\n            <span class=\"yeng-dict__address\" aria-hidden=\"true\">YEnG \/ Dictionary<\/span>\r\n            <button type=\"button\" class=\"yeng-dict__close\" aria-label=\"Close definition\" data-yeng-dict-close><\/button>\r\n          <\/div>\r\n          <div class=\"yeng-dict__body\">\r\n            <p class=\"yeng-dict__count\" aria-hidden=\"true\" data-yeng-dict-count>01 \/ 05<\/p>\r\n            <h3 class=\"yeng-dict__term\" id=\"yeng-dict-term\" data-yeng-dict-term>Design Thinking<\/h3>\r\n            <p class=\"yeng-dict__pos\" data-yeng-dict-pos>noun phrase \/\/ problem-solving approach<\/p>\r\n            <p class=\"yeng-dict__def\" data-yeng-dict-def>A way of solving problems by understanding people\u2019s needs, exploring ideas, and testing possible solutions.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/dialog>\r\n\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <script>\r\n  \/* PROGRAM \u00b7 headline (v9): \"From\" appears \u2192 the arrow draws \u2192 \"to \u201cI know how to build it.\u201d\" assembles word by word.\r\n     Click \/ tap \/ Enter on line two replays it. Independent from every other script; safe to run twice.\r\n     Without JS or with reduced motion: the complete headline, no animation. *\/\r\n  (function () {\r\n    var rm = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n\r\n    function initHead(head) {\r\n      if (head.getAttribute('data-yeng-prog-ready') === '1') return;\r\n      head.setAttribute('data-yeng-prog-ready', '1');\r\n      var btn  = head.querySelector('[data-yeng-prog-replay]');\r\n      var line = head.querySelector('.yeng-prog__to');\r\n      var inEditor = document.body && document.body.classList.contains('elementor-editor-active');\r\n      if (rm.matches || inEditor || !('IntersectionObserver' in window)) return;   \/* static, complete headline *\/\r\n\r\n      head.classList.add('is-armed');\r\n      function play() {\r\n        head.classList.remove('is-play');\r\n        void head.offsetWidth;                 \/* restart the CSS sequence *\/\r\n        head.classList.add('is-play');\r\n      }\r\n      var io = new IntersectionObserver(function (entries) {\r\n        entries.forEach(function (e) { if (e.isIntersecting) { play(); io.disconnect(); } });\r\n      }, { rootMargin: '0px 0px -15% 0px', threshold: 0.4 });\r\n      io.observe(head);\r\n\r\n      \/* the replay button sits exactly over line two (arrow + words); it never changes the layout *\/\r\n      function place() {\r\n        if (!btn || !line) return;\r\n        var h = head.getBoundingClientRect(), a = line.getBoundingClientRect();\r\n        btn.style.left   = (a.left - h.left - 6) + 'px';\r\n        btn.style.top    = (a.top - h.top - 4) + 'px';\r\n        btn.style.width  = (a.width + 12) + 'px';\r\n        btn.style.height = Math.max(a.height + 8, 44) + 'px';\r\n      }\r\n      if (btn && line) {\r\n        btn.hidden = false;\r\n        btn.addEventListener('click', function () {\r\n          head.classList.add('is-seen');       \/* a replay keeps \"From\" in place *\/\r\n          play();\r\n        });\r\n        place();\r\n        if ('ResizeObserver' in window) new ResizeObserver(place).observe(head); else window.addEventListener('resize', place);\r\n        if (document.fonts && document.fonts.ready) document.fonts.ready.then(place);\r\n      }\r\n      var onRm = function () {\r\n        if (!rm.matches) return;\r\n        io.disconnect();\r\n        head.classList.remove('is-armed', 'is-play');\r\n        if (btn) btn.hidden = true;\r\n      };\r\n      if (rm.addEventListener) rm.addEventListener('change', onRm); else if (rm.addListener) rm.addListener(onRm);\r\n    }\r\n\r\n    function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-yeng-prog-head]'), initHead); }\r\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n  })();\r\n  <\/script>\r\n\r\n  <script>\r\n  \/* PROGRAM \u00b7 the five pillars: selectable cards on phones; keyboard access to the desktop highlight.\r\n     Independent from every other script; safe to run twice; the numbered list stays readable without JS. *\/\r\n  (function () {\r\n    var rm = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n\r\n    function initPillars(d) {\r\n      if (d.getAttribute('data-yeng-pillars-ready') === '1') return;\r\n      d.setAttribute('data-yeng-pillars-ready', '1');\r\n      var list  = d.querySelector('.yeng-about-page__pillars');\r\n      var items = Array.prototype.slice.call(d.querySelectorAll('.yeng-about-page__pillar'));\r\n      if (!list || !items.length) return;\r\n\r\n      var phone = window.matchMedia('(max-width: 767px)');\r\n      var desk  = window.matchMedia('(min-width: 1025px) and (hover: hover) and (pointer: fine)');\r\n      var n = items.length, cur = 0, on = false;\r\n      function pad(v) { return (v < 10 ? '0' : '') + v; }\r\n      function mk(tag, cls, text) {\r\n        var e = document.createElement(tag);\r\n        if (cls) e.className = cls;\r\n        if (text) e.textContent = text;\r\n        return e;\r\n      }\r\n\r\n      \/* controls, built once *\/\r\n      var tabs = mk('div', 'yeng-pl__tabs');\r\n      tabs.setAttribute('role', 'tablist');\r\n      tabs.setAttribute('aria-label', 'Program pillars');\r\n      var tabBtns = items.map(function (it, i) {\r\n        it.id = it.id || 'yeng-pl-panel-' + (i + 1);\r\n        var b = mk('button', 'yeng-pl__tab');\r\n        b.type = 'button';\r\n        b.id = 'yeng-pl-tab-' + (i + 1);\r\n        b.setAttribute('role', 'tab');\r\n        b.setAttribute('aria-controls', it.id);\r\n        var title = it.querySelector('.yeng-about-page__pillar-title');\r\n        b.appendChild(mk('span', 'yeng-pl__tab-num', pad(i + 1)));\r\n        b.appendChild(mk('span', 'yeng-pl__tab-label', it.getAttribute('data-yeng-short') || (title ? title.textContent : '')));\r\n        b.addEventListener('click', function () { select(i, true); });\r\n        tabs.appendChild(b);\r\n        return b;\r\n      });\r\n      tabs.addEventListener('keydown', function (e) {\r\n        var k = e.key, to = -1;\r\n        if (k === 'ArrowRight') to = Math.min(cur + 1, n - 1);\r\n        else if (k === 'ArrowLeft') to = Math.max(cur - 1, 0);\r\n        else if (k === 'Home') to = 0;\r\n        else if (k === 'End') to = n - 1;\r\n        if (to < 0) return;\r\n        e.preventDefault();\r\n        select(to, true);\r\n        tabBtns[to].focus();\r\n      });\r\n\r\n      var foot = mk('div', 'yeng-pl__foot');\r\n      var prev = mk('button', 'yeng-pl__step yeng-pl__step--prev');\r\n      prev.type = 'button';\r\n      prev.setAttribute('aria-label', 'Previous pillar');\r\n      var pos = mk('p', 'yeng-pl__pos');\r\n      pos.setAttribute('aria-live', 'polite');\r\n      var next = mk('button', 'yeng-pl__step yeng-pl__step--next');\r\n      next.type = 'button';\r\n      next.setAttribute('aria-label', 'Next pillar');\r\n      prev.addEventListener('click', function () { select(cur - 1, true); });\r\n      next.addEventListener('click', function () { select(cur + 1, true); });\r\n      foot.appendChild(prev); foot.appendChild(pos); foot.appendChild(next);\r\n      list.parentNode.insertBefore(tabs, list);\r\n      list.parentNode.insertBefore(foot, list.nextSibling);\r\n\r\n      function select(i, user) {\r\n        i = Math.max(0, Math.min(n - 1, i));\r\n        var dir = i > cur ? 1 : -1, changed = i !== cur;\r\n        cur = i;\r\n        tabBtns.forEach(function (b, k) {\r\n          var a = k === i;\r\n          b.setAttribute('aria-selected', a ? 'true' : 'false');\r\n          b.tabIndex = a ? 0 : -1;\r\n        });\r\n        items.forEach(function (it, k) { if (on) it.hidden = k !== i; });\r\n        pos.textContent = pad(i + 1) + ' \/ ' + pad(n);\r\n        prev.disabled = i === 0;\r\n        next.disabled = i === n - 1;\r\n\r\n        \/* keep the chosen selector visible inside its own row (never scrolls the page) *\/\r\n        var b = tabBtns[i];\r\n        var left = b.offsetLeft - (tabs.clientWidth - b.offsetWidth) \/ 2;\r\n        if (tabs.scrollTo) tabs.scrollTo({ left: Math.max(0, left), behavior: (rm.matches || !user) ? 'auto' : 'smooth' });\r\n        else tabs.scrollLeft = Math.max(0, left);\r\n\r\n        if (user && changed && on && !rm.matches) {\r\n          var it = items[i];\r\n          it.classList.remove('is-enter-next', 'is-enter-prev');\r\n          void it.offsetWidth;\r\n          it.classList.add(dir > 0 ? 'is-enter-next' : 'is-enter-prev');\r\n        }\r\n      }\r\n\r\n      \/* swipe on the card (horizontal only; vertical scrolling stays native) *\/\r\n      var sx = 0, sy = 0, tracking = false;\r\n      list.addEventListener('pointerdown', function (e) {\r\n        if (!on || e.pointerType === 'mouse') return;\r\n        tracking = true; sx = e.clientX; sy = e.clientY;\r\n      });\r\n      list.addEventListener('pointerup', function (e) {\r\n        if (!tracking) return;\r\n        tracking = false;\r\n        var dx = e.clientX - sx, dy = e.clientY - sy;\r\n        if (Math.abs(dx) > 48 && Math.abs(dx) > Math.abs(dy) * 1.5) select(cur + (dx < 0 ? 1 : -1), true);\r\n      });\r\n      list.addEventListener('pointercancel', function () { tracking = false; });\r\n\r\n      function mode() {\r\n        on = phone.matches;\r\n        d.classList.toggle('is-tabs', on);\r\n        items.forEach(function (it, k) {\r\n          if (on) {\r\n            it.setAttribute('role', 'tabpanel');\r\n            it.setAttribute('aria-labelledby', tabBtns[k].id);\r\n            it.tabIndex = 0;\r\n            it.hidden = k !== cur;\r\n          } else {\r\n            it.removeAttribute('role');\r\n            it.removeAttribute('aria-labelledby');\r\n            it.hidden = false;\r\n            it.classList.remove('is-enter-next', 'is-enter-prev');\r\n            if (desk.matches) it.tabIndex = 0; else it.removeAttribute('tabindex');\r\n          }\r\n        });\r\n        select(cur, false);\r\n      }\r\n\r\n      \/* desktop: keyboard focus = the same highlight as hover (reuses the page script's hover handlers) *\/\r\n      function fire(el, type) {\r\n        var ev;\r\n        try { ev = new MouseEvent(type, { bubbles: false }); } catch (err) { ev = document.createEvent('MouseEvents'); ev.initEvent(type, false, false); }\r\n        el.dispatchEvent(ev);\r\n      }\r\n      items.forEach(function (it) {\r\n        it.addEventListener('focus', function () { if (!on && desk.matches) fire(it, 'mouseenter'); });\r\n        it.addEventListener('blur',  function () { if (!on && desk.matches) fire(it, 'mouseleave'); });\r\n      });\r\n      var src = d.querySelector('[data-yeng-pillars-source]');\r\n      if (src) {\r\n        function srcMode() { if (desk.matches) { src.tabIndex = 0; src.setAttribute('aria-label', 'Highlight all five pillars'); } else { src.removeAttribute('tabindex'); src.removeAttribute('aria-label'); } }\r\n        src.addEventListener('focus', function () { if (desk.matches) fire(src, 'mouseenter'); });\r\n        src.addEventListener('blur',  function () { if (desk.matches) fire(src, 'mouseleave'); });\r\n        srcMode();\r\n        if (desk.addEventListener) desk.addEventListener('change', srcMode); else if (desk.addListener) desk.addListener(srcMode);\r\n      }\r\n\r\n      mode();\r\n      if (phone.addEventListener) phone.addEventListener('change', mode); else if (phone.addListener) phone.addListener(mode);\r\n      if (desk.addEventListener) desk.addEventListener('change', mode); else if (desk.addListener) desk.addListener(mode);\r\n    }\r\n\r\n    function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-yeng-pillars]'), initPillars); }\r\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n  })();\r\n  <\/script>\r\n  <script>\r\n  \/* PROGRAM \u00b7 \"What you'll do\" dictionary (v10): each module title opens the YEnG \/ Dictionary window.\r\n     Native <dialog> (top layer: never clipped by Elementor, focus stays inside, Escape closes).\r\n     Back \/ forward move through the five terms. Closes with \u00d7, Escape or a click on the backdrop;\r\n     focus returns to the title that opened it. Independent from every other script; safe to run twice. *\/\r\n  (function () {\r\n    function init(dlg) {\r\n      if (dlg.getAttribute('data-yeng-dict-ready') === '1') return;\r\n      dlg.setAttribute('data-yeng-dict-ready', '1');\r\n      var terms = Array.prototype.slice.call(document.querySelectorAll('.yeng-wyd__term'));\r\n      if (!terms.length || typeof dlg.showModal !== 'function') {\r\n        \/* very old browsers: no dialog support \u2192 the titles stay plain text *\/\r\n        terms.forEach(function (b) { b.disabled = true; b.classList.add('is-plain'); });\r\n        return;\r\n      }\r\n      var elTerm  = dlg.querySelector('[data-yeng-dict-term]');\r\n      var elPos   = dlg.querySelector('[data-yeng-dict-pos]');\r\n      var elDef   = dlg.querySelector('[data-yeng-dict-def]');\r\n      var elCount = dlg.querySelector('[data-yeng-dict-count]');\r\n      var prev    = dlg.querySelector('[data-yeng-dict-prev]');\r\n      var next    = dlg.querySelector('[data-yeng-dict-next]');\r\n      var close   = dlg.querySelector('[data-yeng-dict-close]');\r\n      var cur = 0, opener = null, n = terms.length;\r\n      function pad(v) { return (v < 10 ? '0' : '') + v; }\r\n\r\n      function show(i) {\r\n        cur = (i + n) % n;\r\n        var b = terms[cur];\r\n        elTerm.textContent  = b.textContent.replace(\/\\s+\/g, ' ').trim();\r\n        elPos.textContent   = b.getAttribute('data-yeng-dict-pos') || '';\r\n        elDef.textContent   = b.getAttribute('data-yeng-dict-def') || '';\r\n        elCount.textContent = pad(cur + 1) + ' \/ ' + pad(n);\r\n        dlg.classList.remove('is-swap'); void dlg.offsetWidth; dlg.classList.add('is-swap');\r\n      }\r\n      function open(i, from) {\r\n        opener = from || null;\r\n        show(i);\r\n        if (!dlg.open) dlg.showModal();\r\n        close.focus();\r\n      }\r\n      function shut() { if (dlg.open) dlg.close(); }\r\n\r\n      terms.forEach(function (b, i) { b.addEventListener('click', function () { open(i, b); }); });\r\n      prev.addEventListener('click', function () { show(cur - 1); });\r\n      next.addEventListener('click', function () { show(cur + 1); });\r\n      close.addEventListener('click', shut);\r\n      \/* a click on the backdrop lands on the <dialog> itself, outside the window *\/\r\n      dlg.addEventListener('click', function (e) { if (e.target === dlg) shut(); });\r\n      dlg.addEventListener('keydown', function (e) {\r\n        if (e.key === 'ArrowRight') { e.preventDefault(); show(cur + 1); }\r\n        else if (e.key === 'ArrowLeft') { e.preventDefault(); show(cur - 1); }\r\n      });\r\n      \/* Escape (native \"cancel\") and every other close: focus goes back to the title that opened it *\/\r\n      dlg.addEventListener('close', function () {\r\n        var back = opener || terms[cur];\r\n        opener = null;\r\n        if (back) back.focus();\r\n      });\r\n    }\r\n    function run() { Array.prototype.forEach.call(document.querySelectorAll('[data-yeng-dict]'), init); }\r\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', run); else run();\r\n  })();\r\n  <\/script>\r\n  <!-- ================= 02 \u00b7 PROGRAM \u2014 END ================= -->\r\n\r\n  <!-- ================= 02b \u00b7 PROGRAMME INFO + SELECTION PROCESS \u2014 START (v2 \u00b7 interaction redesign) =================\r\n       Replace everything from this START comment down to the matching END comment.\r\n       Continues the dark Programme section above: same #17003b background, no break. -->\r\n  <section class=\"yeng-selection\" id=\"selection\" aria-labelledby=\"yeng-selection-title\" data-yeng-selection>\r\n    <style>\r\n      \/* =========================================================\r\n         YEnG \u00b7 PROGRAMME INFO + SELECTION PROCESS (.yeng-selection)\r\n         ========================================================= *\/\r\n      \/* The Programme section above kept extra bottom room for the old overlapping photo \u2014 not needed now *\/\r\n      .yeng-about-page .yeng-about-page__programme { padding-bottom: clamp(56px, 6vw, 96px); }\r\n\r\n      .yeng-selection {\r\n        --ys-blue: #17003b;\r\n        --ys-yellow: #f7c063;\r\n        --ys-white: #ffffff;\r\n        --ys-dim: rgba(255, 255, 255, 0.72);\r\n        --ys-mute: rgba(214, 205, 235, 0.62);           \/* lavender-white for secondary text *\/\r\n        --ys-rule: rgba(255, 255, 255, 0.14);\r\n        --ys-base: rgba(255, 255, 255, 0.18);\r\n        --ys-font: \"Inter\", system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif;\r\n        --ys-max: 1360px;\r\n        --ys-gutter: clamp(24px, 5vw, 80px);\r\n        --ys-gap: clamp(16px, 2vw, 32px);\r\n        --ys-ease: cubic-bezier(0.16, 1, 0.3, 1);\r\n\r\n        position: relative;\r\n        display: block;\r\n        margin: 0;\r\n        padding: 0 0 clamp(96px, 10vw, 160px);\r\n        background: var(--ys-blue);\r\n        color: var(--ys-white);\r\n        font-family: var(--ys-font);\r\n        -webkit-font-smoothing: antialiased;\r\n      }\r\n      .yeng-selection *, .yeng-selection *::before, .yeng-selection *::after { box-sizing: border-box; }\r\n      .yeng-selection .yeng-selection__inner {\r\n        width: 100%;\r\n        max-width: calc(var(--ys-max) + 2 * var(--ys-gutter));\r\n        margin: 0 auto;\r\n        padding: 0 var(--ys-gutter);\r\n      }\r\n\r\n      \/* ---------- Programme facts: one editorial row ---------- *\/\r\n      .yeng-selection .yeng-selection__facts {\r\n        display: grid;\r\n        grid-template-columns: repeat(3, minmax(0, 1fr));\r\n        margin: 0;\r\n        padding: 0;\r\n        border-top: 1px solid var(--ys-rule);\r\n        border-bottom: 1px solid var(--ys-rule);\r\n      }\r\n      .yeng-selection .yeng-selection__fact {\r\n        margin: 0;\r\n        padding: clamp(28px, 3.2vw, 48px) var(--ys-gap) clamp(28px, 3.2vw, 48px) 0;\r\n      }\r\n      .yeng-selection .yeng-selection__fact + .yeng-selection__fact {\r\n        padding-left: var(--ys-gap);\r\n        border-left: 1px solid var(--ys-rule);\r\n      }\r\n      .yeng-selection .yeng-selection__fact-label {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 12px;\r\n        margin: 0 0 clamp(16px, 1.8vw, 24px);\r\n        font-family: var(--ys-font);\r\n        font-weight: 400;\r\n        font-size: 12px;\r\n        line-height: 1.2;\r\n        letter-spacing: 0.1em;\r\n        text-transform: uppercase;\r\n        color: var(--ys-mute);\r\n      }\r\n      .yeng-selection .yeng-selection__fact-num { color: var(--ys-yellow); }\r\n      .yeng-selection .yeng-selection__fact-value {\r\n        margin: 0;\r\n        font-family: var(--ys-font);\r\n        font-weight: 900;\r\n        font-size: clamp(28px, 3vw, 46px);\r\n        line-height: 1;\r\n        letter-spacing: -0.035em;\r\n        text-transform: uppercase;\r\n        color: var(--ys-white);\r\n      }\r\n      .yeng-selection .yeng-selection__fact-value span { display: block; }\r\n      .yeng-selection .yeng-selection__fact-value .yeng-selection__nowrap { display: inline; white-space: nowrap; }\r\n      .yeng-selection .yeng-selection__fact-value .yeng-selection__fact-small {\r\n        margin-top: 8px;\r\n        font-size: 0.62em;\r\n        letter-spacing: -0.02em;\r\n        color: var(--ys-yellow);\r\n      }\r\n      .yeng-selection .yeng-selection__fact-note {\r\n        max-width: 30ch;\r\n        margin: 14px 0 0;\r\n        font-family: var(--ys-font);\r\n        font-weight: 300;\r\n        font-size: 15px;\r\n        line-height: 1.5;\r\n        color: var(--ys-dim);\r\n      }\r\n\r\n      \/* ---------- Header ---------- *\/\r\n      .yeng-selection .yeng-selection__head {\r\n        display: grid;\r\n        grid-template-columns: repeat(12, minmax(0, 1fr));\r\n        column-gap: var(--ys-gap);\r\n        align-items: end;\r\n        margin: clamp(88px, 10vw, 152px) 0 clamp(48px, 6vw, 88px);\r\n      }\r\n      .yeng-selection .yeng-selection__head-main { grid-column: 1 \/ span 7; }\r\n      .yeng-selection .yeng-selection__label {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 16px;\r\n        margin: 0 0 clamp(24px, 3vw, 40px);\r\n        font-family: var(--ys-font);\r\n        font-weight: 400;\r\n        font-size: 13px;\r\n        line-height: 1.2;\r\n        letter-spacing: 0.1em;\r\n        color: var(--ys-white);\r\n        white-space: nowrap;\r\n      }\r\n      .yeng-selection .yeng-selection__label-line {\r\n        display: block;\r\n        width: clamp(40px, 5vw, 72px);\r\n        height: 2px;\r\n        background: var(--ys-yellow);\r\n      }\r\n      .yeng-selection .yeng-selection__title,\r\n      .yeng-selection h2.yeng-selection__title {\r\n        margin: 0;\r\n        padding: 0;\r\n        font-family: var(--ys-font);\r\n        font-weight: 900;\r\n        font-size: clamp(44px, 6.4vw, 100px);\r\n        line-height: 0.94;\r\n        letter-spacing: -0.04em;\r\n        text-transform: none;\r\n        color: var(--ys-white);\r\n      }\r\n      .yeng-selection .yeng-selection__dot { color: var(--ys-yellow); }\r\n      .yeng-selection .yeng-selection__lead {\r\n        grid-column: 9 \/ -1;\r\n        max-width: 32ch;\r\n        margin: 0;\r\n        font-family: var(--ys-font);\r\n        font-weight: 300;\r\n        font-size: clamp(18px, 1.35vw, 20px);\r\n        line-height: 1.55;\r\n        color: var(--ys-dim);\r\n      }\r\n\r\n      \/* ---------- Timeline (desktop: one horizontal line, six stops) ---------- *\/\r\n      .yeng-selection .yeng-selection__timeline { position: relative; }\r\n      .yeng-selection .yeng-selection__track,\r\n      .yeng-selection .yeng-selection__progress,\r\n      .yeng-selection .yeng-selection__tease {\r\n        position: absolute;\r\n        pointer-events: none;\r\n      }\r\n      .yeng-selection .yeng-selection__track { background: var(--ys-base); }\r\n      .yeng-selection .yeng-selection__progress {\r\n        background: var(--ys-yellow);\r\n        transition:\r\n          width var(--ys-travel, 550ms) cubic-bezier(0.45, 0, 0.2, 1),\r\n          height var(--ys-travel, 550ms) cubic-bezier(0.45, 0, 0.2, 1);\r\n      }\r\n      .yeng-selection .yeng-selection__timeline.is-instant .yeng-selection__progress { transition: none; }\r\n\r\n      \/* the short yellow \"shot\" toward the next stop while it asks for attention *\/\r\n      .yeng-selection .yeng-selection__tease {\r\n        background: linear-gradient(90deg, var(--ys-yellow), rgba(247, 192, 99, 0));\r\n        transform-origin: 0 50%;\r\n        transform: scaleX(0);\r\n        opacity: 0;\r\n      }\r\n      .yeng-selection .yeng-selection__tease.is-vertical {\r\n        background: linear-gradient(180deg, var(--ys-yellow), rgba(247, 192, 99, 0));\r\n        transform-origin: 50% 0;\r\n        transform: scaleY(0);\r\n      }\r\n      @keyframes yeng-selection-shot {\r\n        0%   { transform: scaleX(0);    opacity: 0; }\r\n        15%  { opacity: 1; }\r\n        55%  { transform: scaleX(0.42); opacity: 1; }\r\n        100% { transform: scaleX(0.42); opacity: 0; }\r\n      }\r\n      @keyframes yeng-selection-shot-v {\r\n        0%   { transform: scaleY(0);    opacity: 0; }\r\n        15%  { opacity: 1; }\r\n        55%  { transform: scaleY(0.5);  opacity: 1; }\r\n        100% { transform: scaleY(0.5);  opacity: 0; }\r\n      }\r\n      .yeng-selection .yeng-selection__tease.is-on { animation: yeng-selection-shot 1.1s cubic-bezier(0.2, 0.7, 0.2, 1) 2; }\r\n      .yeng-selection .yeng-selection__tease.is-vertical.is-on { animation-name: yeng-selection-shot-v; }\r\n\r\n      .yeng-selection .yeng-selection__steps {\r\n        position: relative;\r\n        display: grid;\r\n        grid-template-columns: repeat(6, minmax(0, 1fr));\r\n        margin: 0;\r\n        padding: 0;\r\n        list-style: none;\r\n      }\r\n      .yeng-selection .yeng-selection__step { margin: 0; padding: 0; list-style: none; min-width: 0; }\r\n      .yeng-selection .yeng-selection__step::before,\r\n      .yeng-selection .yeng-selection__step::marker { content: none; }\r\n\r\n      \/* each stop is a real button (role=\"tab\") *\/\r\n      .yeng-selection .yeng-selection__btn,\r\n      .yeng-selection .yeng-selection__btn:hover,\r\n      .yeng-selection .yeng-selection__btn:focus,\r\n      .yeng-selection .yeng-selection__btn:active {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        gap: 16px;\r\n        width: 100%;\r\n        margin: 0;\r\n        padding: 8px 6px 12px;\r\n        background: none;\r\n        border: 0;\r\n        border-radius: 0;\r\n        box-shadow: none;\r\n        color: var(--ys-mute);\r\n        font: inherit;\r\n        text-align: center;\r\n        text-transform: none;\r\n        letter-spacing: normal;\r\n        cursor: pointer;\r\n        -webkit-tap-highlight-color: transparent;\r\n        touch-action: manipulation;\r\n        user-select: none;\r\n        -webkit-user-select: none;\r\n      }\r\n      .yeng-selection .yeng-selection__btn:focus { outline: none; }\r\n      .yeng-selection .yeng-selection__btn:focus-visible { outline: 2px solid var(--ys-yellow); outline-offset: 4px; }\r\n\r\n      .yeng-selection .yeng-selection__num {\r\n        font-family: ui-monospace, \"SF Mono\", Menlo, Consolas, monospace;\r\n        font-size: 12px;\r\n        font-weight: 400;\r\n        line-height: 1;\r\n        letter-spacing: 0.08em;\r\n        color: var(--ys-mute);\r\n        transition: color 0.25s ease;\r\n      }\r\n\r\n      \/* node = magnetic + lift wrapper \u2192 press wrapper \u2192 dot (+ ring) *\/\r\n      .yeng-selection .yeng-selection__node {\r\n        --mx: 0px;\r\n        --my: 0px;\r\n        --lift: 0px;\r\n        position: relative;\r\n        display: block;\r\n        width: 16px;\r\n        height: 16px;\r\n        transform: translate3d(var(--mx), calc(var(--my) + var(--lift)), 0);\r\n        transition: transform 0.45s var(--ys-ease);\r\n        will-change: transform;\r\n      }\r\n      .yeng-selection .yeng-selection__btn.is-magnet .yeng-selection__node { transition: transform 0.12s linear; }\r\n      .yeng-selection .yeng-selection__press { position: absolute; inset: 0; display: block; }\r\n      .yeng-selection .yeng-selection__dot-node {\r\n        position: absolute;\r\n        inset: 0;\r\n        display: block;\r\n        border-radius: 50%;\r\n        background: var(--ys-blue);\r\n        box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, 0.4);\r\n        transform: scale(var(--ds, 1));\r\n        transition: background-color 0.25s ease, box-shadow 0.25s ease, transform 0.35s var(--ys-ease);\r\n      }\r\n      .yeng-selection .yeng-selection__ring {                   \/* hover \/ hint ring *\/\r\n        position: absolute;\r\n        inset: -6px;\r\n        display: block;\r\n        border-radius: 50%;\r\n        box-shadow: 0 0 0 1.5px var(--ys-yellow);\r\n        opacity: 0;\r\n        transform: scale(0.7);\r\n        transition: opacity 0.25s ease, transform 0.35s var(--ys-ease);\r\n      }\r\n\r\n      .yeng-selection .yeng-selection__name {\r\n        --lx: 0px;\r\n        --ly: 0px;\r\n        display: block;\r\n        max-width: 14ch;\r\n        font-family: var(--ys-font);\r\n        font-weight: 400;\r\n        font-size: 12px;\r\n        line-height: 1.3;\r\n        letter-spacing: 0.1em;\r\n        text-transform: uppercase;\r\n        color: var(--ys-mute);\r\n        transform: translate3d(var(--lx), var(--ly), 0);\r\n        transition: color 0.25s ease, transform 0.45s var(--ys-ease);\r\n      }\r\n      .yeng-selection .yeng-selection__btn.is-magnet .yeng-selection__name { transition: color 0.25s ease, transform 0.12s linear; }\r\n\r\n      \/* passed \/ completed *\/\r\n      .yeng-selection .yeng-selection__step.is-done .yeng-selection__dot-node {\r\n        background: var(--ys-yellow);\r\n        box-shadow: inset 0 0 0 4px var(--ys-blue), 0 0 0 1.5px var(--ys-yellow);\r\n      }\r\n      .yeng-selection .yeng-selection__step.is-done .yeng-selection__name { color: rgba(255, 255, 255, 0.82); }\r\n      \/* current *\/\r\n      .yeng-selection .yeng-selection__step.is-active .yeng-selection__dot-node {\r\n        --ds: 1.25;\r\n        background: var(--ys-yellow);\r\n        box-shadow: 0 0 0 6px rgba(247, 192, 99, 0.18);\r\n      }\r\n      .yeng-selection .yeng-selection__step.is-active .yeng-selection__num { color: var(--ys-yellow); }\r\n      .yeng-selection .yeng-selection__step.is-active .yeng-selection__name { color: var(--ys-white); }\r\n      \/* the line is on its way to this stop *\/\r\n      .yeng-selection .yeng-selection__step.is-target .yeng-selection__name { color: rgba(255, 255, 255, 0.9); }\r\n\r\n      \/* hover (mouse): the stop reacts like a physical control *\/\r\n      @media (hover: hover) and (pointer: fine) {\r\n        .yeng-selection .yeng-selection__btn:hover .yeng-selection__node { --lift: -3px; }\r\n        .yeng-selection .yeng-selection__btn:hover .yeng-selection__dot-node { --ds: 1.12; }\r\n        .yeng-selection .yeng-selection__step.is-active .yeng-selection__btn:hover .yeng-selection__dot-node { --ds: 1.32; }\r\n        .yeng-selection .yeng-selection__btn:hover .yeng-selection__ring { opacity: 1; transform: scale(1); }\r\n        .yeng-selection .yeng-selection__btn:hover .yeng-selection__num { color: var(--ys-yellow); }\r\n        .yeng-selection .yeng-selection__btn:hover .yeng-selection__name { color: var(--ys-white); }\r\n      }\r\n      .yeng-selection .yeng-selection__btn:focus-visible .yeng-selection__ring { opacity: 1; transform: scale(1); }\r\n      .yeng-selection .yeng-selection__step.is-scrub .yeng-selection__ring { opacity: 1; transform: scale(1); }\r\n      .yeng-selection .yeng-selection__step.is-scrub .yeng-selection__name { color: var(--ys-white); }\r\n\r\n      \/* press \u2192 compress, release \u2192 settle (tactile) *\/\r\n      .yeng-selection .yeng-selection__btn.is-press .yeng-selection__press { transform: scale(0.9); transition: transform 0.12s ease-out; }\r\n      .yeng-selection .yeng-selection__press { transition: transform 0.28s var(--ys-ease); }\r\n\r\n      \/* arrival: the stop lights up the moment the line reaches it *\/\r\n      @keyframes yeng-selection-arrive {\r\n        0%   { transform: scale(0.88); }\r\n        55%  { transform: scale(1.12); }\r\n        100% { transform: scale(1); }\r\n      }\r\n      @keyframes yeng-selection-arrive-big {\r\n        0%   { transform: scale(0.85); }\r\n        50%  { transform: scale(1.35); }\r\n        100% { transform: scale(1); }\r\n      }\r\n      .yeng-selection .yeng-selection__step.is-arrive .yeng-selection__press { animation: yeng-selection-arrive 0.42s var(--ys-ease); }\r\n      .yeng-selection .yeng-selection__step:last-child.is-arrive .yeng-selection__press { animation: yeng-selection-arrive-big 0.6s var(--ys-ease); }\r\n      @keyframes yeng-selection-pass {\r\n        0%   { transform: scale(1); }\r\n        50%  { transform: scale(1.18); }\r\n        100% { transform: scale(1); }\r\n      }\r\n      .yeng-selection .yeng-selection__step.is-pass .yeng-selection__press { animation: yeng-selection-pass 0.3s ease-out; }\r\n\r\n      \/* \"you can click this\": ONLY the next stop, max two soft asks *\/\r\n      @keyframes yeng-selection-ask-ring {\r\n        0%   { opacity: 0;   transform: scale(0.7); }\r\n        30%  { opacity: 1;   transform: scale(1); }\r\n        100% { opacity: 0;   transform: scale(1.6); }\r\n      }\r\n      @keyframes yeng-selection-ask-name {\r\n        0%, 100% { transform: translate3d(0, 0, 0); }\r\n        35%      { transform: translate3d(0, -2px, 0); }\r\n      }\r\n      .yeng-selection .yeng-selection__step.is-hint .yeng-selection__ring { animation: yeng-selection-ask-ring 1.1s cubic-bezier(0.2, 0.6, 0.3, 1) 2; }\r\n      .yeng-selection .yeng-selection__step.is-hint .yeng-selection__name { animation: yeng-selection-ask-name 1.1s var(--ys-ease) 2; color: rgba(255, 255, 255, 0.92); }\r\n      .yeng-selection .yeng-selection__step.is-hint .yeng-selection__num { color: var(--ys-yellow); }\r\n\r\n      \/* dragging along the line (mouse) *\/\r\n      .yeng-selection .yeng-selection__timeline.is-scrubbing,\r\n      .yeng-selection .yeng-selection__timeline.is-scrubbing .yeng-selection__btn { cursor: grabbing; }\r\n\r\n      \/* one phrase per step lights up once, then settles *\/\r\n      .yeng-selection .yeng-selection__emph { color: inherit; transition: color 1.2s ease; }\r\n      .yeng-selection .yeng-selection__emph.is-glow { color: var(--ys-yellow); transition: color 0.3s ease; }\r\n\r\n      \/* per-step description: used on phones only (desktop shows the one panel below) *\/\r\n      .yeng-selection .yeng-selection__step-body { display: none; }\r\n\r\n      \/* ---------- Active step panel (desktop) ---------- *\/\r\n      .yeng-selection .yeng-selection__panel {\r\n        position: relative;\r\n        margin-top: clamp(48px, 5.5vw, 80px);\r\n        padding-top: clamp(28px, 3vw, 40px);\r\n        border-top: 1px solid var(--ys-rule);\r\n        min-height: 12em;\r\n      }\r\n      .yeng-selection .yeng-selection__panel-inner {\r\n        display: grid;\r\n        grid-template-columns: repeat(12, minmax(0, 1fr));\r\n        column-gap: var(--ys-gap);\r\n        align-items: start;\r\n        opacity: 1;\r\n        transform: none;\r\n        transition: opacity 0.4s ease, transform 0.44s var(--ys-ease);\r\n      }\r\n      \/* old step leaves: fades a little and lifts 6px (forward) or drops 6px (backward) *\/\r\n      .yeng-selection .yeng-selection__panel-inner.is-out-fwd,\r\n      .yeng-selection .yeng-selection__panel-inner.is-out-back {\r\n        opacity: 0;\r\n        transition: opacity 0.16s ease, transform 0.18s ease-in;\r\n      }\r\n      .yeng-selection .yeng-selection__panel-inner.is-out-fwd  { transform: translate3d(0, -6px, 0); }\r\n      .yeng-selection .yeng-selection__panel-inner.is-out-back { transform: translate3d(0, 6px, 0); }\r\n      \/* new step waits just below (forward) or above (backward), then settles *\/\r\n      .yeng-selection .yeng-selection__panel-inner.is-in-fwd,\r\n      .yeng-selection .yeng-selection__panel-inner.is-in-back { opacity: 0; transition: none; }\r\n      .yeng-selection .yeng-selection__panel-inner.is-in-fwd  { transform: translate3d(0, 10px, 0); }\r\n      .yeng-selection .yeng-selection__panel-inner.is-in-back { transform: translate3d(0, -10px, 0); }\r\n\r\n      .yeng-selection .yeng-selection__count {\r\n        grid-column: 1 \/ span 2;\r\n        margin: 0.9em 0 0;\r\n        font-family: ui-monospace, \"SF Mono\", Menlo, Consolas, monospace;\r\n        font-size: 13px;\r\n        letter-spacing: 0.08em;\r\n        color: var(--ys-mute);\r\n      }\r\n      .yeng-selection .yeng-selection__count b { font-weight: 400; color: var(--ys-yellow); }\r\n      .yeng-selection .yeng-selection__panel-title,\r\n      .yeng-selection h3.yeng-selection__panel-title {\r\n        position: relative;\r\n        grid-column: 3 \/ span 5;\r\n        margin: 0;\r\n        font-family: var(--ys-font);\r\n        font-weight: 900;\r\n        font-size: clamp(34px, 3.8vw, 60px);\r\n        line-height: 0.98;\r\n        letter-spacing: -0.04em;\r\n        text-transform: none;\r\n        color: var(--ys-white);\r\n      }\r\n      .yeng-selection .yeng-selection__panel-text {\r\n        grid-column: 8 \/ -1;\r\n        max-width: 38ch;\r\n        margin: 0.35em 0 0;\r\n        font-family: var(--ys-font);\r\n        font-weight: 300;\r\n        font-size: clamp(18px, 1.4vw, 21px);\r\n        line-height: 1.55;\r\n        color: var(--ys-dim);\r\n      }\r\n\r\n      \/* ---------- Welcome: the small design reward ---------- *\/\r\n      .yeng-selection .yeng-selection__in {\r\n        display: none;\r\n        margin: 0 0 14px;\r\n        font-family: var(--ys-font);\r\n        font-weight: 400;\r\n        font-size: 12px;\r\n        letter-spacing: 0.14em;\r\n        text-transform: uppercase;\r\n        color: var(--ys-yellow);\r\n      }\r\n      .yeng-selection .yeng-selection__in::before { content: \"[ \"; }\r\n      .yeng-selection .yeng-selection__in::after { content: \" ]\"; }\r\n      .yeng-selection.is-final .yeng-selection__in { display: block; animation: yeng-selection-in 0.5s var(--ys-ease) 0.12s both; }\r\n      .yeng-selection .yeng-selection__title-wrap { position: relative; display: inline-block; }\r\n      .yeng-selection .yeng-selection__spark {\r\n        position: absolute;\r\n        display: none;\r\n        width: 12px;\r\n        height: 2px;\r\n        background: var(--ys-yellow);\r\n        border-radius: 1px;\r\n        opacity: 0;\r\n        pointer-events: none;\r\n      }\r\n      .yeng-selection.is-final .yeng-selection__spark { display: block; animation: yeng-selection-spark 0.9s var(--ys-ease) forwards; animation-delay: var(--dl, 0ms); }\r\n      .yeng-selection .yeng-selection__spark:nth-child(1) { right: -18px; top: 2px;     --r: -35deg; --x: 10px; --y: -10px; --dl: 160ms; }\r\n      .yeng-selection .yeng-selection__spark:nth-child(2) { right: -24px; top: 42%;     --r: 0deg;   --x: 12px; --y: 0px;   --dl: 220ms; }\r\n      .yeng-selection .yeng-selection__spark:nth-child(3) { right: -18px; bottom: 6px;  --r: 35deg;  --x: 10px; --y: 10px;  --dl: 280ms; }\r\n      .yeng-selection .yeng-selection__spark:nth-child(4) { left: 55%;    top: -14px;   --r: -90deg; --x: 0px;  --y: -10px; --dl: 250ms; width: 8px; }\r\n      .yeng-selection .yeng-selection__spark:nth-child(5) { left: -16px;  top: -6px;    --r: -145deg; --x: 8px; --y: 0px;   --dl: 310ms; width: 8px; }\r\n      @keyframes yeng-selection-in {\r\n        from { opacity: 0; transform: translate3d(0, 4px, 0) scale(0.94); }\r\n        to   { opacity: 1; transform: none; }\r\n      }\r\n      @keyframes yeng-selection-spark {\r\n        0%   { opacity: 0; transform: rotate(var(--r)) translate(0, 0) scaleX(0.3); }\r\n        40%  { opacity: 1; }\r\n        100% { opacity: 1; transform: rotate(var(--r)) translate(var(--x), var(--y)) scaleX(1); }\r\n      }\r\n\r\n      \/* ---------- Tablet ---------- *\/\r\n      @media (max-width: 1024px) {\r\n        .yeng-selection .yeng-selection__head-main,\r\n        .yeng-selection .yeng-selection__lead { grid-column: 1 \/ -1; }\r\n        .yeng-selection .yeng-selection__lead { margin-top: 28px; }\r\n        .yeng-selection .yeng-selection__name { font-size: 11px; letter-spacing: 0.06em; }\r\n        .yeng-selection .yeng-selection__count { grid-column: 1 \/ -1; margin: 0 0 16px; }\r\n        .yeng-selection .yeng-selection__panel-title { grid-column: 1 \/ span 6; }\r\n        .yeng-selection .yeng-selection__panel-text { grid-column: 7 \/ -1; }\r\n      }\r\n\r\n      \/* ---------- Mobile: a vertical journey; the current step opens in place ---------- *\/\r\n      @media (max-width: 767px) {\r\n        .yeng-selection .yeng-selection__facts { grid-template-columns: minmax(0, 1fr); }\r\n        .yeng-selection .yeng-selection__fact,\r\n        .yeng-selection .yeng-selection__fact + .yeng-selection__fact { padding: 26px 0; border-left: 0; }\r\n        .yeng-selection .yeng-selection__fact + .yeng-selection__fact { border-top: 1px solid var(--ys-rule); }\r\n        .yeng-selection .yeng-selection__fact-value { font-size: clamp(28px, 9vw, 40px); }\r\n\r\n        .yeng-selection .yeng-selection__head { margin-top: 72px; }\r\n        .yeng-selection .yeng-selection__label { white-space: normal; }\r\n        .yeng-selection .yeng-selection__label-line { flex: 1 1 auto; width: auto; }\r\n        .yeng-selection .yeng-selection__title { font-size: clamp(40px, 11.5vw, 56px); }\r\n\r\n        .yeng-selection .yeng-selection__steps { grid-template-columns: minmax(0, 1fr); }\r\n        .yeng-selection .yeng-selection__btn,\r\n        .yeng-selection .yeng-selection__btn:hover,\r\n        .yeng-selection .yeng-selection__btn:focus,\r\n        .yeng-selection .yeng-selection__btn:active {\r\n          display: grid;\r\n          grid-template-columns: 28px 16px minmax(0, 1fr);\r\n          column-gap: 16px;\r\n          align-items: center;\r\n          padding: 14px 0;\r\n          text-align: left;\r\n        }\r\n        .yeng-selection .yeng-selection__name { max-width: none; font-size: 13px; letter-spacing: 0.08em; }\r\n        .yeng-selection .yeng-selection__step.is-active .yeng-selection__name { --lx: 4px; }   \/* subtle indent *\/\r\n        .yeng-selection .yeng-selection__step.is-active .yeng-selection__dot-node { --ds: 1.15; }\r\n\r\n        .yeng-selection .yeng-selection__step-body {\r\n          display: grid;\r\n          grid-template-rows: 0fr;\r\n          margin-left: 76px;                                     \/* number 28 + gap 16 + node 16 + gap 16 *\/\r\n          transition: grid-template-rows 0.42s var(--ys-ease);\r\n        }\r\n        .yeng-selection .yeng-selection__step-body > div { min-height: 0; overflow: hidden; }\r\n        .yeng-selection .yeng-selection__step-body p {\r\n          margin: 0;\r\n          padding: 2px 0 18px;\r\n          max-width: 34ch;\r\n          font-family: var(--ys-font);\r\n          font-weight: 300;\r\n          font-size: 16px;\r\n          line-height: 1.55;\r\n          color: var(--ys-dim);\r\n          opacity: 0;\r\n          transform: translate3d(0, 6px, 0);\r\n          transition: opacity 0.3s ease, transform 0.4s var(--ys-ease);\r\n        }\r\n        .yeng-selection .yeng-selection__step.is-active .yeng-selection__step-body { grid-template-rows: 1fr; }\r\n        .yeng-selection .yeng-selection__step.is-active .yeng-selection__step-body p {\r\n          opacity: 1;\r\n          transform: none;\r\n          transition-delay: 0.12s;\r\n        }\r\n        .yeng-selection .yeng-selection__panel { display: none; }\r\n        .yeng-selection .yeng-selection__in-mobile { display: none; }\r\n        .yeng-selection.is-final .yeng-selection__step:last-child .yeng-selection__in-mobile {\r\n          display: block;\r\n          margin: 0 0 6px;\r\n          font-size: 11px;\r\n          letter-spacing: 0.14em;\r\n          text-transform: uppercase;\r\n          color: var(--ys-yellow);\r\n          animation: yeng-selection-in 0.5s var(--ys-ease) 0.12s both;\r\n        }\r\n      }\r\n      @media (min-width: 768px) {\r\n        .yeng-selection .yeng-selection__in-mobile { display: none; }\r\n      }\r\n\r\n      \/* ---------- Reduced motion: instant final states, everything visible ---------- *\/\r\n      @media (prefers-reduced-motion: reduce) {\r\n        .yeng-selection .yeng-selection__progress,\r\n        .yeng-selection .yeng-selection__node,\r\n        .yeng-selection .yeng-selection__press,\r\n        .yeng-selection .yeng-selection__dot-node,\r\n        .yeng-selection .yeng-selection__ring,\r\n        .yeng-selection .yeng-selection__name,\r\n        .yeng-selection .yeng-selection__panel-inner,\r\n        .yeng-selection .yeng-selection__step-body,\r\n        .yeng-selection .yeng-selection__step-body p,\r\n        .yeng-selection .yeng-selection__emph { transition: none !important; }\r\n        .yeng-selection .yeng-selection__node { --mx: 0px !important; --my: 0px !important; --lift: 0px !important; }\r\n        .yeng-selection .yeng-selection__panel-inner,\r\n        .yeng-selection .yeng-selection__panel-inner[class*=\"is-\"] { opacity: 1 !important; transform: none !important; }\r\n        .yeng-selection .yeng-selection__press,\r\n        .yeng-selection .yeng-selection__ring,\r\n        .yeng-selection .yeng-selection__name,\r\n        .yeng-selection .yeng-selection__tease,\r\n        .yeng-selection .yeng-selection__in,\r\n        .yeng-selection .yeng-selection__in-mobile { animation: none !important; }\r\n        .yeng-selection .yeng-selection__tease { display: none !important; }\r\n        .yeng-selection.is-final .yeng-selection__in { opacity: 1 !important; transform: none !important; }\r\n        .yeng-selection.is-final .yeng-selection__spark { animation: none !important; opacity: 1 !important; transform: rotate(var(--r)) translate(var(--x), var(--y)) !important; }\r\n        .yeng-selection .yeng-selection__step.is-active .yeng-selection__step-body p { opacity: 1 !important; transform: none !important; }\r\n        .yeng-selection .yeng-selection__emph.is-glow { color: inherit !important; }\r\n      }\r\n    <\/style>\r\n\r\n    <div class=\"yeng-selection__inner\">\r\n\r\n      <!-- ===== Programme information ===== -->\r\n      <dl class=\"yeng-selection__facts\" data-yap-reveal>\r\n        <div class=\"yeng-selection__fact\">\r\n          <dt class=\"yeng-selection__fact-label\"><span class=\"yeng-selection__fact-num\">01<\/span>Programme duration<\/dt>\r\n          <dd class=\"yeng-selection__fact-value\">6 months<\/dd>\r\n          <dd class=\"yeng-selection__fact-note\">A six-month practical entrepreneurship programme.<\/dd>\r\n        <\/div>\r\n        <div class=\"yeng-selection__fact\">\r\n          <dt class=\"yeng-selection__fact-label\"><span class=\"yeng-selection__fact-num\">02<\/span>When we meet<\/dt>\r\n          <dd class=\"yeng-selection__fact-value\"><span>Saturdays<\/span><span class=\"yeng-selection__fact-small\">10:00\u201312:00<\/span><\/dd>\r\n          <dd class=\"yeng-selection__fact-note\">Weekly sessions throughout the programme.<\/dd>\r\n        <\/div>\r\n        <div class=\"yeng-selection__fact\">\r\n          <dt class=\"yeng-selection__fact-label\"><span class=\"yeng-selection__fact-num\">03<\/span>Where<\/dt>\r\n          <dd class=\"yeng-selection__fact-value\">To be <span class=\"yeng-selection__nowrap\">announced&nbsp;\ud83d\udc40<\/span><\/dd>\r\n        <\/div>\r\n      <\/dl>\r\n\r\n      <!-- ===== Selection process header ===== -->\r\n      <div class=\"yeng-selection__head\">\r\n        <div class=\"yeng-selection__head-main\">\r\n          <p class=\"yeng-selection__label\" data-yap-reveal><span>[ THE SELECTION PROCESS ]<\/span><span class=\"yeng-selection__label-line\" aria-hidden=\"true\"><\/span><\/p>\r\n          <h2 class=\"yeng-selection__title\" id=\"yeng-selection-title\" data-yap-reveal style=\"--yap-d:1\">From application<br>to YEnG<span class=\"yeng-selection__dot\">.<\/span><\/h2>\r\n        <\/div>\r\n        <p class=\"yeng-selection__lead\" data-yap-reveal style=\"--yap-d:2\">Six steps between submitting your application and joining the programme.<\/p>\r\n      <\/div>\r\n\r\n      <!-- ===== Timeline: six real buttons (tabs). Edit a step here: data-title = panel title, the <p> = its text,\r\n           the <span class=\"yeng-selection__emph\"> = the phrase that lights up once. ===== -->\r\n      <div class=\"yeng-selection__timeline\" data-yeng-selection-timeline>\r\n        <span class=\"yeng-selection__track\" aria-hidden=\"true\" data-yeng-selection-track><\/span>\r\n        <span class=\"yeng-selection__progress\" aria-hidden=\"true\" data-yeng-selection-progress><\/span>\r\n        <span class=\"yeng-selection__tease\" aria-hidden=\"true\" data-yeng-selection-tease><\/span>\r\n\r\n        <ol class=\"yeng-selection__steps\" role=\"tablist\" aria-label=\"The YEnG selection process\" data-yeng-selection-list>\r\n          <li class=\"yeng-selection__step\" data-title=\"Application\">\r\n            <button type=\"button\" class=\"yeng-selection__btn\" role=\"tab\" id=\"yeng-selection-tab-1\" aria-selected=\"true\" aria-controls=\"yeng-selection-panel\">\r\n              <span class=\"yeng-selection__num\">01<\/span>\r\n              <span class=\"yeng-selection__node\" aria-hidden=\"true\"><span class=\"yeng-selection__press\"><span class=\"yeng-selection__ring\"><\/span><span class=\"yeng-selection__dot-node\"><\/span><\/span><\/span>\r\n              <span class=\"yeng-selection__name\">Application<\/span>\r\n            <\/button>\r\n            <div class=\"yeng-selection__step-body\"><div><p>Tell us <span class=\"yeng-selection__emph\">who you are<\/span>, what interests you and why you want to join YEnG.<\/p><\/div><\/div>\r\n          <\/li>\r\n          <li class=\"yeng-selection__step\" data-title=\"Application screening\">\r\n            <button type=\"button\" class=\"yeng-selection__btn\" role=\"tab\" id=\"yeng-selection-tab-2\" aria-selected=\"false\" aria-controls=\"yeng-selection-panel\">\r\n              <span class=\"yeng-selection__num\">02<\/span>\r\n              <span class=\"yeng-selection__node\" aria-hidden=\"true\"><span class=\"yeng-selection__press\"><span class=\"yeng-selection__ring\"><\/span><span class=\"yeng-selection__dot-node\"><\/span><\/span><\/span>\r\n              <span class=\"yeng-selection__name\">Screening<\/span>\r\n            <\/button>\r\n            <div class=\"yeng-selection__step-body\"><div><p>We review each application individually, looking at <span class=\"yeng-selection__emph\">motivation, curiosity<\/span> and fit with the programme.<\/p><\/div><\/div>\r\n          <\/li>\r\n          <li class=\"yeng-selection__step\" data-title=\"Interview invitation\">\r\n            <button type=\"button\" class=\"yeng-selection__btn\" role=\"tab\" id=\"yeng-selection-tab-3\" aria-selected=\"false\" aria-controls=\"yeng-selection-panel\">\r\n              <span class=\"yeng-selection__num\">03<\/span>\r\n              <span class=\"yeng-selection__node\" aria-hidden=\"true\"><span class=\"yeng-selection__press\"><span class=\"yeng-selection__ring\"><\/span><span class=\"yeng-selection__dot-node\"><\/span><\/span><\/span>\r\n              <span class=\"yeng-selection__name\">Interview invitation<\/span>\r\n            <\/button>\r\n            <div class=\"yeng-selection__step-body\"><div><p>Selected applicants receive an email with a link to <span class=\"yeng-selection__emph\">schedule their interview<\/span>.<\/p><\/div><\/div>\r\n          <\/li>\r\n          <li class=\"yeng-selection__step\" data-title=\"Interview\">\r\n            <button type=\"button\" class=\"yeng-selection__btn\" role=\"tab\" id=\"yeng-selection-tab-4\" aria-selected=\"false\" aria-controls=\"yeng-selection-panel\">\r\n              <span class=\"yeng-selection__num\">04<\/span>\r\n              <span class=\"yeng-selection__node\" aria-hidden=\"true\"><span class=\"yeng-selection__press\"><span class=\"yeng-selection__ring\"><\/span><span class=\"yeng-selection__dot-node\"><\/span><\/span><\/span>\r\n              <span class=\"yeng-selection__name\">Interview<\/span>\r\n            <\/button>\r\n            <div class=\"yeng-selection__step-body\"><div><p>A short conversation where we <span class=\"yeng-selection__emph\">get to know you<\/span> beyond the application.<\/p><\/div><\/div>\r\n          <\/li>\r\n          <li class=\"yeng-selection__step\" data-title=\"Acceptance\">\r\n            <button type=\"button\" class=\"yeng-selection__btn\" role=\"tab\" id=\"yeng-selection-tab-5\" aria-selected=\"false\" aria-controls=\"yeng-selection-panel\">\r\n              <span class=\"yeng-selection__num\">05<\/span>\r\n              <span class=\"yeng-selection__node\" aria-hidden=\"true\"><span class=\"yeng-selection__press\"><span class=\"yeng-selection__ring\"><\/span><span class=\"yeng-selection__dot-node\"><\/span><\/span><\/span>\r\n              <span class=\"yeng-selection__name\">Acceptance<\/span>\r\n            <\/button>\r\n            <div class=\"yeng-selection__step-body\"><div><p>Successful applicants receive their <span class=\"yeng-selection__emph\">official YEnG acceptance<\/span> and the next steps.<\/p><\/div><\/div>\r\n          <\/li>\r\n          <li class=\"yeng-selection__step\" data-title=\"Welcome to YEnG.\">\r\n            <button type=\"button\" class=\"yeng-selection__btn\" role=\"tab\" id=\"yeng-selection-tab-6\" aria-selected=\"false\" aria-controls=\"yeng-selection-panel\">\r\n              <span class=\"yeng-selection__num\">06<\/span>\r\n              <span class=\"yeng-selection__node\" aria-hidden=\"true\"><span class=\"yeng-selection__press\"><span class=\"yeng-selection__ring\"><\/span><span class=\"yeng-selection__dot-node\"><\/span><\/span><\/span>\r\n              <span class=\"yeng-selection__name\">Welcome<\/span>\r\n            <\/button>\r\n            <div class=\"yeng-selection__step-body\"><div><p class=\"yeng-selection__in-mobile\" aria-hidden=\"true\">[ You\u2019re in ]<\/p><p>You\u2019re in. Meet the community, get ready for the first session and <span class=\"yeng-selection__emph\">start building<\/span>.<\/p><\/div><\/div>\r\n          <\/li>\r\n        <\/ol>\r\n      <\/div>\r\n\r\n      <!-- ===== The active step (desktop \/ tablet): filled by the script from the list above ===== -->\r\n      <div class=\"yeng-selection__panel\" id=\"yeng-selection-panel\" role=\"tabpanel\" aria-labelledby=\"yeng-selection-tab-1\" data-yeng-selection-panel>\r\n        <div class=\"yeng-selection__panel-inner\" data-yeng-selection-inner>\r\n          <p class=\"yeng-selection__count\" aria-hidden=\"true\"><b data-yeng-selection-count>01<\/b> \/ 06<\/p>\r\n          <h3 class=\"yeng-selection__panel-title\">\r\n            <span class=\"yeng-selection__in\" aria-hidden=\"true\">You\u2019re in<\/span>\r\n            <span class=\"yeng-selection__title-wrap\"><span data-yeng-selection-title>Application<\/span><span aria-hidden=\"true\"><span class=\"yeng-selection__spark\"><\/span><span class=\"yeng-selection__spark\"><\/span><span class=\"yeng-selection__spark\"><\/span><span class=\"yeng-selection__spark\"><\/span><span class=\"yeng-selection__spark\"><\/span><\/span><\/span>\r\n          <\/h3>\r\n          <p class=\"yeng-selection__panel-text\" data-yeng-selection-text>Tell us <span class=\"yeng-selection__emph\">who you are<\/span>, what interests you and why you want to join YEnG.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/section>\r\n\r\n<script>\r\n\/* YEnG \u00b7 Selection process v2 \u2014 tactile, guided timeline (vanilla JS, no libraries)\r\n   - Hover (mouse): the stop lifts, grows, shows a yellow ring; a gentle magnetic pull follows the cursor.\r\n   - Press: the stop compresses, then settles. The yellow line TRAVELS to the chosen stop and lights it on arrival.\r\n   - Idle: the next stop asks twice (ring + label nudge + a short yellow shot), then the tour moves on by itself.\r\n   - Manual always wins: click \/ tap \/ keys \/ hover \/ keyboard focus pause the tour; ~9s after a click it continues.\r\n   - Optional: drag along the timeline with the mouse to scrub between stops (buttons stay the main control).\r\n   - Reduced motion: no tour, no magnet, no travel, no fades \u2014 every step is still one click away, fully visible. *\/\r\n(function () {\r\n  var CFG = {\r\n    hintAfter: 1600,     \/\/ ms on a step before the next stop asks for attention\r\n    advanceAfter: 3600,  \/\/ ms on a step before the tour moves on (+ ~0.55s travel \u2248 4s per step)\r\n    finalHold: 5600,     \/\/ ms on \"Welcome to YEnG.\" before the tour starts again\r\n    manualPause: 9000,   \/\/ ms of calm after a click \/ tap \/ key before the tour continues\r\n    resumeDelay: 1200,   \/\/ ms after hover \/ focus ends\r\n    travel: 550,         \/\/ ms for the line to reach the next stop\r\n    travelPerExtra: 110, \/\/ extra ms per stop when jumping several stops ahead\r\n    magnet: 5,           \/\/ max px the dot follows the cursor\r\n    glow: 1100           \/\/ ms the key phrase stays yellow\r\n  };\r\n\r\n  function init() {\r\n    var root = document.querySelector('[data-yeng-selection]');\r\n    if (!root || root.getAttribute('data-yeng-selection-ready') === '1') return;\r\n    root.setAttribute('data-yeng-selection-ready', '1');\r\n\r\n    var timeline = root.querySelector('[data-yeng-selection-timeline]');\r\n    var list     = root.querySelector('[data-yeng-selection-list]');\r\n    var track    = root.querySelector('[data-yeng-selection-track]');\r\n    var progress = root.querySelector('[data-yeng-selection-progress]');\r\n    var tease    = root.querySelector('[data-yeng-selection-tease]');\r\n    var panel    = root.querySelector('[data-yeng-selection-panel]');\r\n    var inner    = root.querySelector('[data-yeng-selection-inner]');\r\n    var countEl  = root.querySelector('[data-yeng-selection-count]');\r\n    var titleEl  = root.querySelector('[data-yeng-selection-title]');\r\n    var textEl   = root.querySelector('[data-yeng-selection-text]');\r\n    var steps    = Array.prototype.slice.call(root.querySelectorAll('.yeng-selection__step'));\r\n    if (!timeline || !list || !steps.length) return;\r\n\r\n    var buttons = steps.map(function (s) { return s.querySelector('.yeng-selection__btn'); });\r\n    var nodes   = steps.map(function (s) { return s.querySelector('.yeng-selection__node'); });\r\n    var names   = steps.map(function (s) { return s.querySelector('.yeng-selection__name'); });\r\n    var bodies  = steps.map(function (s) { return s.querySelector('.yeng-selection__step-body'); });\r\n    var texts   = steps.map(function (s) { return s.querySelector('.yeng-selection__step-body p:last-child'); });\r\n    var n = steps.length, last = n - 1;\r\n\r\n    function mq(q) { return window.matchMedia ? window.matchMedia(q) : null; }\r\n    var mqReduce = mq('(prefers-reduced-motion: reduce)');\r\n    var mqMobile = mq('(max-width: 767px)');\r\n    var mqMouse  = mq('(hover: hover) and (pointer: fine)');\r\n    function reduce() { return !!(mqReduce && mqReduce.matches); }\r\n    function mobile() { return !!(mqMobile && mqMobile.matches); }\r\n    function mouse()  { return !!(mqMouse && mqMouse.matches); }\r\n\r\n    var active = 0;                        \/\/ the chosen step (logical)\r\n    var travelling = false;\r\n    var autoTimers = [], moveTimers = [], glowT = 0, panelT = 0;\r\n    var inView = false, hovering = false, focusing = false, manualUntil = 0;\r\n\r\n    function after(list, fn, ms) { list.push(setTimeout(fn, ms)); }\r\n    function clearList(list) { list.forEach(clearTimeout); list.length = 0; }\r\n    function clearAuto() { clearList(autoTimers); stopHint(); }\r\n\r\n    \/* ---------- geometry: the line is measured from the real node positions ---------- *\/\r\n    function centre(k) {\r\n      var r = nodes[k].getBoundingClientRect(), t = timeline.getBoundingClientRect();\r\n      return { x: r.left + r.width \/ 2 - t.left, y: r.top + r.height \/ 2 - t.top };\r\n    }\r\n    \/* phones: where node k will sit once only step `open` has its description open *\/\r\n    function finalY(k, openNow, openNext) {\r\n      var y = centre(k).y;\r\n      if (openNow > -1 && openNow < k && bodies[openNow]) y -= bodies[openNow].getBoundingClientRect().height;\r\n      return y;\r\n    }\r\n    function drawTrack() {\r\n      var a = centre(0), z = centre(last);\r\n      if (mobile()) track.style.cssText = 'left:' + (a.x - 0.5) + 'px;top:' + a.y + 'px;width:1px;height:' + Math.max(0, z.y - a.y) + 'px;';\r\n      else track.style.cssText = 'left:' + a.x + 'px;top:' + (a.y - 0.5) + 'px;height:1px;width:' + Math.max(0, z.x - a.x) + 'px;';\r\n    }\r\n    function setLine(toIndex, instant, yOverride) {\r\n      var a = centre(0);\r\n      timeline.classList.toggle('is-instant', !!instant);\r\n      if (mobile()) {\r\n        var y = typeof yOverride === 'number' ? yOverride : centre(toIndex).y;\r\n        progress.style.left = (a.x - 1) + 'px'; progress.style.top = a.y + 'px';\r\n        progress.style.width = '2px'; progress.style.height = Math.max(0, y - a.y) + 'px';\r\n      } else {\r\n        var c = centre(toIndex);\r\n        progress.style.top = (a.y - 1) + 'px'; progress.style.left = a.x + 'px';\r\n        progress.style.height = '2px'; progress.style.width = Math.max(0, c.x - a.x) + 'px';\r\n      }\r\n    }\r\n    function redraw() { if (travelling) return; drawTrack(); setLine(active, true); }\r\n\r\n    \/* ---------- states ---------- *\/\r\n    function paint(k) {                    \/\/ k = the lit (active) step; everything before it is done\r\n      steps.forEach(function (s, j) {\r\n        s.classList.toggle('is-done', j < k);\r\n        s.classList.toggle('is-active', j === k);\r\n        s.classList.remove('is-target');\r\n      });\r\n      root.classList.toggle('is-final', k === last);\r\n    }\r\n    function select(k) {                   \/\/ accessibility state follows the choice immediately\r\n      buttons.forEach(function (b, j) { b.setAttribute('aria-selected', j === k ? 'true' : 'false'); });\r\n      if (panel) panel.setAttribute('aria-labelledby', buttons[k].id);\r\n    }\r\n    function pop(k, cls, ms) {\r\n      steps[k].classList.remove(cls); void steps[k].offsetWidth; steps[k].classList.add(cls);\r\n      setTimeout(function () { steps[k].classList.remove(cls); }, ms);\r\n    }\r\n    function glow(k) {\r\n      if (reduce()) return;\r\n      clearTimeout(glowT);\r\n      var marks = [];\r\n      var a = inner && inner.querySelector('.yeng-selection__emph'); if (a) marks.push(a);\r\n      var b = steps[k].querySelector('.yeng-selection__step-body .yeng-selection__emph'); if (b) marks.push(b);\r\n      marks.forEach(function (m) { m.classList.add('is-glow'); });\r\n      glowT = setTimeout(function () { marks.forEach(function (m) { m.classList.remove('is-glow'); }); }, CFG.glow);\r\n    }\r\n\r\n    \/* ---------- the panel: old step leaves (6px), new step settles (10px); direction aware ---------- *\/\r\n    function fillPanel(k) {\r\n      if (countEl) countEl.textContent = (k < 9 ? '0' : '') + (k + 1);\r\n      if (titleEl) titleEl.textContent = steps[k].getAttribute('data-title') || '';\r\n      if (textEl && texts[k]) {\r\n        textEl.textContent = '';\r\n        Array.prototype.forEach.call(texts[k].childNodes, function (c) { textEl.appendChild(c.cloneNode(true)); });\r\n      }\r\n    }\r\n    function swapPanel(k, dir, delay) {\r\n      if (!inner) return;\r\n      clearTimeout(panelT);\r\n      inner.classList.remove('is-out-fwd', 'is-out-back', 'is-in-fwd', 'is-in-back');\r\n      if (reduce()) { fillPanel(k); return; }\r\n      var outCls = dir < 0 ? 'is-out-back' : 'is-out-fwd', inCls = dir < 0 ? 'is-in-back' : 'is-in-fwd';\r\n      inner.classList.add(outCls);\r\n      panelT = setTimeout(function () {\r\n        fillPanel(k);\r\n        inner.classList.remove(outCls);\r\n        inner.classList.add(inCls);\r\n        void inner.offsetWidth;                      \/\/ commit the start position\r\n        inner.classList.remove(inCls);               \/\/ \u2192 transitions to rest (0.4s)\r\n        glow(k);\r\n      }, Math.max(180, delay || 0));\r\n    }\r\n\r\n    \/* ---------- go to a step ---------- *\/\r\n    function go(to, opts) {\r\n      opts = opts || {};\r\n      if (to < 0 || to > last) return;\r\n      var from = active;\r\n      if (to === from && !opts.force) return;\r\n      clearList(moveTimers);\r\n      stopHint();\r\n      active = to;\r\n      select(to);\r\n\r\n      var forward = to > from;\r\n      var calm = reduce() || opts.instant;\r\n\r\n      if (calm || !forward || opts.restart) {\r\n        \/* backwards, restart or reduced motion: clean, immediate update *\/\r\n        travelling = false;\r\n        paint(to);\r\n        drawTrack();\r\n        setLine(to, true);\r\n        if (calm) {\r\n          clearTimeout(panelT);\r\n          if (inner) inner.classList.remove('is-out-fwd', 'is-out-back', 'is-in-fwd', 'is-in-back');\r\n          fillPanel(to);\r\n        } else {\r\n          pop(to, 'is-arrive', 650);\r\n          swapPanel(to, opts.restart || forward ? 1 : -1, 0);\r\n        }\r\n        if (!calm) setTimeout(function () { if (!travelling) setLine(active, true); }, 460);   \/\/ phones: after the open\/close settles\r\n        return;\r\n      }\r\n\r\n      \/* forwards: the line travels, stops light up as it reaches them *\/\r\n      var span = to - from;\r\n      var dur = Math.min(900, CFG.travel + CFG.travelPerExtra * (span - 1));\r\n      travelling = true;\r\n      timeline.style.setProperty('--ys-travel', dur + 'ms');\r\n\r\n      steps.forEach(function (s, j) {\r\n        s.classList.toggle('is-done', j <= from);\r\n        s.classList.remove('is-active');\r\n        s.classList.toggle('is-target', j === to);\r\n      });\r\n      root.classList.remove('is-final');\r\n\r\n      var openNow = from;                             \/\/ phones: the old description closes while we travel\r\n      var y = mobile() ? finalY(to, openNow) : undefined;\r\n      drawTrack();\r\n      setLine(to, false, y);\r\n\r\n      for (var j = from + 1; j < to; j++) {\r\n        (function (k) {\r\n          after(moveTimers, function () { steps[k].classList.add('is-done'); pop(k, 'is-pass', 320); }, dur * (k - from) \/ span);\r\n        })(j);\r\n      }\r\n      after(moveTimers, function () {\r\n        travelling = false;\r\n        paint(to);\r\n        pop(to, 'is-arrive', to === last ? 650 : 450);\r\n        setTimeout(redraw, 480);                      \/\/ re-measure once any open\/close has settled\r\n      }, dur);\r\n\r\n      swapPanel(to, 1, dur * 0.45);                   \/\/ content change is timed with the line\r\n    }\r\n\r\n    \/* ---------- next stop asks for attention (max two) ---------- *\/\r\n    function startHint(k) {\r\n      if (k > last || reduce()) return;\r\n      steps[k].classList.add('is-hint');\r\n      if (tease) {\r\n        var a = centre(active), b = centre(k);\r\n        tease.classList.remove('is-on');\r\n        if (mobile()) {\r\n          tease.classList.add('is-vertical');\r\n          tease.style.cssText = 'left:' + (a.x - 1) + 'px;top:' + a.y + 'px;width:2px;height:' + Math.max(0, b.y - a.y) + 'px;';\r\n        } else {\r\n          tease.classList.remove('is-vertical');\r\n          tease.style.cssText = 'left:' + a.x + 'px;top:' + (a.y - 1) + 'px;height:2px;width:' + Math.max(0, b.x - a.x) + 'px;';\r\n        }\r\n        void tease.offsetWidth;\r\n        tease.classList.add('is-on');\r\n      }\r\n    }\r\n    function stopHint() {\r\n      steps.forEach(function (s) { s.classList.remove('is-hint'); });\r\n      if (tease) tease.classList.remove('is-on');\r\n    }\r\n\r\n    \/* ---------- the tour (autoplay) ---------- *\/\r\n    function canPlay() {\r\n      return inView && !hovering && !focusing && !reduce() && document.visibilityState !== 'hidden';\r\n    }\r\n    function schedule(extra) {\r\n      clearAuto();\r\n      if (!canPlay()) return;\r\n      extra = Math.max(extra || 0, manualUntil - Date.now() - CFG.hintAfter, 0);\r\n      if (active === last) {\r\n        after(autoTimers, function () { if (canPlay()) { go(0, { restart: true }); schedule(); } }, extra + CFG.finalHold);\r\n        return;\r\n      }\r\n      var next = active + 1;\r\n      after(autoTimers, function () { if (canPlay()) startHint(next); }, extra + CFG.hintAfter);\r\n      after(autoTimers, function () {\r\n        if (!canPlay()) return;\r\n        go(next);\r\n        schedule(travelling ? CFG.travel : 0);\r\n      }, extra + CFG.advanceAfter);\r\n    }\r\n    function manual() { manualUntil = Date.now() + CFG.manualPause; }\r\n\r\n    \/* ---------- buttons: press feedback + choose ---------- *\/\r\n    var suppressClick = false;\r\n    buttons.forEach(function (b, i) {\r\n      b.addEventListener('pointerdown', function (e) {\r\n        if (e.button !== 0) return;\r\n        b.classList.add('is-press');\r\n        manual(); clearAuto();\r\n      });\r\n      ['pointerup', 'pointercancel', 'pointerleave'].forEach(function (ev) {\r\n        b.addEventListener(ev, function () { b.classList.remove('is-press'); });\r\n      });\r\n      b.addEventListener('click', function (e) {\r\n        if (suppressClick) { e.preventDefault(); return; }\r\n        manual();\r\n        if (i === active) { if (!reduce()) pop(i, 'is-arrive', 450); }\r\n        else go(i);\r\n        schedule();\r\n      });\r\n    });\r\n\r\n    \/* arrow keys also move between stops (Tab \/ Shift+Tab reach every stop; Enter \/ Space choose) *\/\r\n    list.addEventListener('keydown', function (e) {\r\n      var k = e.key, cur = buttons.indexOf(document.activeElement), to = -1;\r\n      if (cur < 0) return;\r\n      if (k === 'ArrowRight' || k === 'ArrowDown') to = Math.min(last, cur + 1);\r\n      else if (k === 'ArrowLeft' || k === 'ArrowUp') to = Math.max(0, cur - 1);\r\n      else if (k === 'Home') to = 0;\r\n      else if (k === 'End') to = last;\r\n      if (to < 0) return;\r\n      e.preventDefault();\r\n      manual();\r\n      buttons[to].focus();\r\n      go(to);\r\n    });\r\n\r\n    \/* ---------- magnetic pull (mouse only; transform only, one rAF per frame) ---------- *\/\r\n    buttons.forEach(function (b, i) {\r\n      var rect = null, raf = 0, px = 0, py = 0;\r\n      function apply() {\r\n        raf = 0;\r\n        if (!rect) return;\r\n        var dx = Math.max(-1, Math.min(1, (px - (rect.left + rect.width \/ 2)) \/ (rect.width \/ 2)));\r\n        var dy = Math.max(-1, Math.min(1, (py - (rect.top + rect.height \/ 2)) \/ (rect.height \/ 2)));\r\n        nodes[i].style.setProperty('--mx', (dx * CFG.magnet).toFixed(2) + 'px');\r\n        nodes[i].style.setProperty('--my', (dy * CFG.magnet * 0.7).toFixed(2) + 'px');\r\n        names[i].style.setProperty('--lx', (dx * 1.5).toFixed(2) + 'px');\r\n        names[i].style.setProperty('--ly', (dy * 1).toFixed(2) + 'px');\r\n      }\r\n      b.addEventListener('pointerenter', function (e) {\r\n        if (e.pointerType !== 'mouse' || !mouse() || reduce() || mobile()) return;\r\n        rect = b.getBoundingClientRect();\r\n        b.classList.add('is-magnet');\r\n      });\r\n      b.addEventListener('pointermove', function (e) {\r\n        if (!rect) return;\r\n        px = e.clientX; py = e.clientY;\r\n        if (!raf) raf = requestAnimationFrame(apply);\r\n      });\r\n      b.addEventListener('pointerleave', function () {\r\n        rect = null;\r\n        if (raf) { cancelAnimationFrame(raf); raf = 0; }\r\n        b.classList.remove('is-magnet');                     \/\/ \u2192 eases back (0.45s)\r\n        nodes[i].style.removeProperty('--mx'); nodes[i].style.removeProperty('--my');\r\n        names[i].style.removeProperty('--lx'); names[i].style.removeProperty('--ly');\r\n      });\r\n    });\r\n\r\n    \/* ---------- drag to scrub along the line (mouse only; optional extra) ---------- *\/\r\n    (function () {\r\n      var down = false, startX = 0, scrub = -1, scrubbing = false;\r\n      function nearest(x) {\r\n        var best = 0, bd = Infinity, t = timeline.getBoundingClientRect();\r\n        for (var k = 0; k < n; k++) { var d = Math.abs(centre(k).x + t.left - x); if (d < bd) { bd = d; best = k; } }\r\n        return best;\r\n      }\r\n      function mark(k) { steps.forEach(function (s, j) { s.classList.toggle('is-scrub', j === k); }); }\r\n      list.addEventListener('pointerdown', function (e) {\r\n        if (e.pointerType !== 'mouse' || e.button !== 0 || mobile() || reduce()) return;\r\n        down = true; startX = e.clientX; scrubbing = false; scrub = -1;\r\n      });\r\n      list.addEventListener('pointermove', function (e) {\r\n        if (!down) return;\r\n        if (!scrubbing && Math.abs(e.clientX - startX) > 8) {\r\n          scrubbing = true;\r\n          timeline.classList.add('is-scrubbing');\r\n          try { list.setPointerCapture(e.pointerId); } catch (err) {}\r\n          buttons.forEach(function (b) { b.classList.remove('is-press'); });\r\n        }\r\n        if (scrubbing) { var k = nearest(e.clientX); if (k !== scrub) { scrub = k; mark(k); } }\r\n      });\r\n      function end() {\r\n        if (!down) return;\r\n        down = false;\r\n        timeline.classList.remove('is-scrubbing');\r\n        if (scrubbing) {\r\n          mark(-1);\r\n          suppressClick = true; setTimeout(function () { suppressClick = false; }, 0);\r\n          manual();\r\n          if (scrub > -1) { go(scrub); schedule(); }\r\n        }\r\n        scrubbing = false;\r\n      }\r\n      list.addEventListener('pointerup', end);\r\n      list.addEventListener('pointercancel', end);\r\n    })();\r\n\r\n    \/* ---------- pause while the visitor is engaged ---------- *\/\r\n    timeline.addEventListener('pointerenter', function (e) { if (e.pointerType === 'mouse') { hovering = true; clearAuto(); } });\r\n    timeline.addEventListener('pointerleave', function (e) { if (e.pointerType === 'mouse') { hovering = false; schedule(CFG.resumeDelay); } });\r\n    timeline.addEventListener('touchstart', function () { manual(); clearAuto(); }, { passive: true });\r\n    root.addEventListener('focusin', function (e) {\r\n      var kb = true;\r\n      try { kb = e.target.matches(':focus-visible'); } catch (err) {}\r\n      if (kb && list.contains(e.target)) { focusing = true; clearAuto(); }\r\n    });\r\n    root.addEventListener('focusout', function (e) {\r\n      if (!list.contains(e.relatedTarget)) { focusing = false; schedule(CFG.resumeDelay); }\r\n    });\r\n\r\n    \/* ---------- only while on screen ---------- *\/\r\n    if ('IntersectionObserver' in window) {\r\n      new IntersectionObserver(function (entries) {\r\n        var was = inView;\r\n        inView = entries[0].isIntersecting;\r\n        if (inView && !was) { redraw(); schedule(); }\r\n        if (!inView) clearAuto();\r\n      }, { threshold: 0.35 }).observe(timeline);\r\n    }\r\n    document.addEventListener('visibilitychange', function () {\r\n      if (document.visibilityState === 'hidden') clearAuto(); else schedule();\r\n    });\r\n\r\n    \/* ---------- layout changes ---------- *\/\r\n    var rT = 0;\r\n    window.addEventListener('resize', function () { clearTimeout(rT); rT = setTimeout(redraw, 120); });\r\n    if (window.ResizeObserver) new ResizeObserver(function () { redraw(); }).observe(timeline);\r\n    if (document.fonts && document.fonts.ready) document.fonts.ready.then(redraw);\r\n    bodies.forEach(function (bd) { if (bd) bd.addEventListener('transitionend', function (e) { if (e.target === bd) redraw(); }); });\r\n    function onMq() { clearAuto(); clearList(moveTimers); travelling = false; go(active, { force: true, instant: true }); schedule(); }\r\n    [mqReduce, mqMobile].forEach(function (m) {\r\n      if (!m) return;\r\n      if (m.addEventListener) m.addEventListener('change', onMq); else if (m.addListener) m.addListener(onMq);\r\n    });\r\n\r\n    \/* start: step 01 *\/\r\n    buttons.forEach(function (b) { b.setAttribute('tabindex', '0'); });\r\n    go(0, { force: true, instant: true });\r\n  }\r\n\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\r\n  else init();\r\n})();\r\n<\/script>\r\n  <!-- ================= 02b \u00b7 PROGRAMME INFO + SELECTION PROCESS \u2014 END ================= -->\r\n  <!-- ================= 05 \u00b7 IMPACT ================= -->\r\n<section id=\"impact\" class=\"yeng-about-page__section yeng-about-page__section--yellow yeng-about-page__impact\" aria-labelledby=\"yap-impact-title\" data-yap-impact>\r\n  <div class=\"yeng-about-page__inner\">\r\n\r\n    <div class=\"yeng-about-page__impact-head\">\r\n      <div>\r\n        <p class=\"yeng-about-page__label\" data-yap-reveal>\r\n          <span>[ IMPACT ]<\/span><span class=\"yeng-about-page__label-line\" aria-hidden=\"true\"><\/span>\r\n        <\/p>\r\n        <h2 class=\"yeng-about-page__h2\" id=\"yap-impact-title\" data-yap-reveal style=\"--yap-d:1\">\r\n          Two editions.<br>One growing generation.\r\n        <\/h2>\r\n      <\/div>\r\n      <p class=\"yeng-about-page__meta\" data-yap-reveal style=\"--yap-d:2\">YEnG #1 + YEnG #2<\/p>\r\n    <\/div>\r\n\r\n    <ul class=\"yeng-about-page__stats\" data-yeng-impact-list>\r\n      <li class=\"yeng-about-page__stat yeng-about-page__stat--xl\">\r\n        <button type=\"button\" class=\"yeng-about-page__stat-btn\" aria-expanded=\"false\" aria-controls=\"yap-stat-ctx-1\">\r\n          <span class=\"yeng-about-page__stat-num yeng-impact-count\" data-count=\"400\" data-suffix=\"+\">400+<\/span>\r\n          <span class=\"yeng-about-page__stat-rule-row\" aria-hidden=\"true\">\r\n            <span class=\"yeng-about-page__stat-rule\"><\/span>\r\n          <\/span>\r\n          <span class=\"yeng-about-page__stat-label\">Applicants<\/span>\r\n        <\/button>\r\n        <p class=\"yeng-about-page__stat-ctx\" id=\"yap-stat-ctx-1\">Applications received across the first two editions.<\/p>\r\n      <\/li>\r\n      <li class=\"yeng-about-page__stat yeng-about-page__stat--xl\">\r\n        <button type=\"button\" class=\"yeng-about-page__stat-btn\" aria-expanded=\"false\" aria-controls=\"yap-stat-ctx-2\">\r\n          <span class=\"yeng-about-page__stat-num yeng-impact-count\" data-count=\"140\" data-suffix=\"\">140<\/span>\r\n          <span class=\"yeng-about-page__stat-rule-row\" aria-hidden=\"true\">\r\n            <span class=\"yeng-about-page__stat-rule\"><\/span>\r\n          <\/span>\r\n          <span class=\"yeng-about-page__stat-label\">Participants selected through interviews<\/span>\r\n        <\/button>\r\n        <p class=\"yeng-about-page__stat-ctx\" id=\"yap-stat-ctx-2\">Participants selected through interviews.<\/p>\r\n      <\/li>\r\n      <li class=\"yeng-about-page__stat\">\r\n        <button type=\"button\" class=\"yeng-about-page__stat-btn\" aria-expanded=\"false\" aria-controls=\"yap-stat-ctx-3\">\r\n          <span class=\"yeng-about-page__stat-num yeng-impact-count\" data-count=\"30\" data-suffix=\"+\">30+<\/span>\r\n          <span class=\"yeng-about-page__stat-rule-row\" aria-hidden=\"true\">\r\n            <span class=\"yeng-about-page__stat-rule\"><\/span>\r\n          <\/span>\r\n          <span class=\"yeng-about-page__stat-label\">High schools represented<\/span>\r\n        <\/button>\r\n        <p class=\"yeng-about-page__stat-ctx\" id=\"yap-stat-ctx-3\">High schools represented.<\/p>\r\n      <\/li>\r\n      <li class=\"yeng-about-page__stat\">\r\n        <button type=\"button\" class=\"yeng-about-page__stat-btn\" aria-expanded=\"false\" aria-controls=\"yap-stat-ctx-4\">\r\n          <span class=\"yeng-about-page__stat-num yeng-impact-count\" data-count=\"25\" data-suffix=\"\">25<\/span>\r\n          <span class=\"yeng-about-page__stat-rule-row\" aria-hidden=\"true\">\r\n            <span class=\"yeng-about-page__stat-rule\"><\/span>\r\n          <\/span>\r\n          <span class=\"yeng-about-page__stat-label\">Business ideas developed<\/span>\r\n        <\/button>\r\n        <p class=\"yeng-about-page__stat-ctx\" id=\"yap-stat-ctx-4\">Business ideas developed through the program.<\/p>\r\n      <\/li>\r\n      <li class=\"yeng-about-page__stat\">\r\n        <button type=\"button\" class=\"yeng-about-page__stat-btn\" aria-expanded=\"false\" aria-controls=\"yap-stat-ctx-5\">\r\n          <span class=\"yeng-about-page__stat-num yeng-impact-count\" data-count=\"90\" data-suffix=\"%\">90%<\/span>\r\n          <span class=\"yeng-about-page__stat-rule-row\" aria-hidden=\"true\">\r\n            <span class=\"yeng-about-page__stat-rule\"><\/span>\r\n          <\/span>\r\n          <span class=\"yeng-about-page__stat-label\">Graduation rate<\/span>\r\n        <\/button>\r\n        <p class=\"yeng-about-page__stat-ctx\" id=\"yap-stat-ctx-5\">Graduation rate across the first two editions.<\/p>\r\n      <\/li>\r\n    <\/ul>\r\n\r\n  <\/div>\r\n<\/section>\r\n<!-- ================= 07 \u00b7 COMMUNITY (interactive \u2014 living field of thoughts) ================= -->\r\n<section class=\"yeng-community\" aria-labelledby=\"yeng-community-title\" data-yeng-community>\r\n  <div class=\"yeng-community-inner\">\r\n\r\n    <div class=\"yeng-community-head\">\r\n      <p class=\"yeng-community-label\"><span>[ COMMUNITY ]<\/span><span class=\"yeng-community-label-line\" aria-hidden=\"true\"><\/span><\/p>\r\n      <h2 class=\"yeng-community-title\" id=\"yeng-community-title\">More than a course<span class=\"yeng-community-dot\">.<\/span><\/h2>\r\n      <p class=\"yeng-community-lead\">YEnG is also what stays after the session ends.<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"yeng-community-stage\">\r\n\r\n      <!-- The four phrases (edit them here). The script keeps spawning them across the field;\r\n           this list stays readable for screen readers and shows as a plain list if JavaScript is off. -->\r\n      <ul class=\"yeng-community-source\" data-yeng-community-source>\r\n        <li>People you meet.<\/li>\r\n        <li>Ideas you discover.<\/li>\r\n        <li>Teams you would never have formed otherwise.<\/li>\r\n        <li>The confidence to try something before you feel completely ready.<\/li>\r\n      <\/ul>\r\n\r\n      <!-- The field of thoughts: filled by the script -->\r\n      <div class=\"yeng-community-field\" data-yeng-community-field>\r\n        <div class=\"yeng-community-cloud\" aria-hidden=\"true\" data-yeng-community-cloud><\/div>\r\n        <button type=\"button\" class=\"yeng-community-end\" data-yeng-community-end>\r\n          <span class=\"yeng-community-end-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-community-end-t\">End the noise.<\/span><span class=\"yeng-community-end-b\" aria-hidden=\"true\">]<\/span>\r\n        <\/button>\r\n      <\/div>\r\n\r\n      <!-- Revealed after \"End the noise.\" -->\r\n      <div class=\"yeng-community-try\" data-yeng-community-try hidden>\r\n        <a class=\"yeng-community-try-link\" href=\"https:\/\/forms.gle\/jQznCm9Zb4ZNC6vQ9\" target=\"_blank\" rel=\"noopener\">\r\n          <span class=\"yeng-community-try-word\">Try it<\/span><span class=\"yeng-community-try-dot\" aria-hidden=\"true\">.<\/span><span class=\"yeng-community-sr\"> Apply to YEnG (opens in a new tab)<\/span>\r\n        <\/a>\r\n      <\/div>\r\n\r\n      <!-- Small reset, bottom right -->\r\n      <button type=\"button\" class=\"yeng-community-reset\" data-yeng-community-reset aria-label=\"Reset the field of thoughts\">\r\n        <span class=\"yeng-community-reset-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-community-reset-t\">Reset<\/span><span class=\"yeng-community-reset-b\" aria-hidden=\"true\">]<\/span>\r\n      <\/button>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\n\/* YEnG \u00b7 Community v4: a living field of thoughts \u2192 \"End the noise.\" \u2192 \"Try it.\" \u00b7 [ Reset ] starts again (vanilla JS)\r\n   Reduced motion (an OS preference) \u2260 missing browser features:\r\n   - prefers-reduced-motion: phrases still type and drift, but shorter, calmer and without the pull toward the button.\r\n   - missing requestAnimationFrame \/ IntersectionObserver \/ matchMedia: safe fallbacks, same behaviour. *\/\r\n(function () {\r\n  var CFG = {\r\n    countDesktop: 38,   \/\/ phrases on screen at the same time (desktop)\r\n    countMobile: 16,    \/\/ \u2026 on phones\r\n    typeSpeed: 22,      \/\/ ms per typed character\r\n    fillEvery: 90,      \/\/ ms between new phrases while the field is filling up\r\n    spawnEvery: 240,    \/\/ ms between new phrases once it is full (replacing the ones that fade out)\r\n    lifeMin: 6000,      \/\/ how long a phrase stays after it has appeared (ms) \u2026\r\n    lifeMax: 12000,     \/\/ \u2026 picked randomly between these two\r\n    driftMin: 30,       \/\/ how far a phrase moves during its life (px) \u2026\r\n    driftMax: 120,\r\n    typedShare: 0.65,   \/\/ share of phrases that type in; the rest fade in out of thin air\r\n    gap: 10,            \/\/ minimum space between two phrases (px), including where they drift to\r\n    clearTime: 560,     \/\/ ms for the field to clear (keep in sync with --yc-clear in the CSS)\r\n\r\n    \/* Reduced-motion settings (OS \"reduce animations\"): visible but restrained *\/\r\n    reduceDrift: 0.4,       \/\/ share of the normal drift distance (\u2248 12\u201348px over 7\u201313s)\r\n    reduceTypeSpeed: 30,    \/\/ calmer typing\r\n    reduceTypedShare: 0.5   \/\/ half type in, half fade in\r\n  };\r\n  \/* size: [chance, min width, max width] \u2014 widths are shares of the field width *\/\r\n  var SIZES_DESKTOP = { xs: [0.46, 0.16, 0.30], s: [0.30, 0.2, 0.34], m: [0.16, 0.26, 0.42], l: [0.08, 0.3, 0.46] };\r\n  var SIZES_MOBILE  = { xs: [0.45, 0.36, 0.6],  s: [0.35, 0.44, 0.7], m: [0.15, 0.55, 0.85], l: [0.05, 0.65, 0.95] };\r\n\r\n  function rand(a, b) { return a + Math.random() * (b - a); }\r\n\r\n  \/* Feature fallbacks (a browser without these is NOT a reduced-motion request) *\/\r\n  var nextFrame = window.requestAnimationFrame\r\n    ? function (fn) { return window.requestAnimationFrame(fn); }\r\n    : function (fn) { return setTimeout(fn, 16); };\r\n  function media(q) { return window.matchMedia ? window.matchMedia(q) : null; }\r\n  function onMediaChange(mq, fn) {\r\n    if (!mq) return;\r\n    if (mq.addEventListener) mq.addEventListener('change', fn);\r\n    else if (mq.addListener) mq.addListener(fn);\r\n  }\r\n\r\n  function init() {\r\n    var section = document.querySelector('[data-yeng-community]');\r\n    if (!section || section.getAttribute('data-yeng-community-ready') === '1') return;\r\n    section.setAttribute('data-yeng-community-ready', '1');\r\n\r\n    var source   = section.querySelector('[data-yeng-community-source]');\r\n    var field    = section.querySelector('[data-yeng-community-field]');\r\n    var cloud    = section.querySelector('[data-yeng-community-cloud]');\r\n    var endBtn   = section.querySelector('[data-yeng-community-end]');\r\n    var resetBtn = section.querySelector('[data-yeng-community-reset]');\r\n    var tryWrap  = section.querySelector('[data-yeng-community-try]');\r\n    var tryLink  = tryWrap ? tryWrap.querySelector('a') : null;\r\n    if (!source || !field || !cloud || !endBtn || !tryWrap) return;\r\n\r\n    var phrases = Array.prototype.map.call(source.querySelectorAll('li'), function (li) {\r\n      return li.textContent.replace(\/\\s+\/g, ' ').trim();\r\n    });\r\n    if (!phrases.length) return;\r\n\r\n    var mqMobile = media('(max-width: 767px)');\r\n    var mqReduce = media('(prefers-reduced-motion: reduce)');\r\n    var reduce = !!(mqReduce && mqReduce.matches);\r\n    onMediaChange(mqReduce, function () {\r\n      reduce = !!mqReduce.matches;\r\n      section.classList.toggle('is-calm', reduce);\r\n    });\r\n    section.classList.toggle('is-calm', reduce);\r\n\r\n    var timers = [], bits = [];\r\n    var running = true, cleared = false, inView = false, ticking = false, lastPhrase = -1;\r\n\r\n    section.classList.add('is-armed');\r\n\r\n    function later(fn, ms) { var id = setTimeout(fn, ms); timers.push(id); return id; }\r\n    function stopAll() { timers.forEach(clearTimeout); timers = []; ticking = false; }\r\n    function isMobile() { return !!(mqMobile && mqMobile.matches); }\r\n\r\n    \/* Areas no phrase may use: the two buttons *\/\r\n    function blocked() {\r\n      var f = field.getBoundingClientRect(), out = [];\r\n      [endBtn, resetBtn].forEach(function (el, i) {\r\n        if (!el) return;\r\n        var r = el.getBoundingClientRect(), m = i === 0 ? 28 : 12;\r\n        out.push({ x1: r.left - f.left - m, y1: r.top - f.top - m, x2: r.right - f.left + m, y2: r.bottom - f.top + m });\r\n      });\r\n      return out;\r\n    }\r\n    function hits(a, b) { return a.x1 < b.x2 && b.x1 < a.x2 && a.y1 < b.y2 && b.y1 < a.y2; }\r\n\r\n    function pickSize(table) {\r\n      var large = bits.filter(function (b) { return b.size === 'l'; }).length;\r\n      var r = Math.random(), acc = 0, keys = Object.keys(table);\r\n      for (var i = 0; i < keys.length; i++) {\r\n        acc += table[keys[i]][0];\r\n        if (r <= acc) return (keys[i] === 'l' && large >= 4) ? 's' : keys[i];\r\n      }\r\n      return 'xs';\r\n    }\r\n    function pickPhrase() {\r\n      var i;\r\n      do { i = Math.floor(Math.random() * phrases.length); } while (phrases.length > 1 && i === lastPhrase);\r\n      lastPhrase = i;\r\n      return phrases[i];\r\n    }\r\n\r\n    \/* One phrase: outer element drifts, inner element types \/ fades; words never break inside *\/\r\n    function makeBit(text, size) {\r\n      var big = size === 'm' || size === 'l';\r\n      var tone = big ? (Math.random() < 0.7 ? 1 : 2) : (Math.random() < 0.55 ? 3 : 2);\r\n      var black = Math.random() < (big ? 0.6 : 0.22);\r\n      var el = document.createElement('span');\r\n      el.className = 'yeng-community-bit yeng-community-bit--' + size + ' yeng-community-bit--t' + tone + (black ? ' yeng-community-bit--black' : '');\r\n      var inner = document.createElement('span');\r\n      inner.className = 'yeng-community-bit-inner';\r\n      el.appendChild(inner);\r\n      var chars = [];\r\n      text.split(' ').forEach(function (word, w, words) {\r\n        var wordEl = document.createElement('span');\r\n        wordEl.className = 'yeng-community-word';\r\n        for (var i = 0; i < word.length; i++) {\r\n          var c = document.createElement('span');\r\n          c.className = 'yeng-community-char';\r\n          c.textContent = word.charAt(i);\r\n          wordEl.appendChild(c);\r\n          chars.push(c);\r\n        }\r\n        inner.appendChild(wordEl);\r\n        if (w < words.length - 1) inner.appendChild(document.createTextNode(' '));\r\n      });\r\n      return { el: el, inner: inner, chars: chars, size: size, box: null };\r\n    }\r\n\r\n    function removeBit(b) {\r\n      var i = bits.indexOf(b);\r\n      if (i > -1) bits.splice(i, 1);\r\n      if (b.el.parentNode) b.el.parentNode.removeChild(b.el);\r\n    }\r\n\r\n    function typeIn(b) {\r\n      var speed = reduce ? CFG.reduceTypeSpeed : CFG.typeSpeed;\r\n      var caret = document.createElement('span');\r\n      caret.className = 'yeng-community-caret';\r\n      caret.setAttribute('aria-hidden', 'true');\r\n      b.chars.forEach(function (c, i) {\r\n        later(function () {\r\n          c.classList.add('is-on');\r\n          c.parentNode.insertBefore(caret, c.nextSibling);\r\n        }, i * speed);\r\n      });\r\n      later(function () { if (caret.parentNode) caret.parentNode.removeChild(caret); }, b.chars.length * speed + 450);\r\n      return b.chars.length * speed;\r\n    }\r\n\r\n    function spawn() {\r\n      var W = field.clientWidth, H = field.clientHeight;\r\n      if (W < 100 || H < 100) return;\r\n      var table = isMobile() ? SIZES_MOBILE : SIZES_DESKTOP;\r\n      var size = pickSize(table);\r\n      var b = makeBit(pickPhrase(), size);\r\n      b.el.style.maxWidth = Math.round(W * rand(table[size][1], table[size][2])) + 'px';\r\n      b.el.style.left = '0px';\r\n      b.el.style.top = '0px';\r\n      cloud.appendChild(b.el);\r\n      var bw = b.el.offsetWidth, bh = b.el.offsetHeight;\r\n\r\n      \/* drift: full on normal settings, shorter and calmer with reduced motion *\/\r\n      var dist = rand(CFG.driftMin, CFG.driftMax) * (reduce ? CFG.reduceDrift : 1) * (isMobile() ? 0.8 : 1);\r\n      var ang = rand(0, Math.PI * 2);\r\n      var dx = Math.cos(ang) * dist, dy = Math.sin(ang) * dist * 0.6;\r\n      var pad = 8, zones = blocked(), placed = null;\r\n\r\n      for (var t = 0; t < 60 && !placed; t++) {\r\n        var xMin = pad - Math.min(0, dx), xMax = W - pad - bw - Math.max(0, dx);\r\n        \/* mix of free positions and positions hugging the left \/ right edge \u2014 packs the field tighter *\/\r\n        var roll = Math.random();\r\n        var x = roll < 0.2 ? xMin : roll < 0.4 ? xMax : rand(xMin, xMax);\r\n        var y = rand(pad - Math.min(0, dy), H - pad - bh - Math.max(0, dy));\r\n        if (x < 0 || y < 0) continue;\r\n        \/* the whole path of the phrase (start \u2192 end of its drift) must stay free *\/\r\n        var box = {\r\n          x1: x + Math.min(0, dx) - CFG.gap, y1: y + Math.min(0, dy) - CFG.gap,\r\n          x2: x + bw + Math.max(0, dx) + CFG.gap, y2: y + bh + Math.max(0, dy) + CFG.gap\r\n        };\r\n        var free = !zones.some(function (z) { return hits(box, z); }) &&\r\n                   !bits.some(function (o) { return o.box && hits(box, o.box); });\r\n        if (free) placed = { x: x, y: y, box: box };\r\n      }\r\n      if (!placed) { cloud.removeChild(b.el); return; }\r\n\r\n      b.el.style.left = Math.round(placed.x) + 'px';\r\n      b.el.style.top = Math.round(placed.y) + 'px';\r\n      b.box = placed.box;\r\n      bits.push(b);\r\n\r\n      var typed = Math.random() < (reduce ? CFG.reduceTypedShare : CFG.typedShare);\r\n      var appear = 900;\r\n      if (typed) appear = typeIn(b);\r\n      else {\r\n        b.chars.forEach(function (c) { c.classList.add('is-on'); });\r\n        b.el.classList.add('is-ghost');                           \/\/ fades in out of thin air\r\n      }\r\n      var life = rand(CFG.lifeMin, CFG.lifeMax);\r\n      var total = Math.round(appear + life + 800);\r\n\r\n      \/* The drift duration is set twice: inline (normal) and as a variable the reduced-motion CSS uses,\r\n         because the page-wide reduced-motion rule would otherwise shorten every transition to 1ms. *\/\r\n      b.el.style.setProperty('--yc-drift-ms', total + 'ms');\r\n      nextFrame(function () {\r\n        nextFrame(function () {\r\n          if (!b.el.parentNode) return;                           \/\/ cleared in the meantime\r\n          b.el.classList.remove('is-ghost');\r\n          b.el.style.transitionDuration = total + 'ms';\r\n          b.el.style.transform = 'translate(' + dx.toFixed(1) + 'px,' + dy.toFixed(1) + 'px)';\r\n        });\r\n      });\r\n      later(function () {\r\n        b.el.classList.add('is-leaving');\r\n        later(function () { removeBit(b); }, 800);\r\n      }, appear + life);\r\n    }\r\n\r\n    function tick() {\r\n      if (!running || !inView) { ticking = false; return; }\r\n      ticking = true;\r\n      var target = isMobile() ? CFG.countMobile : CFG.countDesktop;\r\n      if (bits.length < target) spawn();\r\n      later(tick, bits.length < target * 0.7 ? CFG.fillEvery : CFG.spawnEvery);\r\n    }\r\n    function kick() { if (running && inView && !ticking) tick(); }\r\n\r\n    function clearBits() { bits.slice().forEach(removeBit); bits = []; }\r\n\r\n    \/* End the noise: stop everything, clear the field, show \"Try it.\" *\/\r\n    function endNoise() {\r\n      if (cleared) return;\r\n      cleared = true;\r\n      running = false;\r\n      stopAll();\r\n      Array.prototype.forEach.call(field.querySelectorAll('.yeng-community-caret'), function (c) { c.parentNode.removeChild(c); });\r\n\r\n      var f = endBtn.getBoundingClientRect();\r\n      var cx = f.left + f.width \/ 2, cy = f.top + f.height \/ 2;\r\n      bits.forEach(function (b) {\r\n        var r = b.el.getBoundingClientRect(), k = reduce ? 0 : 0.18;\r\n        b.inner.style.setProperty('--yc-dx', ((cx - (r.left + r.width \/ 2)) * k).toFixed(1) + 'px');\r\n        b.inner.style.setProperty('--yc-dy', ((cy - (r.top + r.height \/ 2)) * k).toFixed(1) + 'px');\r\n      });\r\n      section.classList.add('is-clearing');\r\n      endBtn.disabled = true;\r\n      endBtn.setAttribute('aria-hidden', 'true');\r\n\r\n      later(function () {\r\n        clearBits();\r\n        tryWrap.hidden = false;\r\n        tryWrap.getBoundingClientRect();                          \/\/ commit before animating in\r\n        section.classList.add('is-done');\r\n        if (tryLink) tryLink.focus({ preventScroll: true });\r\n      }, CFG.clearTime);\r\n    }\r\n\r\n    \/* Reset: back to a fresh, filling field (all timers from the previous run are cancelled first) *\/\r\n    function reset(fromKeyboard) {\r\n      stopAll();\r\n      clearBits();\r\n      cleared = false;\r\n      running = true;\r\n      section.classList.remove('is-clearing', 'is-done');\r\n      tryWrap.hidden = true;\r\n      endBtn.disabled = false;\r\n      endBtn.removeAttribute('aria-hidden');\r\n      if (fromKeyboard) endBtn.focus({ preventScroll: true });\r\n      kick();\r\n    }\r\n\r\n    endBtn.addEventListener('click', endNoise);\r\n    if (resetBtn) resetBtn.addEventListener('click', function (e) { reset(e.detail === 0); });\r\n\r\n    \/* Only spawn while the field is on screen *\/\r\n    if ('IntersectionObserver' in window) {\r\n      new IntersectionObserver(function (entries) {\r\n        inView = entries[0].isIntersecting;\r\n        kick();\r\n      }, { threshold: 0.05 }).observe(field);\r\n    } else {\r\n      inView = true;\r\n      kick();\r\n    }\r\n\r\n    \/* Width changed (rotation \/ resize): start the field again so nothing overlaps *\/\r\n    var lastW = field.clientWidth, resizeT = null;\r\n    window.addEventListener('resize', function () {\r\n      clearTimeout(resizeT);\r\n      resizeT = setTimeout(function () {\r\n        if (field.clientWidth === lastW) return;\r\n        lastW = field.clientWidth;\r\n        if (cleared) return;\r\n        stopAll();\r\n        clearBits();\r\n        kick();\r\n      }, 250);\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\r\n  else init();\r\n})();\r\n<\/script>\r\n\r\n<!-- ================= 07b \u00b7 GALLERY (scroll-driven, horizontal) ================= -->\r\n<section class=\"yeng-gallery\" aria-labelledby=\"yeng-gallery-title\" data-yeng-gallery>\r\n  <div class=\"yeng-gallery-track\" data-yeng-gallery-track>\r\n    <div class=\"yeng-gallery-pin\" data-yeng-gallery-pin>\r\n\r\n      <!-- Small editorial heading \u2014 stays visible with the photos while the band is pinned -->\r\n      <h3 class=\"yeng-gallery-label\" id=\"yeng-gallery-title\"><span class=\"yeng-gallery-label-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-gallery-label-t\">Community gallery<\/span><span class=\"yeng-gallery-label-b\" aria-hidden=\"true\">]<\/span><span class=\"yeng-gallery-label-line\" aria-hidden=\"true\"><\/span><\/h3>\r\n\r\n      <div class=\"yeng-gallery-viewport\" tabindex=\"0\" aria-label=\"YEnG photos. Scroll sideways to see more.\" data-yeng-gallery-viewport>\r\n        <ul class=\"yeng-gallery-row\" data-yeng-gallery-row>\r\n          <!-- =====================================================================\r\n               PHOTO LIST \u2014 one line per photo. Replace each src with a real YEnG\r\n               photo URL (Media Library \u2192 select photo \u2192 Copy URL) and update the alt text.\r\n               Add or delete lines freely; everything else adapts automatically.\r\n               ===================================================================== -->\r\n          <li class=\"yeng-gallery-item\"><img fetchpriority=\"high\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"YEnG students presenting their business idea\" width=\"1200\" height=\"900\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 02 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 03 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 04 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 05 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 06 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 07 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <li class=\"yeng-gallery-item\"><img loading=\"lazy\" class=\"yeng-gallery-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Prezentare-YEnG-2026-3.jpg\" alt=\"PHOTO 08 \u2014 replace src and describe the photo\" width=\"1200\" height=\"900\" loading=\"lazy\" decoding=\"async\"><\/li>\r\n          <!-- ===================== END OF PHOTO LIST ===================== -->\r\n        <\/ul>\r\n      <\/div>\r\n\r\n      <div class=\"yeng-gallery-foot\">\r\n        <div class=\"yeng-gallery-progress\" aria-hidden=\"true\"><span class=\"yeng-gallery-progress-bar\" data-yeng-gallery-bar><\/span><\/div>\r\n        <div class=\"yeng-gallery-meta\">\r\n          <p class=\"yeng-gallery-count\" data-yeng-gallery-count><\/p>\r\n          <div class=\"yeng-gallery-controls\" data-yeng-gallery-controls>\r\n            <button type=\"button\" class=\"yeng-gallery-btn\" data-yeng-gallery-prev aria-label=\"Previous photos\"><span class=\"yeng-gallery-btn-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-gallery-btn-t\">Prev<\/span><span class=\"yeng-gallery-btn-b\" aria-hidden=\"true\">]<\/span><\/button>\r\n            <button type=\"button\" class=\"yeng-gallery-btn\" data-yeng-gallery-next aria-label=\"Next photos\"><span class=\"yeng-gallery-btn-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-gallery-btn-t\">Next<\/span><span class=\"yeng-gallery-btn-b\" aria-hidden=\"true\">]<\/span><\/button>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\n\/* YEnG \u00b7 Gallery: vertical scroll drives a horizontal photo row, with gentle autoplay and directional lean (vanilla JS).\r\n   Modes:\r\n   - pinned : the band sticks under the header while the page scrolls; scroll position moves the row.\r\n   - simple : native sideways scrolling + Prev\/Next (short screens, Elementor editor, no sticky support).\r\n   - no JS  : the CSS alone gives a native sideways-scrolling strip, so every photo stays reachable. *\/\r\n(function () {\r\n  var CFG = {\r\n    scrollRatio: 1,       \/\/ px of vertical scroll per px of horizontal travel\r\n    autoplayDelay: 1400,  \/\/ ms of no scrolling before autoplay starts\r\n    autoplaySpeed: 38,    \/\/ px per second\r\n    autoplayRamp: 700,    \/\/ ms to ease autoplay in (no jump)\r\n    leanMax: 1.8,         \/\/ max lean in degrees when scrolling\r\n    leanAuto: 0.6,        \/\/ lean in degrees during autoplay (gentler)\r\n    leanGain: 1.6,        \/\/ how strongly speed turns into lean\r\n    minPinSpace: 24       \/\/ px of room needed around the band to pin it; otherwise simple mode\r\n  };\r\n\r\n  function clamp(v, a, b) { return v < a ? a : v > b ? b : v; }\r\n\r\n  function init() {\r\n    var root = document.querySelector('[data-yeng-gallery]');\r\n    if (!root || root.getAttribute('data-yeng-gallery-ready') === '1') return;\r\n    root.setAttribute('data-yeng-gallery-ready', '1');\r\n\r\n    var track    = root.querySelector('[data-yeng-gallery-track]');\r\n    var pin      = root.querySelector('[data-yeng-gallery-pin]');\r\n    var viewport = root.querySelector('[data-yeng-gallery-viewport]');\r\n    var row      = root.querySelector('[data-yeng-gallery-row]');\r\n    var bar      = root.querySelector('[data-yeng-gallery-bar]');\r\n    var countEl  = root.querySelector('[data-yeng-gallery-count]');\r\n    var prevBtn  = root.querySelector('[data-yeng-gallery-prev]');\r\n    var nextBtn  = root.querySelector('[data-yeng-gallery-next]');\r\n    var items    = Array.prototype.slice.call(root.querySelectorAll('.yeng-gallery-item'));\r\n    var imgs     = Array.prototype.slice.call(root.querySelectorAll('.yeng-gallery-img'));\r\n    if (!track || !pin || !viewport || !row || !items.length) return;\r\n\r\n    var reduce   = !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);\r\n    var inEditor = document.body && document.body.classList.contains('elementor-editor-active');\r\n    var canSticky = !!(window.CSS && CSS.supports && (CSS.supports('position', 'sticky') || CSS.supports('position', '-webkit-sticky')));\r\n    var n = items.length;\r\n\r\n    root.classList.add('is-js');\r\n\r\n    \/* ---------- state ---------- *\/\r\n    var mode = 'simple';\r\n    var M = 0;            \/\/ max horizontal travel (px)\r\n    var R = 0;            \/\/ current vertical runway (px) \u2014 can shrink while autoplay runs ahead\r\n    var baseR = 0;        \/\/ original runway\r\n    var panelH = 0, top = 0, step = 1;\r\n    var pos = 0;          \/\/ where the row should be (px)\r\n    var shown = 0;        \/\/ where the row is drawn (eases toward pos)\r\n    var lean = 0;\r\n    var anchorU = 0, anchorP = 0;   \/\/ scroll \u2194 position anchor (keeps manual + autoplay in sync)\r\n    var lastU = -1, lastScrollY = window.pageYOffset, lastUser = 0;\r\n    var autoV = 0, autoplaying = false;\r\n    var inView = false, running = false, lastT = 0, jsPin = false, lastCount = '';\r\n\r\n    \/* ---------- heading colour ----------\r\n       The heading uses the site's dark blue. If the band sits on a dark background\r\n       (dark blue text would be invisible there), it switches to white automatically. *\/\r\n    function backgroundIsDark() {\r\n      var el = root;\r\n      while (el && el.nodeType === 1) {\r\n        var m = getComputedStyle(el).backgroundColor.match(\/[\\d.]+\/g);\r\n        if (m && (m.length < 4 || parseFloat(m[3]) > 0.5)) {\r\n          return (0.2126 * m[0] + 0.7152 * m[1] + 0.0722 * m[2]) < 128;\r\n        }\r\n        el = el.parentElement;\r\n      }\r\n      return false;\r\n    }\r\n\r\n    \/* ---------- measuring ---------- *\/\r\n    function headerOffset() {\r\n      var probe = document.createElement('div');\r\n      probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;height:var(--yeng-scroll-offset,0px);';\r\n      document.body.appendChild(probe);\r\n      var h = probe.offsetHeight;\r\n      document.body.removeChild(probe);\r\n      return h || 0;\r\n    }\r\n\r\n    function measure() {\r\n      root.classList.toggle('is-on-dark', backgroundIsDark());\r\n      root.classList.remove('is-pinned', 'is-simple', 'is-jspin');\r\n      jsPin = false;\r\n      pin.style.transform = '';\r\n      track.style.height = '';\r\n      row.style.transform = '';\r\n\r\n      root.classList.add('is-pinned');                           \/\/ measure in the pinned layout\r\n      panelH = pin.offsetHeight;\r\n      M = Math.max(0, row.scrollWidth - viewport.clientWidth);\r\n      step = n > 1 ? (items[1].offsetLeft - items[0].offsetLeft) : items[0].offsetWidth;\r\n      var off = headerOffset(), vh = window.innerHeight;\r\n      var fits = vh - off >= panelH + CFG.minPinSpace;\r\n\r\n      if (!canSticky || !fits || M < 2 || inEditor) {\r\n        root.classList.remove('is-pinned');\r\n        root.classList.add('is-simple');\r\n        mode = 'simple';\r\n        viewport.setAttribute('tabindex', '0');\r\n        M = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\r\n        pos = shown = viewport.scrollLeft;\r\n        return;\r\n      }\r\n\r\n      mode = 'pinned';\r\n      viewport.removeAttribute('tabindex');\r\n      top = Math.round(off + Math.max(0, (vh - off - panelH) \/ 2)); \/\/ centred in the space under the header\r\n      root.style.setProperty('--yg-top', top + 'px');\r\n      baseR = R = Math.round(M * CFG.scrollRatio);\r\n      track.style.height = (panelH + R) + 'px';\r\n      anchorU = 0; anchorP = 0; lastU = -1;\r\n      readScroll(false);\r\n      shown = pos;\r\n    }\r\n\r\n    \/* ---------- scroll \u2194 position mapping ----------\r\n       u = how far the page has scrolled into the runway (0\u2026R).\r\n       The map passes through (0,0), the anchor (anchorU, anchorP) and (R, M), so:\r\n       - it never jumps: the row is always exactly where it was when the visitor takes over;\r\n       - scrolling down only covers the photos that are still ahead;\r\n       - scrolling up leads back through all photos to the first one. *\/\r\n    function mapU(u) {\r\n      if (u >= anchorU) {\r\n        var span = R - anchorU;\r\n        return span <= 0 ? anchorP : anchorP + (u - anchorU) * (M - anchorP) \/ span;\r\n      }\r\n      return anchorU > 0 ? u * anchorP \/ anchorU : anchorP;\r\n    }\r\n    function unmapP(p) {\r\n      if (p >= anchorP) {\r\n        var span = M - anchorP;\r\n        return span <= 0 ? R : anchorU + (p - anchorP) * (R - anchorU) \/ span;\r\n      }\r\n      return anchorP > 0 ? p * anchorU \/ anchorP : 0;\r\n    }\r\n    function trackTop() { return track.getBoundingClientRect().top; }\r\n    function uNow(rTop) { return clamp(top - rTop, 0, R); }\r\n\r\n    function readScroll(fromUser) {\r\n      var rTop = trackTop(), u = uNow(rTop);\r\n      if (fromUser) { lastUser = performance.now(); autoV = 0; }\r\n      if (lastU < 0 || Math.abs(u - lastU) > 0.25) {\r\n        lastU = u;\r\n        pos = clamp(mapU(u), 0, M);\r\n      }\r\n      placePin(rTop);\r\n      if (rTop > window.innerHeight && (R !== baseR || anchorP !== 0)) {\r\n        \/* the whole gallery is below the screen again: quietly return to the start *\/\r\n        R = baseR; track.style.height = (panelH + R) + 'px';\r\n        anchorU = 0; anchorP = 0; pos = shown = 0; lastU = -1;\r\n      }\r\n    }\r\n\r\n    \/* Sticky safety net: if a theme wrapper breaks position:sticky, pin with a transform instead *\/\r\n    function placePin(rTop) {\r\n      if (mode !== 'pinned') return;\r\n      var shift = clamp(top - rTop, 0, R);\r\n      if (!jsPin && shift > 4 && shift < R - 4) {\r\n        var pinTop = pin.getBoundingClientRect().top;\r\n        if (Math.abs(pinTop - top) > 3) { jsPin = true; root.classList.add('is-jspin'); }\r\n      }\r\n      if (jsPin) pin.style.transform = 'translate3d(0,' + shift + 'px,0)';\r\n    }\r\n\r\n    \/* While autoplay runs ahead, shorten the remaining runway so that, once the last photo is\r\n       visible, the page continues to Team straight away. Only done while the content below the\r\n       gallery is off-screen, so nothing visibly moves. *\/\r\n    function shrinkRunway(rTop, u) {\r\n      var vh = window.innerHeight;\r\n      if (rTop + panelH + R < vh) return;                         \/\/ content below already visible: leave it\r\n      var want = u + (M - pos) * CFG.scrollRatio;\r\n      var keepBelowFold = Math.ceil(vh - rTop - panelH) + 2;\r\n      var next = Math.min(R, Math.max(want, keepBelowFold, u));\r\n      if (R - next >= 1) {\r\n        R = Math.round(next);\r\n        track.style.height = (panelH + R) + 'px';\r\n      }\r\n    }\r\n\r\n    \/* ---------- frame loop ---------- *\/\r\n    function frame(t) {\r\n      var dt = lastT ? Math.min(64, t - lastT) : 16;\r\n      lastT = t;\r\n\r\n      if (mode === 'pinned') {\r\n        var rTop = trackTop();\r\n        var vh = window.innerHeight;\r\n        var pr = pin.getBoundingClientRect();\r\n        var visible = Math.min(vh, pr.bottom) - Math.max(0, pr.top) >= pr.height * 0.6;\r\n        var idle = t - lastUser >= CFG.autoplayDelay;\r\n\r\n        if (!reduce && visible && idle && pos < M - 0.5 && document.visibilityState !== 'hidden') {\r\n          autoV = Math.min(CFG.autoplaySpeed, autoV + CFG.autoplaySpeed * dt \/ CFG.autoplayRamp);\r\n          pos = Math.min(M, pos + autoV * dt \/ 1000);\r\n          var u = uNow(rTop);\r\n          shrinkRunway(rTop, u);\r\n          anchorU = u; anchorP = pos; lastU = u;                    \/\/ re-anchor: scroll continues from here\r\n          autoplaying = true;\r\n        } else {\r\n          autoplaying = false;\r\n          if (!idle) autoV = 0;\r\n        }\r\n\r\n        var k = reduce ? 1 : 1 - Math.exp(-dt \/ 70);\r\n        var prev = shown;\r\n        shown += (pos - shown) * k;\r\n        if (Math.abs(pos - shown) < 0.05) shown = pos;\r\n        row.style.transform = 'translate3d(' + (-shown).toFixed(2) + 'px,0,0)';\r\n        applyLean((shown - prev) \/ dt, dt);\r\n      } else {\r\n        var prevS = shown;\r\n        shown = pos = viewport.scrollLeft;\r\n        applyLean((shown - prevS) \/ dt, dt);\r\n      }\r\n\r\n      updateUI();\r\n\r\n      var busy = Math.abs(lean) > 0.01 || Math.abs(pos - shown) > 0.05 || autoplaying;\r\n      if (inView || busy) requestAnimationFrame(frame);\r\n      else { running = false; lastT = 0; }\r\n    }\r\n\r\n    \/* Lean toward the direction of travel: row moving left (revealing photos on the right) \u2192 lean left *\/\r\n    function applyLean(v, dt) {\r\n      var target = 0;\r\n      if (!reduce) {\r\n        target = autoplaying\r\n          ? CFG.leanAuto * (autoV \/ CFG.autoplaySpeed)\r\n          : clamp(v * CFG.leanGain, -CFG.leanMax, CFG.leanMax);\r\n      }\r\n      lean += (target - lean) * (1 - Math.exp(-dt \/ (Math.abs(target) > Math.abs(lean) ? 110 : 260)));\r\n      if (Math.abs(lean) < 0.005 && target === 0) lean = 0;\r\n      row.style.setProperty('--yg-lean', lean.toFixed(3) + 'deg');\r\n    }\r\n\r\n    function updateUI() {\r\n      var p = M > 0 ? clamp(shown \/ M, 0, 1) : 1;\r\n      if (bar) bar.style.transform = 'scaleX(' + p.toFixed(4) + ')';\r\n      var idx = shown >= M - 1 ? n : Math.min(n, Math.round(shown \/ step) + 1);\r\n      var label = (idx < 10 ? '0' : '') + idx + ' \/ ' + (n < 10 ? '0' : '') + n;\r\n      if (countEl && label !== lastCount) { countEl.textContent = label; lastCount = label; }\r\n      if (prevBtn) prevBtn.disabled = shown <= 1;\r\n      if (nextBtn) nextBtn.disabled = shown >= M - 1;\r\n    }\r\n\r\n    function kick() {\r\n      if (!running) { running = true; lastT = 0; requestAnimationFrame(frame); }\r\n    }\r\n\r\n    \/* ---------- Prev \/ Next ---------- *\/\r\n    function go(dir) {\r\n      var target = dir > 0\r\n        ? Math.min(M, (Math.floor(shown \/ step + 0.02) + 1) * step)\r\n        : Math.max(0, (Math.ceil(shown \/ step - 0.02) - 1) * step);\r\n      var behavior = reduce ? 'auto' : 'smooth';\r\n      if (mode === 'pinned') {\r\n        var y = window.pageYOffset + trackTop() - top + unmapP(target);\r\n        try { window.scrollTo({ top: y, behavior: behavior }); } catch (e) { window.scrollTo(0, y); }\r\n      } else {\r\n        try { viewport.scrollTo({ left: target, behavior: behavior }); } catch (e) { viewport.scrollLeft = target; }\r\n      }\r\n    }\r\n    if (prevBtn) prevBtn.addEventListener('click', function () { go(-1); });\r\n    if (nextBtn) nextBtn.addEventListener('click', function () { go(1); });\r\n\r\n    \/* ---------- events ---------- *\/\r\n    window.addEventListener('scroll', function () {\r\n      var y = window.pageYOffset;\r\n      var moved = y !== lastScrollY;\r\n      lastScrollY = y;\r\n      if (mode === 'pinned') readScroll(moved);\r\n      kick();\r\n    }, { passive: true });\r\n\r\n    viewport.addEventListener('scroll', function () {\r\n      if (mode === 'simple') kick();\r\n    }, { passive: true });\r\n\r\n    var resizeT = null, lastW = window.innerWidth, lastH = window.innerHeight;\r\n    window.addEventListener('resize', function () {\r\n      clearTimeout(resizeT);\r\n      resizeT = setTimeout(function () {\r\n        \/* ignore the small height changes of mobile browser bars *\/\r\n        if (window.innerWidth === lastW && Math.abs(window.innerHeight - lastH) < 120) return;\r\n        lastW = window.innerWidth; lastH = window.innerHeight;\r\n        measure(); kick();\r\n      }, 200);\r\n    });\r\n    window.addEventListener('load', function () { measure(); kick(); });\r\n\r\n    if ('IntersectionObserver' in window) {\r\n      new IntersectionObserver(function (entries) {\r\n        inView = entries[0].isIntersecting;\r\n        if (inView) {\r\n          imgs.forEach(function (img) { img.loading = 'eager'; });  \/\/ load all photos as the gallery approaches\r\n          lastUser = Math.max(lastUser, performance.now() - CFG.autoplayDelay + 600);\r\n          kick();\r\n        }\r\n      }, { rootMargin: '400px 0px' }).observe(root);\r\n    } else {\r\n      inView = true;\r\n    }\r\n\r\n    measure();\r\n    updateUI();\r\n    kick();\r\n  }\r\n\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\r\n  else init();\r\n})();\r\n<\/script>\r\n\r\n\r\n  <!-- ================= 08 \u00b7 TEAM \u2014 START (v6 \u00b7 replace everything from here down to \"08 \u00b7 TEAM \u2014 END\") ================= -->\r\n  <section id=\"team\" class=\"yeng-about-page__section yeng-about-page__people-section\" aria-labelledby=\"yap-people-title\">\r\n    <div class=\"yeng-about-page__inner\">\r\n\r\n      <div class=\"yeng-about-page__people-head\">\r\n        <div>\r\n          <p class=\"yeng-about-page__label\" data-yap-reveal>\r\n            <span>[ PEOPLE ]<\/span><span class=\"yeng-about-page__label-line\" aria-hidden=\"true\"><\/span>\r\n          <\/p>\r\n          <h2 class=\"yeng-about-page__h2\" id=\"yap-people-title\" data-yap-reveal style=\"--yap-d:1\">\r\n            The people<br>behind YEnG<span class=\"yeng-about-page__dot\">.<\/span>\r\n          <\/h2>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"yeng-team\" data-yeng-team>\r\n\r\n        <ul class=\"yeng-team-grid\" data-yeng-team-grid data-yap-reveal>\r\n\r\n          <!-- ===== PERSON 01 \u2014 edit the portrait URL, alt text and story paragraphs here ===== -->\r\n          <li class=\"yeng-team-card\" data-yeng-team-card data-name=\"Oliver Lep\u0103datu\" data-role=\"Founder\">\r\n            <button type=\"button\" class=\"yeng-team-trigger\" data-yeng-team-trigger aria-expanded=\"false\" aria-controls=\"yeng-team-stage\" aria-label=\"Oliver Lep\u0103datu, Founder. Open story\">\r\n              <span class=\"yeng-team-frame\" data-yeng-team-frame>\r\n                <!-- REPLACE with Oliver's portrait URL (Media Library \u2192 Copy URL) -->\r\n                <img class=\"yeng-team-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Photo-of-Oliver.jpeg\" alt=\"Portrait of Oliver Lep\u0103datu, Founder of YEnG\" loading=\"lazy\" decoding=\"async\">\r\n              <\/span>\r\n              <span class=\"yeng-team-caption\">\r\n                <span class=\"yeng-team-num\" aria-hidden=\"true\">01<\/span>\r\n                <span class=\"yeng-team-name\">Oliver Lepadatu<\/span>\r\n                <span class=\"yeng-team-role\">Founder<\/span>\r\n                <span class=\"yeng-team-hint\" aria-hidden=\"true\"><span class=\"yeng-team-hint-b\">[<\/span><span class=\"yeng-team-hint-t\">Open story<\/span><span class=\"yeng-team-hint-b\">]<\/span><\/span>\r\n              <\/span>\r\n            <\/button>\r\n            <div class=\"yeng-team-bio\" data-yeng-team-bio>\r\n              <p>Oliver started his first venture at seven, building Lemon Coolers through KEN Academy. Years later, while in high school, experiences at Babson and Columbia exposed him to a much more practical way of learning entrepreneurship. Seeing how limited that kind of access was for Romanian students, he created YEnG, a free program built to help high school students learn entrepreneurship by actually doing it.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n\r\n          <!-- ===== PERSON 02 \u2014 edit the portrait URL, alt text and story paragraphs here ===== -->\r\n          <li class=\"yeng-team-card\" data-yeng-team-card data-name=\"Carmen Iorgulescu\" data-role=\"Project Manager\">\r\n            <button type=\"button\" class=\"yeng-team-trigger\" data-yeng-team-trigger aria-expanded=\"false\" aria-controls=\"yeng-team-stage\" aria-label=\"Carmen Iorgulescu, Project Manager. Open story\">\r\n              <span class=\"yeng-team-frame\" data-yeng-team-frame>\r\n                <!-- REPLACE with Carmen's portrait URL (Media Library \u2192 Copy URL) -->\r\n                <img class=\"yeng-team-img\" src=\"https:\/\/yeng.ro\/wp-content\/uploads\/2026\/09\/Photo-of-Carmen.jpg\" alt=\"Portrait of Carmen Iorgulescu, Project Manager at YEnG\" loading=\"lazy\" decoding=\"async\">\r\n              <\/span>\r\n              <span class=\"yeng-team-caption\">\r\n                <span class=\"yeng-team-num\" aria-hidden=\"true\">02<\/span>\r\n                <span class=\"yeng-team-name\">Carmen Iorgulescu<\/span>\r\n                <span class=\"yeng-team-role\">Project Manager<\/span>\r\n                <span class=\"yeng-team-hint\" aria-hidden=\"true\"><span class=\"yeng-team-hint-b\">[<\/span><span class=\"yeng-team-hint-t\">Open story<\/span><span class=\"yeng-team-hint-b\">]<\/span><\/span>\r\n              <\/span>\r\n            <\/button>\r\n            <div class=\"yeng-team-bio\" data-yeng-team-bio>\r\n              <!-- PLACEHOLDER \u2014 replace these paragraphs with Carmen's approved biography. -->\r\n              <p>Carmen brings years of experience in entrepreneurship education through KEN Academy, where she has worked closely with kids, developing their first ideas and projects. She now supports YEnG as Project Manager, helping turn the program\u2019s vision into a stronger, more structured experience for every new generation of participants.<\/p>\r\n            <\/div>\r\n          <\/li>\r\n\r\n        <\/ul>\r\n\r\n        <!-- Story stage: an opaque rounded card that opens above the two portraits (filled by the script) -->\r\n        <div class=\"yeng-team-stage\" id=\"yeng-team-stage\" data-yeng-team-stage hidden>\r\n          <div class=\"yeng-team-veil\" data-yeng-team-veil aria-hidden=\"true\"><\/div>\r\n          <div class=\"yeng-team-panel\" data-yeng-team-panel role=\"region\" aria-labelledby=\"yeng-team-story-name\">\r\n            <div class=\"yeng-team-slot\" data-yeng-team-slot aria-hidden=\"true\"><\/div>\r\n            <div class=\"yeng-team-story\" data-yeng-team-story>\r\n              <div class=\"yeng-team-story-top\">\r\n                <p class=\"yeng-team-kicker\" data-yeng-team-kicker><\/p>\r\n                <button type=\"button\" class=\"yeng-team-btn yeng-team-close\" data-yeng-team-close aria-label=\"Close story\">\r\n                  <span class=\"yeng-team-btn-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-team-btn-t\">Close<\/span><span class=\"yeng-team-btn-b\" aria-hidden=\"true\">]<\/span>\r\n                <\/button>\r\n              <\/div>\r\n              <h3 class=\"yeng-team-story-name\" id=\"yeng-team-story-name\" tabindex=\"-1\" data-yeng-team-name><\/h3>\r\n              <p class=\"yeng-team-story-role\" data-yeng-team-role><\/p>\r\n              <div class=\"yeng-team-story-text\">\r\n                <div class=\"yeng-team-sr\" data-yeng-team-full><\/div>\r\n                <div class=\"yeng-team-typed\" aria-hidden=\"true\" data-yeng-team-typed><\/div>\r\n              <\/div>\r\n              <div class=\"yeng-team-story-foot\">\r\n                <button type=\"button\" class=\"yeng-team-btn yeng-team-skip\" data-yeng-team-skip>\r\n                  <span class=\"yeng-team-btn-b\" aria-hidden=\"true\">[<\/span><span class=\"yeng-team-btn-t\">Show full story<\/span><span class=\"yeng-team-btn-b\" aria-hidden=\"true\">]<\/span>\r\n                <\/button>\r\n                <div class=\"yeng-team-switch\" data-yeng-team-switch aria-label=\"Choose a person\" role=\"group\"><\/div>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/section>\r\n\r\n<script>\r\n\/* YEnG \u00b7 Team v6: two portrait cards \u2192 click \u2192 an opaque story card opens above them; the story types out (vanilla JS).\r\n   - The story text lives in each card's .yeng-team-bio (readable without JavaScript and to screen readers).\r\n   - Typing is visual only (aria-hidden); a hidden full copy is what assistive technology reads.\r\n   - Reduced motion: the card appears at once (no fade, no rise); the story still types out (see typeWhenReduced).\r\n   - Closes with [ Close ], Escape, or a click outside the card (desktop). *\/\r\n(function () {\r\n  var CFG = {\r\n    typeSpeed: 16,     \/\/ ms per character \u2014 higher = slower typing\r\n    paraPause: 18,     \/\/ pause between paragraphs, in \"characters\"\r\n    cardMs: 420,       \/\/ card entrance: opacity 0 \u2192 1, 14px \u2192 0\r\n    closeMs: 260,      \/\/ card exit\r\n    typeWhenReduced: true   \/\/ true = the story still types out when \"reduce motion\" is on (the card itself still appears instantly)\r\n  };\r\n  var EASE_OUT = 'cubic-bezier(0.16, 1, 0.3, 1)';\r\n\r\n  function media(q) { return window.matchMedia ? window.matchMedia(q) : null; }\r\n  var nextFrame = window.requestAnimationFrame\r\n    ? function (fn) { return window.requestAnimationFrame(fn); }\r\n    : function (fn) { return setTimeout(fn, 16); };\r\n  var cancelFrame = window.cancelAnimationFrame\r\n    ? function (id) { window.cancelAnimationFrame(id); }\r\n    : function (id) { clearTimeout(id); };\r\n\r\n  function init() {\r\n    var team = document.querySelector('[data-yeng-team]');\r\n    if (!team || team.getAttribute('data-yeng-team-ready') === '1') return;\r\n    team.setAttribute('data-yeng-team-ready', '1');\r\n\r\n    var grid     = team.querySelector('[data-yeng-team-grid]');\r\n    var stage    = team.querySelector('[data-yeng-team-stage]');\r\n    var veil     = team.querySelector('[data-yeng-team-veil]');\r\n    var panel    = team.querySelector('[data-yeng-team-panel]');\r\n    var slot     = team.querySelector('[data-yeng-team-slot]');\r\n    var story    = team.querySelector('[data-yeng-team-story]');\r\n    var kicker   = team.querySelector('[data-yeng-team-kicker]');\r\n    var nameEl   = team.querySelector('[data-yeng-team-name]');\r\n    var roleEl   = team.querySelector('[data-yeng-team-role]');\r\n    var fullEl   = team.querySelector('[data-yeng-team-full]');\r\n    var typedEl  = team.querySelector('[data-yeng-team-typed]');\r\n    var closeBtn = team.querySelector('[data-yeng-team-close]');\r\n    var skipBtn  = team.querySelector('[data-yeng-team-skip]');\r\n    var switchEl = team.querySelector('[data-yeng-team-switch]');\r\n    var cards    = Array.prototype.slice.call(team.querySelectorAll('[data-yeng-team-card]'));\r\n    if (!grid || !stage || !panel || !slot || !story || !cards.length) return;\r\n\r\n    var mqReduce = media('(prefers-reduced-motion: reduce)');\r\n    var mqMobile = media('(max-width: 767px)');\r\n    function reduce() { return !!(mqReduce && mqReduce.matches); }\r\n    function mobile() { return !!(mqMobile && mqMobile.matches); }\r\n    var canAnimate = typeof panel.animate === 'function';\r\n\r\n    var people = cards.map(function (card, i) {\r\n      var bio = card.querySelector('[data-yeng-team-bio]');\r\n      return {\r\n        card: card,\r\n        trigger: card.querySelector('[data-yeng-team-trigger]'),\r\n        name: card.getAttribute('data-name') || '',\r\n        role: card.getAttribute('data-role') || '',\r\n        num: (i < 9 ? '0' : '') + (i + 1),\r\n        paragraphs: bio ? Array.prototype.map.call(bio.querySelectorAll('p'), function (p) {\r\n          return p.textContent.replace(\/\\s+\/g, ' ').trim();\r\n        }).filter(Boolean) : []\r\n      };\r\n    });\r\n    var total = (people.length < 10 ? '0' : '') + people.length;\r\n\r\n    team.classList.add('is-js');                 \/\/ CSS hides the inline bios; the card shows them instead\r\n\r\n    \/* Person switcher inside the card (built with createElement \u2014 no HTML strings in the script) *\/\r\n    var switchBtns = people.map(function (p, i) {\r\n      var b = document.createElement('button');\r\n      b.type = 'button';\r\n      b.className = 'yeng-team-btn yeng-team-switch-btn';\r\n      var t = document.createElement('span');\r\n      t.className = 'yeng-team-btn-t';\r\n      t.textContent = p.num + ' ' + p.name.split(' ')[0];\r\n      b.appendChild(t);\r\n      b.setAttribute('aria-label', 'Open the story of ' + p.name);\r\n      b.addEventListener('click', function () { if (i !== openIndex) open(i); });\r\n      if (switchEl) switchEl.appendChild(b);\r\n      return b;\r\n    });\r\n\r\n    \/* ---------- state ---------- *\/\r\n    var openIndex = -1, anims = [], timers = [], typingId = 0, typing = null, lastTrigger = null;\r\n\r\n    function later(fn, ms) { timers.push(setTimeout(fn, ms)); }\r\n    function run(el, frames, opts) {\r\n      if (!canAnimate || !el) return null;\r\n      var a = el.animate(frames, opts);\r\n      anims.push(a);\r\n      return a;\r\n    }\r\n    function stopMotion() {\r\n      anims.forEach(function (a) { try { a.cancel(); } catch (e) {} });\r\n      anims = [];\r\n      timers.forEach(clearTimeout); timers = [];\r\n      if (typingId) { cancelFrame(typingId); typingId = 0; }\r\n    }\r\n\r\n    \/* ---------- story text ---------- *\/\r\n    function buildStory(p) {\r\n      kicker.textContent = '[ ' + p.num + ' \/ ' + total + ' ]';\r\n      nameEl.textContent = p.name;\r\n      if (roleEl) roleEl.textContent = p.role;\r\n      fullEl.textContent = '';\r\n      typedEl.textContent = '';\r\n      var rows = [];\r\n      p.paragraphs.forEach(function (text) {\r\n        var full = document.createElement('p');\r\n        full.textContent = text;\r\n        fullEl.appendChild(full);\r\n\r\n        var para = document.createElement('p');\r\n        var shown = document.createElement('span');\r\n        var rest = document.createElement('span');\r\n        rest.className = 'yeng-team-rest';\r\n        rest.textContent = text;                                 \/\/ full text reserves the space: no layout jumps\r\n        para.appendChild(shown);\r\n        para.appendChild(rest);\r\n        typedEl.appendChild(para);\r\n        rows.push({ text: text, shown: shown, rest: rest, para: para });\r\n      });\r\n      var caret = document.createElement('span');\r\n      caret.className = 'yeng-team-caret';\r\n      typing = { rows: rows, caret: caret, done: false, total: 0 };\r\n      rows.forEach(function (r) { typing.total += r.text.length + CFG.paraPause; });\r\n      story.classList.remove('is-complete');\r\n    }\r\n\r\n    function renderTyped(n) {\r\n      var offset = 0;\r\n      typing.rows.forEach(function (r) {\r\n        var k = Math.max(0, Math.min(r.text.length, n - offset));\r\n        if (r.shown.textContent.length !== k) {\r\n          r.shown.textContent = r.text.slice(0, k);\r\n          r.rest.textContent = r.text.slice(k);\r\n        }\r\n        var activeRow = n >= offset && n < offset + r.text.length + CFG.paraPause;\r\n        if (activeRow && typing.caret.parentNode !== r.para) r.para.insertBefore(typing.caret, r.rest);\r\n        offset += r.text.length + CFG.paraPause;\r\n      });\r\n    }\r\n\r\n    function finishTyping() {\r\n      if (!typing || typing.done) return;\r\n      if (typingId) { cancelFrame(typingId); typingId = 0; }\r\n      typing.done = true;\r\n      typing.rows.forEach(function (r) { r.shown.textContent = r.text; r.rest.textContent = ''; });\r\n      if (typing.caret.parentNode) typing.caret.parentNode.removeChild(typing.caret);\r\n      story.classList.add('is-complete');                        \/\/ hides \"Show full story\"; the text stays\r\n    }\r\n\r\n    function startTyping() {\r\n      if (!typing) return;\r\n      var per = CFG.typeSpeed, t0 = null;\r\n      function step(t) {\r\n        if (typeof t !== 'number') t = Date.now();\r\n        if (t0 === null) t0 = t;\r\n        var n = Math.floor((t - t0) \/ per);\r\n        if (n >= typing.total) { finishTyping(); return; }\r\n        renderTyped(n);\r\n        typingId = nextFrame(step);\r\n      }\r\n      renderTyped(0);\r\n      typingId = nextFrame(step);\r\n    }\r\n\r\n    \/* ---------- helpers ---------- *\/\r\n    function setExpanded(i) {\r\n      people.forEach(function (p, k) {\r\n        p.trigger.setAttribute('aria-expanded', k === i ? 'true' : 'false');\r\n        p.card.classList.toggle('is-selected', k === i);\r\n      });\r\n      switchBtns.forEach(function (b, k) {\r\n        if (k === i) b.setAttribute('aria-current', 'true'); else b.removeAttribute('aria-current');\r\n      });\r\n    }\r\n    function lockGrid(on) {\r\n      if ('inert' in grid) grid.inert = on;\r\n      if (on) grid.setAttribute('aria-hidden', 'true'); else grid.removeAttribute('aria-hidden');\r\n      people.forEach(function (p) { if (on) p.trigger.setAttribute('tabindex', '-1'); else p.trigger.removeAttribute('tabindex'); });\r\n    }\r\n    function headerOffset() {\r\n      var v = parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--yeng-scroll-offset'));\r\n      return isNaN(v) ? 0 : v;\r\n    }\r\n    \/* keep the whole card on screen (centred under the header when it fits, otherwise its top) *\/\r\n    function bringIntoView(calm) {\r\n      var r = panel.getBoundingClientRect();\r\n      var top = headerOffset() + 16, room = window.innerHeight - top - 16;\r\n      if (r.top >= top && r.bottom <= window.innerHeight - 16) return;\r\n      var dy = r.height <= room ? r.top - top - (room - r.height) \/ 2 : r.top - top;\r\n      try { window.scrollBy({ top: dy, behavior: calm ? 'auto' : 'smooth' }); } catch (e) { window.scrollBy(0, dy); }\r\n    }\r\n\r\n    \/* ---------- open \/ switch ---------- *\/\r\n    function open(i) {\r\n      var p = people[i];\r\n      if (!p) return;\r\n      var switching = openIndex > -1;\r\n      stopMotion();\r\n      openIndex = i;\r\n      lastTrigger = p.trigger;                                   \/\/ Close returns focus to this person's portrait\r\n\r\n      buildStory(p);\r\n      setExpanded(i);\r\n      team.classList.add('is-open');\r\n      stage.hidden = false;\r\n      lockGrid(true);\r\n\r\n      \/* portrait: a copy of the card's frame inside the story card *\/\r\n      slot.textContent = '';\r\n      var clone = p.card.querySelector('[data-yeng-team-frame]').cloneNode(true);\r\n      clone.removeAttribute('data-yeng-team-frame');\r\n      clone.classList.add('yeng-team-clone');\r\n      var cloneImg = clone.querySelector('img');\r\n      if (cloneImg) { cloneImg.removeAttribute('loading'); cloneImg.alt = ''; }\r\n      var edge = document.createElement('span');\r\n      edge.className = 'yeng-team-edge';\r\n      clone.appendChild(edge);\r\n      slot.appendChild(clone);\r\n\r\n      var calm = reduce() || !canAnimate;\r\n\r\n      if (calm) {\r\n        \/* reduced motion (or no Web Animations API): the card is simply there, no fade or rise.\r\n           The story types out unless typeWhenReduced is false. *\/\r\n        if (CFG.typeWhenReduced) later(startTyping, 60); else finishTyping();\r\n      } else if (!switching) {\r\n        \/* the card: fades in and rises 14px *\/\r\n        run(panel, [{ opacity: 0, transform: 'translateY(14px)' }, { opacity: 1, transform: 'none' }],\r\n            { duration: CFG.cardMs, easing: EASE_OUT, fill: 'both' });\r\n        \/* the portrait turns into place, with a brief yellow edge *\/\r\n        run(clone, [{ opacity: 0, transform: 'perspective(1200px) rotateY(-10deg) scale(0.96)' }, { opacity: 1, transform: 'none' }],\r\n            { duration: 700, delay: 90, easing: EASE_OUT, fill: 'both' });\r\n        run(edge, [{ opacity: 0 }, { opacity: 1, offset: 0.35 }, { opacity: 0 }], { duration: 900, delay: 90, fill: 'both' });\r\n        run(story, [{ opacity: 0, transform: 'translateY(8px)' }, { opacity: 1, transform: 'none' }],\r\n            { duration: 380, delay: 160, easing: EASE_OUT, fill: 'both' });\r\n        later(startTyping, 420);\r\n      } else {\r\n        \/* switching person: the card stays, its content changes *\/\r\n        run(clone, [{ opacity: 0, transform: 'perspective(1200px) rotateY(-10deg) scale(0.97)' }, { opacity: 1, transform: 'none' }],\r\n            { duration: 560, easing: EASE_OUT, fill: 'both' });\r\n        run(edge, [{ opacity: 0 }, { opacity: 1, offset: 0.35 }, { opacity: 0 }], { duration: 760, fill: 'both' });\r\n        run(story, [{ opacity: 0, transform: 'translateY(6px)' }, { opacity: 1, transform: 'none' }],\r\n            { duration: 320, delay: 60, easing: EASE_OUT, fill: 'both' });\r\n        later(startTyping, 260);\r\n      }\r\n\r\n      if (!switching) bringIntoView(calm);\r\n      nameEl.focus({ preventScroll: true });                     \/\/ focus moves into the open story\r\n    }\r\n\r\n    \/* ---------- close ---------- *\/\r\n    function close() {\r\n      if (openIndex < 0) return;\r\n      var p = people[openIndex];\r\n      stopMotion();\r\n\r\n      function done() {\r\n        stage.hidden = true;\r\n        slot.textContent = '';\r\n        team.classList.remove('is-open');\r\n        setExpanded(-1);\r\n        lockGrid(false);\r\n        openIndex = -1;\r\n        var back = lastTrigger || p.trigger;\r\n        if (mobile()) { try { back.scrollIntoView({ block: 'center' }); } catch (e) {} }\r\n        back.focus({ preventScroll: !mobile() });\r\n        lastTrigger = null;\r\n      }\r\n\r\n      if (reduce() || !canAnimate) { done(); return; }\r\n      run(panel, [{ opacity: 1, transform: 'none' }, { opacity: 0, transform: 'translateY(10px)' }],\r\n          { duration: CFG.closeMs, easing: 'cubic-bezier(0.4, 0, 1, 1)', fill: 'forwards' });\r\n      later(done, CFG.closeMs);\r\n    }\r\n\r\n    \/* ---------- events ---------- *\/\r\n    people.forEach(function (p, i) {\r\n      p.trigger.addEventListener('click', function () { open(i); });\r\n    });\r\n    if (closeBtn) closeBtn.addEventListener('click', close);\r\n    if (veil) veil.addEventListener('click', close);             \/\/ click outside the card (desktop)\r\n    if (skipBtn) skipBtn.addEventListener('click', function () {\r\n      finishTyping();\r\n      nameEl.focus({ preventScroll: true });                      \/\/ the button disappears; keep focus in the story\r\n    });\r\n    document.addEventListener('keydown', function (e) {\r\n      if ((e.key === 'Escape' || e.key === 'Esc') && openIndex > -1) close();\r\n    });\r\n    \/* reduced motion switched on while a story is open: finish it at once *\/\r\n    function onCalm() { if (openIndex > -1 && reduce() && !CFG.typeWhenReduced) { stopMotion(); finishTyping(); } }\r\n    function onLayoutChange() { if (openIndex > -1) { stopMotion(); finishTyping(); } }\r\n    [[mqReduce, onCalm], [mqMobile, onLayoutChange]].forEach(function (pair) {\r\n      var mq = pair[0], fn = pair[1];\r\n      if (!mq) return;\r\n      if (mq.addEventListener) mq.addEventListener('change', fn);\r\n      else if (mq.addListener) mq.addListener(fn);\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\r\n  else init();\r\n})();\r\n<\/script>\r\n  <!-- ================= 08 \u00b7 TEAM \u2014 END ================= -->\r\n\r\n\r\n<\/div>\r\n\r\n<script>\r\n\/* YEnG About \u2014 page script: placeholders, scroll reveals, Program diagram (v5: one clean spine), character hover *\/\r\n(function () {\r\n  var root = document.querySelector('[data-yap-root]');\r\n  if (!root || root.getAttribute('data-yap-ready') === '1') return;   \/\/ run once\r\n  root.setAttribute('data-yap-ready', '1');\r\n\r\n  var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n  var finePointer  = window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches;\r\n\r\n  \/* ---------- 1. Image placeholders (until real URLs are pasted) ---------- *\/\r\n  root.querySelectorAll('img').forEach(function (img) {\r\n    var src = img.getAttribute('src') || '';\r\n    if (src.indexOf('PASTE_') === 0) {\r\n      var frame = img.parentNode;\r\n      frame.classList.add('is-placeholder');\r\n      frame.setAttribute('data-placeholder', src);\r\n      img.remove();\r\n    }\r\n  });\r\n\r\n  \/* ---------- 2. Scroll reveals ---------- *\/\r\n  var revealEls = root.querySelectorAll('[data-yap-reveal]');\r\n  if (reduceMotion || !('IntersectionObserver' in window)) {\r\n    revealEls.forEach(function (el) { el.classList.add('is-in'); });\r\n  } else {\r\n    root.classList.add('is-ready');\r\n    var io = new IntersectionObserver(function (entries) {\r\n      entries.forEach(function (e) {\r\n        if (e.isIntersecting) { e.target.classList.add('is-in'); io.unobserve(e.target); }\r\n      });\r\n    }, { rootMargin: '0px 0px -8% 0px', threshold: 0.12 });\r\n    revealEls.forEach(function (el) { io.observe(el); });\r\n    \/* \"Reduce motion\" switched on while the page is open: show everything in its final state *\/\r\n    var mqR = window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\r\n    var showAll = function () { if (mqR.matches) { io.disconnect(); revealEls.forEach(function (el) { el.classList.add('is-in'); }); } };\r\n    if (mqR) { if (mqR.addEventListener) mqR.addEventListener('change', showAll); else if (mqR.addListener) mqR.addListener(showAll); }\r\n  }\r\n\r\n  \/* ---------- 3. Program diagram: one straight spine, five straight branches ----------\r\n     Geometry:  node \u2500\u2500trunk\u2500\u2500\u252c\u2500\u2500 branch 01\r\n                              \u251c\u2500\u2500 branch 02\r\n                              \u251c\u2500\u2500 branch 03   (the trunk lands on the nearest branch when it is close,\r\n                              \u251c\u2500\u2500 branch 04    so the two form one straight line \u2014 no kink)\r\n                              \u2514\u2500\u2500 branch 05\r\n     - The grey base is ONE path, so overlapping pieces are never painted twice (no doubled strokes).\r\n     - Every coordinate is snapped to the device pixel grid for its stroke width (no half-pixel blur).\r\n     - The yellow hover line for each pillar is a separate path: node \u2192 spine \u2192 branch. *\/\r\n  var diagram = root.querySelector('[data-yap-diagram]');\r\n  if (diagram) {\r\n    var svg     = diagram.querySelector('[data-yap-lines]');\r\n    var source  = diagram.querySelector('[data-yap-source]');\r\n    var list    = diagram.querySelector('.yeng-about-page__pillars');\r\n    var pillars = Array.prototype.slice.call(diagram.querySelectorAll('.yeng-about-page__pillar'));\r\n    var desktop = window.matchMedia('(min-width: 1025px)');\r\n    var NS = 'http:\/\/www.w3.org\/2000\/svg';\r\n    var active = [], heads = [], current = -1, lastKey = '';\r\n\r\n    function el(name, attrs) {\r\n      var n = document.createElementNS(NS, name);\r\n      for (var k in attrs) n.setAttribute(k, attrs[k]);\r\n      return n;\r\n    }\r\n    function r3(v) { return Math.round(v * 1000) \/ 1000; }\r\n\r\n    function draw() {\r\n      while (svg.firstChild) svg.removeChild(svg.firstChild);\r\n      active = []; heads = [];\r\n      if (!desktop.matches || !source || !list || !pillars.length) return;\r\n\r\n      var d = diagram.getBoundingClientRect();\r\n      if (d.width < 10 || d.height < 10) return;\r\n      var dpr = window.devicePixelRatio || 1;\r\n      lastKey = [d.width, d.height, (d.left * dpr) % 1, (d.top * dpr) % 1, dpr].join('|');\r\n\r\n      \/* Snap a viewport coordinate so a line of width w covers whole device pixels, then make it local *\/\r\n      function snap(abs, w) {\r\n        var s = Math.round(abs * dpr);\r\n        if (Math.round(w * dpr) % 2 === 1) s += 0.5;\r\n        return s \/ dpr;\r\n      }\r\n      function X(abs, w) { return r3(snap(abs, w) - d.left); }\r\n      function Y(abs, w) { return r3(snap(abs, w) - d.top); }\r\n\r\n      \/* 1 SVG unit = 1 CSS pixel, no scaling *\/\r\n      svg.setAttribute('width', d.width);\r\n      svg.setAttribute('height', d.height);\r\n      svg.setAttribute('viewBox', '0 0 ' + d.width + ' ' + d.height);\r\n\r\n      var s = source.getBoundingClientRect();\r\n      var l = list.getBoundingClientRect();\r\n      var rows = pillars.map(function (p) {\r\n        var t = p.querySelector('.yeng-about-page__pillar-title').getBoundingClientRect();\r\n        return t.top + t.height \/ 2;\r\n      });\r\n\r\n      var oxA = s.right + 24;                         \/\/ node, just right of \"Educational Program\"\r\n      var exA = l.left - 16;                          \/\/ branch ends, just left of the pillars\r\n      var sxA = oxA + (exA - oxA) * 0.42;             \/\/ the spine\r\n      var first = rows[0], last = rows[rows.length - 1];\r\n\r\n      \/* Trunk height: the middle of the source title, kept inside the spine.\r\n         If it lands close to a branch, it uses that branch's exact height (one straight line). *\/\r\n      var tA = Math.min(Math.max(s.top + s.height \/ 2, first), last);\r\n      var near = 0;\r\n      rows.forEach(function (y, i) { if (Math.abs(y - tA) < Math.abs(rows[near] - tA)) near = i; });\r\n      var spacing = rows.length > 1 ? (last - first) \/ (rows.length - 1) : 999;\r\n      if (Math.abs(rows[near] - tA) < spacing * 0.35) tA = rows[near];\r\n\r\n      \/* ---- grey base: one path (1px) ---- *\/\r\n      var ox = X(oxA, 2), ex = X(exA, 2);             \/\/ horizontal ends on whole pixels\r\n      var sx1 = X(sxA, 1), t1 = Y(tA, 1);\r\n      var parts = [\r\n        'M' + ox + ' ' + t1 + 'H' + sx1,              \/\/ trunk\r\n        'M' + sx1 + ' ' + t1 + 'V' + Y(first, 1),      \/\/ spine, junction \u2192 top\r\n        'M' + sx1 + ' ' + t1 + 'V' + Y(last, 1)        \/\/ spine, junction \u2192 bottom\r\n      ];\r\n      rows.forEach(function (y) { parts.push('M' + sx1 + ' ' + Y(y, 1) + 'H' + ex); });\r\n      var base = el('path', { d: parts.join(''), 'class': 'yap-line-base' });\r\n      svg.appendChild(base);\r\n      var baseLen = Math.ceil(base.getTotalLength ? base.getTotalLength() : 2000) + 2;\r\n      base.style.setProperty('--len', baseLen + 'px');\r\n      base.style.setProperty('--i', 0);\r\n\r\n      \/* ---- yellow hover lines (2px) + arrow heads ---- *\/\r\n      var sx2 = X(sxA, 2), t2 = Y(tA, 2);\r\n      rows.forEach(function (y, i) {\r\n        var y2 = Y(y, 2);\r\n        var on = el('path', { d: 'M' + ox + ' ' + t2 + 'H' + sx2 + 'V' + y2 + 'H' + ex, 'class': 'yap-line-active' });\r\n        svg.appendChild(on);\r\n        var len = Math.ceil(on.getTotalLength ? on.getTotalLength() : 1000) + 2;\r\n        on.style.setProperty('--len', len + 'px');\r\n        on.style.setProperty('--i', i);\r\n        active.push(on);\r\n\r\n        var yh = Y(y, 1);\r\n        var head = el('path', {\r\n          d: 'M' + (ex - 7) + ' ' + (yh - 5) + 'L' + ex + ' ' + yh + 'L' + (ex - 7) + ' ' + (yh + 5),\r\n          'class': 'yap-head'\r\n        });\r\n        head.style.setProperty('--i', i);\r\n        svg.appendChild(head);\r\n        heads.push(head);\r\n      });\r\n\r\n      \/* ---- yellow node, centred on the trunk ---- *\/\r\n      svg.appendChild(el('rect', { x: ox - 3, y: t2 - 3, width: 6, height: 6, 'class': 'yap-node' }));\r\n\r\n      \/* keep whatever was lit before the redraw *\/\r\n      if (current > -1) setActive(current);\r\n      if (diagram.classList.contains('is-all')) {\r\n        active.forEach(function (p) { p.classList.add('is-on'); });\r\n        heads.forEach(function (h) { h.classList.add('is-on'); });\r\n      }\r\n    }\r\n\r\n    function setActive(index) {\r\n      current = index;\r\n      diagram.classList.toggle('has-active', index > -1);\r\n      pillars.forEach(function (p, i) {\r\n        var on = i === index;\r\n        p.classList.toggle('is-active', on);\r\n        if (active[i]) active[i].classList.toggle('is-on', on);\r\n        if (heads[i])  heads[i].classList.toggle('is-on', on);\r\n      });\r\n    }\r\n\r\n    if (finePointer) {\r\n      pillars.forEach(function (p, i) {\r\n        p.addEventListener('mouseenter', function () { if (desktop.matches) setActive(i); });\r\n        p.addEventListener('mouseleave', function () { setActive(-1); });\r\n      });\r\n    }\r\n\r\n    var raf = 0;\r\n    function redraw() {\r\n      if (raf) cancelAnimationFrame(raf);\r\n      raf = requestAnimationFrame(function () { raf = 0; draw(); });\r\n    }\r\n    \/* Only redraw when the snapped geometry would actually change (avoids restarting the line animation) *\/\r\n    function redrawIfMoved() {\r\n      var d = diagram.getBoundingClientRect(), dpr = window.devicePixelRatio || 1;\r\n      var key = [d.width, d.height, (d.left * dpr) % 1, (d.top * dpr) % 1, dpr].join('|');\r\n      if (key !== lastKey) redraw();\r\n    }\r\n\r\n    draw();\r\n    if (document.fonts && document.fonts.ready) document.fonts.ready.then(redraw);\r\n    window.addEventListener('load', redraw);\r\n    if ('ResizeObserver' in window) new ResizeObserver(redraw).observe(diagram);\r\n    window.addEventListener('resize', redraw);\r\n    if (desktop.addEventListener) desktop.addEventListener('change', redraw);\r\n    else if (desktop.addListener) desktop.addListener(redraw);\r\n    \/* the reveal slides the diagram 16px; once the lines have finished drawing, re-snap to the final position *\/\r\n    diagram.addEventListener('transitionend', function (e) {\r\n      if (e.target === diagram && e.propertyName === 'transform') setTimeout(redrawIfMoved, 1400);\r\n    });\r\n  }\r\n\r\n  \/* ---------- 4. Character hover (only on elements marked data-yap-chars) ---------- *\/\r\n  root.querySelectorAll('[data-yap-chars]').forEach(function (target) {\r\n    var sr = document.createElement('span');\r\n    sr.className = 'yeng-about-page__sr';\r\n    sr.textContent = target.textContent.replace(\/\\s+\/g, ' ').trim();\r\n\r\n    var visual = document.createElement('span');\r\n    visual.setAttribute('aria-hidden', 'true');\r\n    while (target.firstChild) visual.appendChild(target.firstChild);\r\n    target.appendChild(sr);\r\n    target.appendChild(visual);\r\n\r\n    (function split(node) {\r\n      Array.prototype.slice.call(node.childNodes).forEach(function (child) {\r\n        if (child.nodeType === 1) { split(child); return; }\r\n        if (child.nodeType !== 3) return;\r\n        var text = child.nodeValue.replace(\/\\s+\/g, ' ');\r\n        if (!text.trim()) { child.remove(); return; }\r\n        text = text.trim();\r\n        var frag = document.createDocumentFragment(), word = null;\r\n        for (var k = 0; k < text.length; k++) {\r\n          var ch = text.charAt(k);\r\n          if (ch === ' ') { frag.appendChild(document.createTextNode(' ')); word = null; continue; }\r\n          if (!word) { word = document.createElement('span'); word.className = 'yap-word'; frag.appendChild(word); }\r\n          var c = document.createElement('span');\r\n          c.className = 'yap-char';\r\n          c.textContent = ch;\r\n          word.appendChild(c);\r\n        }\r\n        child.parentNode.replaceChild(frag, child);\r\n      });\r\n    })(visual);\r\n  });\r\n})();\r\n<\/script>\r\n\r\n<script>\r\n\/* YEnG \u00b7 05 IMPACT \u2014 count-up + focus mode (v4, robust init) *\/\r\n(function () {\r\n  \/* Keep true: with \"reduce motion\" on, the final numbers (400+, 140, 30+, 25, 90%) show at once, no count from 0. *\/\r\n  var RESPECT_REDUCED_MOTION = true;\r\n\r\n  var DURATION = 700;    \/\/ ms per number (fast: 550\u2013800)\r\n  var STAGGER  = 80;     \/\/ ms between numbers\r\n\r\n  function init() {\r\n    var section = document.getElementById('impact') || document.querySelector('[data-yap-impact]');\r\n    if (!section || section.getAttribute('data-yeng-count-ready') === '1') return;   \/\/ never twice\r\n    section.setAttribute('data-yeng-count-ready', '1');\r\n\r\n    var list  = section.querySelector('.yeng-about-page__stats');\r\n    var nums  = Array.prototype.slice.call(section.querySelectorAll('.yeng-impact-count'));\r\n    var stats = list ? Array.prototype.slice.call(list.querySelectorAll('.yeng-about-page__stat')) : [];\r\n    if (!list || !nums.length) return;\r\n\r\n    stats.forEach(function (s, i) { s.style.setProperty('--si', i); });\r\n\r\n    \/* ---------- helpers ---------- *\/\r\n    function mq(q) { return !!(window.matchMedia && window.matchMedia(q).matches); }\r\n    function endOf(el)    { return parseInt(el.getAttribute('data-count'), 10); }\r\n    function suffixOf(el) { return el.getAttribute('data-suffix') || ''; }\r\n    function showFinal(el) {\r\n      var end = endOf(el);\r\n      if (!isNaN(end)) el.textContent = end + suffixOf(el);\r\n    }\r\n    function showAllFinal() {\r\n      nums.forEach(showFinal);\r\n      list.classList.add('is-in');\r\n    }\r\n\r\n    \/* ---------- 1. Count-up ---------- *\/\r\n    var reduce   = RESPECT_REDUCED_MOTION && mq('(prefers-reduced-motion: reduce)');\r\n    var inEditor = document.body && document.body.classList.contains('elementor-editor-active');\r\n    var started  = false;\r\n\r\n    function countUp(el) {\r\n      var end = endOf(el), suffix = suffixOf(el), t0 = null;\r\n      if (isNaN(end)) return;\r\n      function frame(t) {\r\n        if (t0 === null) t0 = t;\r\n        var p = Math.min(1, (t - t0) \/ DURATION);\r\n        var eased = 1 - Math.pow(1 - p, 3);                  \/\/ easeOutCubic, no overshoot\r\n        el.textContent = Math.round(end * eased) + suffix;   \/\/ whole numbers, suffix fixed\r\n        if (p < 1) requestAnimationFrame(frame);\r\n        else el.textContent = end + suffix;                  \/\/ land exactly on the final value\r\n      }\r\n      requestAnimationFrame(frame);\r\n    }\r\n\r\n    function start() {\r\n      if (started) return;\r\n      started = true;\r\n      list.classList.add('is-in');\r\n      nums.forEach(function (n, i) {\r\n        setTimeout(function () { countUp(n); }, i * STAGGER);\r\n      });\r\n      \/\/ Safety net: whatever happens (tab hidden, rAF throttled), finish on the real values.\r\n      setTimeout(function () { nums.forEach(showFinal); }, DURATION + STAGGER * nums.length + 400);\r\n    }\r\n\r\n    if (reduce || inEditor || !('IntersectionObserver' in window) || !window.requestAnimationFrame) {\r\n      showAllFinal();                                        \/\/ final values at once: no count, no observer, no hidden state\r\n    } else {\r\n      section.classList.add('is-armed');                     \/\/ CSS hides rules until .is-in\r\n      nums.forEach(function (n) { n.textContent = '0' + suffixOf(n); });\r\n\r\n      var io = new IntersectionObserver(function (entries) {\r\n        var e = entries[0];\r\n        if (e.isIntersecting) {\r\n          io.disconnect();\r\n          start();\r\n        } else if (e.boundingClientRect.bottom < 0) {\r\n          io.disconnect();                                   \/\/ page reloaded below Impact\r\n          started = true;\r\n          showAllFinal();\r\n        }\r\n      }, { threshold: 0.2 });\r\n      io.observe(list);\r\n\r\n      \/\/ Never leave zeros on screen if the page is printed or restored from cache.\r\n      window.addEventListener('beforeprint', function () { started = true; showAllFinal(); });\r\n      window.addEventListener('pageshow', function (ev) { if (ev.persisted) { started = true; showAllFinal(); } });\r\n\r\n      \/\/ \"Reduce motion\" switched on while the page is open: jump to the final values immediately.\r\n      var mqReduce = window.matchMedia ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\r\n      function onReduce() { if (RESPECT_REDUCED_MOTION && mqReduce.matches) { io.disconnect(); started = true; showAllFinal(); } }\r\n      if (mqReduce) { if (mqReduce.addEventListener) mqReduce.addEventListener('change', onReduce); else if (mqReduce.addListener) mqReduce.addListener(onReduce); }\r\n    }\r\n\r\n    \/* ---------- 2. Focus mode: one active stat at a time ---------- *\/\r\n    var finePointer = mq('(hover: hover) and (pointer: fine)');\r\n    var current = -1;\r\n\r\n    function setActive(index) {\r\n      if (index === current) return;\r\n      current = index;\r\n      list.classList.toggle('has-active', index > -1);\r\n      stats.forEach(function (s, k) {\r\n        var on = k === index;\r\n        s.classList.toggle('is-active', on);\r\n        var b = s.querySelector('.yeng-about-page__stat-btn');\r\n        if (b) b.setAttribute('aria-expanded', on ? 'true' : 'false');\r\n      });\r\n    }\r\n    function keyboardFocus(el) {\r\n      try { return el.matches(':focus-visible'); } catch (err) { return true; }\r\n    }\r\n\r\n    stats.forEach(function (s, i) {\r\n      var btn = s.querySelector('.yeng-about-page__stat-btn');\r\n      if (!btn) return;\r\n      if (finePointer) s.addEventListener('mouseenter', function () { setActive(i); });\r\n      btn.addEventListener('focus', function () { if (keyboardFocus(btn)) setActive(i); });\r\n      btn.addEventListener('blur',  function () {\r\n        if (current === i && !(finePointer && s.matches(':hover'))) setActive(-1);\r\n      });\r\n      btn.addEventListener('click', function () {\r\n        if (finePointer) return;                             \/\/ mouse uses hover\r\n        setActive(current === i ? -1 : i);                   \/\/ tap toggles\r\n      });\r\n    });\r\n\r\n    if (finePointer) list.addEventListener('mouseleave', function () {\r\n      if (!list.contains(document.activeElement) || !keyboardFocus(document.activeElement)) setActive(-1);\r\n    });\r\n    document.addEventListener('click', function (e) {\r\n      if (!finePointer && current > -1 && !list.contains(e.target)) setActive(-1);\r\n    });\r\n    document.addEventListener('keydown', function (e) {\r\n      if (e.key === 'Escape' && current > -1) setActive(-1);\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\r\n  else init();\r\n})();\r\n<\/script>\r\n\r\n<script>\r\n(function () {\r\n  var d = document.querySelector('[data-yap-diagram]');\r\n  if (!d || d.getAttribute('data-yap-all') === '1') return;   \/\/ run once\r\n  d.setAttribute('data-yap-all', '1');\r\n  if (!(window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches)) return;\r\n\r\n  var source = d.querySelector('.yeng-about-page__source');\r\n\r\n  function lightAll(on) {\r\n    d.classList.toggle('is-all', on);\r\n    \/\/ Paths are redrawn on resize, so look them up each time\r\n    d.querySelectorAll('.yap-line-active').forEach(function (p, i) {\r\n      p.style.setProperty('--i', i);\r\n      p.classList.toggle('is-on', on);\r\n    });\r\n    d.querySelectorAll('.yap-head').forEach(function (h, i) {\r\n      h.style.setProperty('--i', i);\r\n      h.classList.toggle('is-on', on);\r\n    });\r\n  }\r\n\r\n  source.addEventListener('mouseenter', function () { lightAll(true); });\r\n  source.addEventListener('mouseleave', function () { lightAll(false); });\r\n})();\r\n<\/script>\r\n\r\n<script>\r\n(function () {\r\n  var fig = document.querySelector('[data-yeng-media-focus]');\r\n  if (!fig || fig.getAttribute('data-yeng-media-ready') === '1') return;   \/\/ run once\r\n  fig.setAttribute('data-yeng-media-ready', '1');\r\n\r\n  var trigger = fig.querySelector('.yeng-media-focus__trigger');\r\n  var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n  var DURATION = reduceMotion ? 20 : 560;\r\n  var backdrop = null, stage = null, open = false, busy = false;\r\n\r\n  function source() { return trigger.querySelector('img'); }   \/\/ missing while the placeholder is shown\r\n\r\n  \/* Where the photo should sit when focused: centred, full photo visible *\/\r\n  function targetRect(img) {\r\n    var vw = document.documentElement.clientWidth, vh = window.innerHeight;\r\n    var mobile = vw <= 767;\r\n    var maxW = mobile ? vw * 0.92 : Math.min(vw * 0.82, 1500);\r\n    var maxH = vh * (mobile ? 0.7 : 0.78);\r\n    var ratio = (img.naturalWidth && img.naturalHeight) ? img.naturalWidth \/ img.naturalHeight : 16 \/ 9;\r\n    var w = maxW, h = w \/ ratio;\r\n    if (h > maxH) { h = maxH; w = h * ratio; }\r\n    return { left: (vw - w) \/ 2, top: (vh - h) \/ 2 - (mobile ? 0 : 12), width: w, height: h };\r\n  }\r\n\r\n  function place(rect) {\r\n    stage.style.left = rect.left + 'px';\r\n    stage.style.top = rect.top + 'px';\r\n    stage.style.width = rect.width + 'px';\r\n    stage.style.height = rect.height + 'px';\r\n  }\r\n\r\n  function inView(r) {\r\n    return r.bottom > 0 && r.top < window.innerHeight && r.right > 0 && r.left < window.innerWidth;\r\n  }\r\n\r\n  function openFocus() {\r\n    var img = source();\r\n    if (open || busy || !img) return;\r\n    open = true; busy = true;\r\n\r\n    backdrop = document.createElement('div');\r\n    backdrop.className = 'yeng-media-focus__backdrop';\r\n    backdrop.setAttribute('aria-hidden', 'true');\r\n\r\n    stage = document.createElement('figure');\r\n    stage.className = 'yeng-media-focus__stage is-instant';\r\n    stage.setAttribute('aria-hidden', 'true');                  \/\/ visual copy; the real image stays in the page\r\n    \/\/ Built with createElement (no HTML strings inside the script, so WordPress\/plugins can't cut it)\r\n    var media = document.createElement('div');\r\n    media.className = 'yeng-media-focus__media';\r\n    var copy = document.createElement('img');\r\n    copy.className = 'yeng-media-focus__image';\r\n    copy.alt = '';\r\n    copy.src = img.currentSrc || img.src;\r\n    media.appendChild(copy);\r\n    var cap = document.createElement('figcaption');\r\n    cap.className = 'yeng-media-focus__caption';\r\n    var tag = fig.querySelector('.yeng-about-page__caption-text');\r\n    cap.textContent = 'YEnG \\u2014 ' + (tag ? tag.textContent.trim() : 'Inside YEnG');\r\n    stage.appendChild(media);\r\n    stage.appendChild(cap);\r\n\r\n    document.body.appendChild(backdrop);\r\n    document.body.appendChild(stage);\r\n\r\n    place(trigger.getBoundingClientRect());                     \/\/ start exactly on top of the page photo\r\n    stage.getBoundingClientRect();                              \/\/ commit the start position\r\n    stage.classList.remove('is-instant');\r\n\r\n    requestAnimationFrame(function () {\r\n      backdrop.classList.add('is-visible');\r\n      stage.classList.add('is-open');\r\n      place(targetRect(img));\r\n    });\r\n\r\n    trigger.setAttribute('aria-expanded', 'true');\r\n    document.documentElement.classList.add('is-media-focus-open');\r\n    backdrop.addEventListener('click', closeFocus);\r\n    stage.addEventListener('click', closeFocus);\r\n    setTimeout(function () { busy = false; }, DURATION);\r\n  }\r\n\r\n  function closeFocus() {\r\n    if (!open || busy) return;\r\n    open = false; busy = true;\r\n    var b = backdrop, s = stage;\r\n\r\n    var home = trigger.getBoundingClientRect();\r\n    s.classList.remove('is-open');\r\n    if (inView(home)) {\r\n      place(home);                                              \/\/ glide back into the page photo\r\n    } else {\r\n      s.classList.add('is-fading');                             \/\/ page photo has scrolled away: fade out in place\r\n    }\r\n    b.classList.remove('is-visible');\r\n\r\n    trigger.setAttribute('aria-expanded', 'false');\r\n    document.documentElement.classList.remove('is-media-focus-open');\r\n\r\n    setTimeout(function () {\r\n      if (b && b.parentNode) b.parentNode.removeChild(b);\r\n      if (s && s.parentNode) s.parentNode.removeChild(s);\r\n      busy = false;\r\n    }, DURATION + 40);\r\n    backdrop = null; stage = null;\r\n  }\r\n\r\n  trigger.addEventListener('click', function () { open ? closeFocus() : openFocus(); });\r\n  document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && open) closeFocus(); });\r\n  window.addEventListener('resize', function () {\r\n    if (open && stage) { stage.classList.add('is-instant'); place(targetRect(source())); stage.getBoundingClientRect(); stage.classList.remove('is-instant'); }\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>One Program. A Lifetime Mindset. Free to join Free to join The full program is free for every selected participant. YEnG is a free entrepreneurship program for Romanian high school students built around practical learning. [ WHO IT\u2019S FOR ] Who we\u2019re looking for. You don\u2019t need a startup, a business plan or a polished [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2811","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/pages\/2811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/comments?post=2811"}],"version-history":[{"count":278,"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/pages\/2811\/revisions"}],"predecessor-version":[{"id":3368,"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/pages\/2811\/revisions\/3368"}],"wp:attachment":[{"href":"https:\/\/yeng.ro\/en\/wp-json\/wp\/v2\/media?parent=2811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}