BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Школа Edling - ECPv6.16.5.1//NONSGML v1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Школа Edling
X-ORIGINAL-URL:https://www.edling.com.ua
X-WR-CALDESC:Події за Школа Edling
REFRESH-INTERVAL;VALUE=DURATION:PT1H
X-Robots-Tag:noindex
X-PUBLISHED-TTL:PT1H
BEGIN:VTIMEZONE
TZID:Europe/Kyiv
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:20250330T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:20251026T010000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:20260329T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:20261025T010000
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:20270328T010000
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:20271031T010000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260708T200000
DTEND;TZID=Europe/Kyiv:20260708T204500
DTSTAMP:20260617T081048Z
CREATED:20260617T081048Z
LAST-MODIFIED:20260617T081048Z
UID:10000807-1783540800-1783543500@www.edling.com.ua
SUMMARY:🤖 Tech in My Life / Технології в моєму житті. 🎟️Урок за підпискою.
DESCRIPTION:Урок 17. Про що: Де і як ми використовуємо технології щодня. Що будемо робити: Ділитися прикладами з життя\, обговорювати улюблені гаджети\, гра «Мій гаджет-герой». Чого навчимося: Говорити про технології простими словами\, описувати власний досвід. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/tech-in-my-life-tehnologiyi-v-moyemu-zhytti-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/17.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/83241426274?pwd=if91vnoQBUv0qnqEaHX7n1CMFZFK89.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260710T200000
DTEND;TZID=Europe/Kyiv:20260710T204500
DTSTAMP:20260617T081221Z
CREATED:20260617T081221Z
LAST-MODIFIED:20260617T081221Z
UID:10000808-1783713600-1783716300@www.edling.com.ua
SUMMARY:💼 Jobs I Know / Професії\, які я знаю. 🎟️Урок за підпискою.
DESCRIPTION:Урок 18. Про що: Відомі та знайомі професії. Що будемо робити: Називати професії\, обговорювати\, чим займаються люди\, гра «Хто я за професією?» Чого навчимося: Говорити про роботу простими словами\, описувати професійні обов’язки. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/jobs-i-know-profesiyi-yaki-ya-znayu-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/18.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/84934509681?pwd=g5ihkm2QSaBV1aA2ahcppfGS8SdAXy.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260713T200000
DTEND;TZID=Europe/Kyiv:20260713T204500
DTSTAMP:20260624T115347Z
CREATED:20260617T080242Z
LAST-MODIFIED:20260624T115347Z
UID:10000803-1783972800-1783975500@www.edling.com.ua
SUMMARY:Blast Off: Meet Yourself / Злітаємо: знайомство з собою. ⭐Безкоштовний урок.
DESCRIPTION:Урок 1. Про що: Перший крок у світі англійської — знайомство та презентація себе. Що будемо робити: Грати у веселі інтерактивні вправи на знайомство\, розповідати про себе\, дізнаватися про однокласників\, ставити запитання. Чого навчимося: Починати говорити англійською впевнено\, легко презентувати себе\, заводити перші знайомства. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/blast-off-meet-yourself-zlitayemo-znajomstvo-z-soboyu-bezkoshtovnyj-urok-5/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/01/blast-off-meet-yourself-tec-11-16.jpg
LOCATION:https://us05web.zoom.us/j/82736742217?pwd=HKPpzExLbNJ4JlJeIz57q9IoR3Qlck.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260715T200000
DTEND;TZID=Europe/Kyiv:20260715T204500
DTSTAMP:20260627T104046Z
CREATED:20260617T081344Z
LAST-MODIFIED:20260627T104046Z
UID:10000809-1784145600-1784148300@www.edling.com.ua
SUMMARY:🤝 Team or Solo? / Команда чи сам? 🎟️Урок за підпискою.
DESCRIPTION:Урок 19. Про що: Робота разом чи наодинці. Що будемо робити: Ділитися досвідом командної роботи\, обговорювати плюси і мінуси. Чого навчимося: Говорити про співпрацю\, аналізувати командну взаємодію. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/team-or-solo-komanda-chy-sam-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/19.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/84743248977?pwd=nNKoj8rmmHvDqD2HIJKa5TtQBzW0tY.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260717T200000
DTEND;TZID=Europe/Kyiv:20260717T204500
DTSTAMP:20260627T104112Z
CREATED:20260617T081500Z
LAST-MODIFIED:20260627T104112Z
UID:10000810-1784318400-1784321100@www.edling.com.ua
SUMMARY:😬 What I’m Afraid Of / Чого я боюся. 🎟️Урок за підпискою.
DESCRIPTION:Урок 20. Про що: Страхи підлітків. Що будемо робити: Ділитися страхами у безпечній атмосфері\, гра «Мій страх — моя історія». Чого навчимося: Говорити про почуття\, впевнено описувати власні переживання. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/what-i-m-afraid-of-chogo-ya-boyusya-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/20.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/83599837170?pwd=bbnB3BB6rviPBl6LN3zfjAJRakIjrV.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260720T200000
DTEND;TZID=Europe/Kyiv:20260720T204500
DTSTAMP:20260624T115630Z
CREATED:20260617T080530Z
LAST-MODIFIED:20260624T115630Z
UID:10000804-1784577600-1784580300@www.edling.com.ua
SUMMARY:☀️ Teen’s Day / День підлітка. ⭐Безкоштовний урок.
DESCRIPTION:Урок 2. Про що: Розповідаємо про свій звичайний день. Що будемо робити: Описувати свій день у коротких інтерактивних вправах\, дізнаватися про життя однокласників\, робити швидкі «мінідіалоги». Чого навчимося: Говорити про щоденні дії англійською\, формувати базові речення для опису дня. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/teen-s-day-den-pidlitka-bezkoshtovnyj-urok-5/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/01/tec-teens-day-real-life-11-16.jpg
LOCATION:https://us05web.zoom.us/j/87616841732?pwd=D4kmJmualEZaPRVwpMPr6tyfo9OQ5g.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260722T200000
DTEND;TZID=Europe/Kyiv:20260722T204500
DTSTAMP:20260627T104149Z
CREATED:20260617T081611Z
LAST-MODIFIED:20260627T104149Z
UID:10000811-1784750400-1784753100@www.edling.com.ua
SUMMARY:💬 My Opinion Matters / Моя думка важлива. 🎟️Урок за підпискою.
DESCRIPTION:Урок 21. Про що: Особиста думка без страху помилок. Що будемо робити: Висловлювати думку в простих темах\, гра «Моя точка зору». Чого навчимося: Починати аргументовано висловлювати свою позицію англійською. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/my-opinion-matters-moya-dumka-vazhlyva-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/21.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/88195821285?pwd=V5WChT4AaWMkXwOb8rWcS6AF8sp9rE.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260724T200000
DTEND;TZID=Europe/Kyiv:20260724T204500
DTSTAMP:20260627T104211Z
CREATED:20260617T081721Z
LAST-MODIFIED:20260627T104211Z
UID:10000812-1784923200-1784925900@www.edling.com.ua
SUMMARY:💡 Crazy Ideas / Божевільні ідеї. 🎟️Урок за підпискою.
DESCRIPTION:Урок 22. Про що: Ідеї без обмежень. Що будемо робити: Придумувати незвичні ідеї та ділитися ними\, гра «Що якби…?» Чого навчимося: Говорити спонтанно\, розвивати креативність. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/crazy-ideas-bozhevilni-ideyi-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/22.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/89027943075?pwd=i3NemHjLIbdD3cIBxae2IlkmoXjVSs.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260727T200000
DTEND;TZID=Europe/Kyiv:20260727T204500
DTSTAMP:20260624T115730Z
CREATED:20260617T080721Z
LAST-MODIFIED:20260624T115730Z
UID:10000805-1785182400-1785185100@www.edling.com.ua
SUMMARY:🌟 My Crew / Моя команда. ⭐Безкоштовний урок.
DESCRIPTION:Урок 3. Про що: Люди\, які поруч і роблять життя цікавішим. Що будемо робити: Розповідати про друзів і знайомих\, робити інтерактивні вправи на опис персонажів\, дізнаватися про друзів однокласників. Чого навчимося: Впевнено говорити про інших людей\, описувати характер та вподобання друзів. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/my-crew-moya-komanda-bezkoshtovnyj-urok-5/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/01/tec_11-16_my-crew_real.jpg
LOCATION:https://us05web.zoom.us/j/86322721236?pwd=sJyaYBKtxZnvxzw8Ga0No02L1E2yvN.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260729T200000
DTEND;TZID=Europe/Kyiv:20260729T204500
DTSTAMP:20260627T104242Z
CREATED:20260617T081825Z
LAST-MODIFIED:20260627T104242Z
UID:10000813-1785355200-1785357900@www.edling.com.ua
SUMMARY:🌍 My Life in 10 Years / Я через 10 років. 🎟️Урок за підпискою.
DESCRIPTION:Урок 23. Про що: Уявлення про майбутнє. Що будемо робити: Описувати своє життя через 10 років\, гра «Моя майбутня історія». Чого навчимося: Говорити про плани і мрії\, уявляти майбутнє англійською. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/my-life-in-10-years-ya-cherez-10-rokiv-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/23.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/82110689625?pwd=vUKBQfhua04bz7UABkmjwv9caiZVGl.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260731T200000
DTEND;TZID=Europe/Kyiv:20260731T204500
DTSTAMP:20260627T121332Z
CREATED:20260617T081925Z
LAST-MODIFIED:20260627T121332Z
UID:10000814-1785528000-1785530700@www.edling.com.ua
SUMMARY:🐾 Animals Around Us / Тварини навколо нас. 🎟️Урок за підпискою.
DESCRIPTION:Урок 24. Про що: Які тварини нас оточують і яку роль вони відіграють у житті людей. Що будемо робити: Обговорювати улюблених тварин\, порівнювати домашніх і диких\, ділитися історіями. Чого навчимося: Описувати тварин\, їх поведінку та взаємодію з людьми англійською. 🎧 Пройдіть короткий self-prep урок\, щоб впевненіше говорити на цьому занятті:…  \n\n\nПотрібне членство Безкоштовно\n\n Ви повинні бути членом Безкоштовно\, щоб отримати доступ до цього контенту. \nПриєднуйся зараз Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/animals-around-us-tvaryny-navkolo-nas-urok-za-pidpyskoyu/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/03/24.1-11-16.jpg
LOCATION:https://us05web.zoom.us/j/88969927638?pwd=f6RQkeWUUiuBq2fopMktGQbuI6eVu0.1
END:VEVENT
END:VCALENDAR
<script id="edla-tracker-inline" data-no-optimize="1" data-no-defer="1" data-no-async="1">window.EDLA_CFG={"endpoint":"https:\/\/www.edling.com.ua\/wp-json\/edling-analytics\/v1\/event","vidCookie":"edl_vid"};
(function () {
    'use strict';

    var CFG = window.EDLA_CFG || {};
    if ( ! CFG.endpoint ) return;

    var VID = CFG.vidCookie || 'edl_vid';

    function getCookie( name ) {
        var safe = name.replace( /[$()*+?.\\^|]/g, '\\$&' );
        var m = document.cookie.match( new RegExp( '(?:^|; )' + safe + '=([^;]*)' ) );
        return m ? decodeURIComponent( m[ 1 ] ) : '';
    }

    function setCookie( name, value, days ) {
        var expires = new Date( Date.now() + days * 86400000 ).toUTCString();
        document.cookie = name + '=' + encodeURIComponent( value ) +
            '; expires=' + expires + '; path=/; SameSite=Lax';
    }

    function uuid() {
        if ( window.crypto && crypto.randomUUID ) {
            return crypto.randomUUID();
        }
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace( /[xy]/g, function ( c ) {
            var r = Math.random() * 16 | 0;
            var v = c === 'x' ? r : ( r & 0x3 | 0x8 );
            return v.toString( 16 );
        } );
    }

    function visitorId() {
        var v = getCookie( VID );
        if ( ! v ) {
            v = uuid();
            setCookie( VID, v, 365 );
        }
        return v;
    }

    function currentUtm() {
        try {
            if ( window.EdlingUTM && typeof EdlingUTM.all === 'function' ) {
                return EdlingUTM.all();
            }
        } catch ( e ) {}
        return {};
    }

    function send( event, props ) {
        if ( ! event ) return;
        var body = JSON.stringify( {
            event: event,
            vid:   visitorId(),
            props: props || {},
            utm:   currentUtm(),
            url:   location.pathname
        } );
        try {
            if ( navigator.sendBeacon ) {
                var blob = new Blob( [ body ], { type: 'application/json' } );
                if ( navigator.sendBeacon( CFG.endpoint, blob ) ) return;
            }
        } catch ( e ) {}
        try {
            fetch( CFG.endpoint, {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: body,
                keepalive: true,
                credentials: 'same-origin'
            } ).catch( function () {} );
        } catch ( e ) {}
    }

    // Публічне API для подальших продуктових подій.
    window.EdlaTrack = send;

    // visit — один раз на сесію (щоб не дублювати на кожній сторінці).
    try {
        if ( ! sessionStorage.getItem( 'edla_visit' ) ) {
            sessionStorage.setItem( 'edla_visit', '1' );
            send( 'visit', {} );
        }
    } catch ( e ) {
        send( 'visit', {} );
    }
})();</script>

<!-- EDL_TTS_MARKER_HEAD -->

<style>
/* ===== Edling TTS Minimal UI ===== */

/* Force tight spacing even if LMS/theme adds margins */
.edl-phrase,
.edl-ua{
  display:block !important;
  margin:0 !important;
  padding:0 !important;
  line-height:1.35 !important;
}

/* EN line */
.edl-phrase{
  display:flex !important;
  align-items:center !important;
  gap:8px !important;
  font-size:18px !important;
}

/* Make UA sit close to EN */
.edl-phrase + .edl-ua{
  margin-top:2px !important;      /* EN -> UA */
  padding-left:10px !important;
  border-left:2px solid #e5e7eb !important;
}

/* Space between pairs (UA -> next EN) */
.edl-ua + .edl-phrase{
  margin-top:16px !important;     /* between pairs */
}

/* EN text */
.edl-text{
  line-height:1.35 !important;
}

/* Button */
.edl-tts{
  font-size:18px !important;
  text-decoration:none !important;
  cursor:pointer !important;
  user-select:none !important;
}

.edl-tts:hover{
  opacity:0.8 !important;
}

/* UA style */
.edl-ua{
  font-size:14px !important;
  color:#6b7280 !important;
}
</style>

<script>
(function () {
  if (window.__EDL_TTS_INIT__) return;
  window.__EDL_TTS_INIT__ = true;

  if (!('speechSynthesis' in window) || !('SpeechSynthesisUtterance' in window)) {
    console.warn('[EDL TTS] Not supported');
    return;
  }

  // Remove emojis / pictographs / flags / variation-selectors so TTS doesn't read them aloud.
  // Uses numeric code-point checks (no \u{} escapes — those get mangled inside PHP heredoc).
  function stripEmoji(s) {
    try {
      var str = String(s);
      var out = '';
      for (var i = 0; i < str.length;) {
        var cp = str.codePointAt(i);
        var size = cp > 0xFFFF ? 2 : 1;
        var isEmoji =
          (cp >= 0x1F000 && cp <= 0x1FAFF) ||  // emoji & pictographs
          (cp >= 0x2600  && cp <= 0x27BF)  ||  // misc symbols & dingbats
          (cp >= 0x2190  && cp <= 0x21FF)  ||  // arrows
          (cp >= 0x2B00  && cp <= 0x2BFF)  ||  // misc symbols/arrows
          (cp >= 0x1F1E6 && cp <= 0x1F1FF) ||  // regional indicators (flags)
          cp === 0xFE0F  ||                     // variation selector-16
          cp === 0x200D;                        // zero-width joiner
        if (!isEmoji) out += String.fromCodePoint(cp);
        i += size;
      }
      return out.replace(/\s+/g, ' ').trim();
    } catch (e) {
      return String(s);
    }
  }

  function speak(text, rate) {
    try {
      text = stripEmoji(text);
      if (!text) return;
      window.speechSynthesis.cancel();
      var u = new SpeechSynthesisUtterance(text);
      u.lang = 'en-US';
      u.rate = (typeof rate === 'number' && !isNaN(rate)) ? rate : 0.9;
      u.pitch = 1.0;
      u.volume = 1.0;
      setTimeout(function () {
        window.speechSynthesis.speak(u);
      }, 0);
    } catch (e) {
      console.warn('[EDL TTS] error', e);
    }
  }

  document.addEventListener('click', function (e) {
    var target = e.target;
    if (!target || !target.closest) return;

    // 1) Speak-links: href="#tts=<encoded>&r=<rate>" — survive sanitized community feeds
    //    (class/data-* get stripped by wp_kses, but <a href> is whitelisted).
    var link = target.closest('a[href*="#tts="]');
    if (link) {
      var raw = link.getAttribute('href') || link.href || '';
      var hashIdx = raw.indexOf('#tts=');
      if (hashIdx !== -1) {
        e.preventDefault();
        e.stopPropagation();
        try {
          var params = new URLSearchParams(raw.slice(hashIdx + 1));
          var t = (params.get('tts') || '').trim();
          var r = params.get('r') ? Number(params.get('r')) : undefined;
          if (t) speak(t, r);
        } catch (err) {
          console.warn('[EDL TTS] href parse error', err);
        }
        return;
      }
    }

    // 2) Explicit .edl-tts elements (lessons) — original behaviour
    var el = target.closest('.edl-tts');
    if (!el) return;

    if (el.tagName === 'A') e.preventDefault();

    var text = (el.getAttribute('data-text') || '').trim();
    if (!text) return;

    var rateAttr = el.getAttribute('data-rate');
    var rate = rateAttr ? Number(rateAttr) : undefined;

    speak(text, rate);
  }, true);

  console.log('[EDL TTS] ready');
})();
</script>
