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:20260105T190000
DTEND;TZID=Europe/Kyiv:20260105T194500
DTSTAMP:20251231T093730Z
CREATED:20251230T155005Z
LAST-MODIFIED:20251231T093730Z
UID:10000084-1767639600-1767642300@www.edling.com.ua
SUMMARY:Галактика ґаджетів. ⭐Безкоштовний урок.
DESCRIPTION:Галактика ґаджетів. Про що:  Знайомство з сучасними гаджетами і технологіями. Що будемо робити: Вивчатимемо лексику на тему гаджетів\, грати у «Real or Fake Gadget»\, обговорювати найсмішніші та найкрутіші гаджети і…  \n\n\nПотрібне членство\n\n Ви повинні бути членом\, щоб отримати доступ до цього контенту. \nПереглянути рівні членства Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/galaktyka-gadzhetiv-bezkoshtovno/
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2025/12/tec-tech-galaxy-of-gadgets-lesson-1-8-9.jpg
LOCATION:https://us05web.zoom.us/j/88341137045?pwd=OEUZiWFEujwEjTtHa6kNr7ZpKpciWI.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260105T190000
DTEND;TZID=Europe/Kyiv:20260105T194500
DTSTAMP:20260102T083159Z
CREATED:20260102T083159Z
LAST-MODIFIED:20260102T083159Z
UID:10000092-1767639600-1767642300@www.edling.com.ua
SUMMARY:Старт героя. ⭐Безкоштовний урок.
DESCRIPTION:Про що: Про суперсили\, героїв\, думки про персонажів і їх можливості. Що будемо робити: говорити про реальних і вигаданих героїв\, описувати відомих персонажів\, обговорювати суперсили через ігри\, історії та короткі дискусії….  \n\n\nПотрібне членство\n\n Ви повинні бути членом\, щоб отримати доступ до цього контенту. \nПереглянути рівні членства Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/start-geroya-bezkoshtovnyj-urok/
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2025/12/tec-heroes-superpowers-lesson-1-10-12.jpg
LOCATION:https://us05web.zoom.us/j/84294633514?pwd=oWms3S6rP1i0JSeDzPk0wTQf9i24R0.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260112T190000
DTEND;TZID=Europe/Kyiv:20260112T194500
DTSTAMP:20260103T085703Z
CREATED:20260103T085703Z
LAST-MODIFIED:20260103T085703Z
UID:10000093-1768244400-1768247100@www.edling.com.ua
SUMMARY:Емоції в музиці. ⭐Безкоштовний урок.
DESCRIPTION:Про що: Емоції в музичних мелодіях і піснях. Що будемо робити: Слухатимемо короткі мелодії та пісні\, визначатимемо\, які емоції вони викликають\, показуватимемо їх рухом або жестами\, повторюватимемо прості англійські слова…  \n\n\nПотрібне членство\n\n Ви повинні бути членом\, щоб отримати доступ до цього контенту. \nПереглянути рівні членства Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/emotsiyi-v-muzytsi-bezkoshtovnyj-urok/
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2026/01/tec-emotions-in-music-8-9.jpg
LOCATION:https://us05web.zoom.us/j/89515429164?pwd=qsqSOkbvG6ydKJPk4PGtH66QiMajJe.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260112T190000
DTEND;TZID=Europe/Kyiv:20260112T194500
DTSTAMP:20260111T132516Z
CREATED:20260103T132621Z
LAST-MODIFIED:20260111T132516Z
UID:10000096-1768244400-1768247100@www.edling.com.ua
SUMMARY:Дослідники космосу. ⭐Безкоштовний урок.
DESCRIPTION:Про що: про різні планети\, їхні особливості та цікаві факти. Що будемо робити: Поринемо в тему космосу та планет\, обговоримо різні планети та факти про них. Чого навчимося: Називати та…  \n\n\nПотрібне членство\n\n Ви повинні бути членом\, щоб отримати доступ до цього контенту. \nПереглянути рівні членства Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/doslidnyky-kosmosu-bezkoshtovnyj-urok/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2025/12/tec-space-planets-lesson-1-10-12.jpg
LOCATION:https://us05web.zoom.us/j/86757439805?pwd=QjQt7unrI1jpde9WeoYU3LZbeFyREV.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260119T170000
DTEND;TZID=Europe/Kyiv:20260119T174500
DTSTAMP:20260116T153507Z
CREATED:20260110T160307Z
LAST-MODIFIED:20260116T153507Z
UID:10000104-1768842000-1768844700@www.edling.com.ua
SUMMARY:Початок розслідування. ⭐Безкоштовний урок.
DESCRIPTION:Про що: Легке та цікаве знайомство з темою детективів. Занурення в атмосферу розслідувань\, діти дізнаються більше про відомих детективів та починають говорити англійською про цю тему. Що будемо робити:  Дізнаватися…  \n\n\nПотрібне членство\n\n Ви повинні бути членом\, щоб отримати доступ до цього контенту. \nПереглянути рівні членства Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/pochatok-rozsliduvannya-bezkoshtovnyj-urok/
CATEGORIES:Школярі
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2025/12/tec-detective-clue-hunter-10-12.jpg
LOCATION:https://us05web.zoom.us/j/82961518975?pwd=PkRiyqXF9ga4FabKj4g0nGf0O5x5ze.1
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Europe/Kyiv:20260119T190000
DTEND;TZID=Europe/Kyiv:20260119T194500
DTSTAMP:20260112T190040Z
CREATED:20260110T153924Z
LAST-MODIFIED:20260112T190040Z
UID:10000101-1768849200-1768851900@www.edling.com.ua
SUMMARY:Магія науки. ⭐Безкоштовний урок.
DESCRIPTION:Про що: Експерименти та цікаві наукові секрети нашого світу. Що будемо робити: Описувати явища англійською\, обговорюють різні цікаві експерименти\, грають в інтерактивні ігри та проводять власні  досліди. Чого навчимося: Вміння говорити…  \n\n\nПотрібне членство\n\n Ви повинні бути членом\, щоб отримати доступ до цього контенту. \nПереглянути рівні членства Увійти \n\nAlready a member? Увійдіть тут
URL:https://www.edling.com.ua/event/magiya-nauky-bezkoshtovnyj-urok/
ATTACH;FMTTYPE=image/jpeg:https://www.edling.com.ua/wp-content/uploads/2025/12/tec-science-magic-of-science-lesson-1-8-9.jpg
LOCATION:https://us05web.zoom.us/j/86306986038?pwd=Zzx92djbfupiytHrubO23ilr50d4wZ.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>
