{"id":2684,"date":"2026-10-28T10:23:35","date_gmt":"2026-10-28T08:23:35","guid":{"rendered":"https:\/\/skinarttraining.com\/za\/?page_id=2684"},"modified":"2026-10-28T10:23:35","modified_gmt":"2026-10-28T08:23:35","slug":"certificates-and-accreditation","status":"publish","type":"page","link":"https:\/\/skinarttraining.com\/za\/faq-videos\/certificates-and-accreditation\/","title":{"rendered":"Skinart certificates and course completion"},"content":{"rendered":"<style id=\"skinart-video-guides-css\">.sat-video-guides{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:24px;margin:28px 0 42px}.sat-video-guides__card{display:flex;flex-direction:column;overflow:hidden;border:1px solid #665b43;border-radius:12px;background:#20251f;color:#f4f0e7!important;text-decoration:none!important}.sat-video-guides__card:hover,.sat-video-guides__card:focus-visible{border-color:#d0b174;outline:2px solid #d0b174;outline-offset:3px}.sat-video-guides__card img{display:block;width:100%;height:auto;aspect-ratio:16\/9;object-fit:cover}.sat-video-guides__text{display:block;padding:18px}.sat-video-guides__text strong{display:block;font-size:1.1rem;line-height:1.35;color:#f4f0e7}.sat-video-guides__text small{display:block;margin-top:10px;color:#d0b174}.sat-video-watch{max-width:1040px;margin:0 auto}.sat-video-watch__summary{max-width:78ch;margin:28px 0 20px}.sat-video-watch__related{margin:36px 0}.sat-video-watch__related li{margin:10px 0}.sat-video-watch__current{border-left:3px solid #c8a56a;padding:12px 18px}<\/style><article class=\"sat-video-watch\">        <section class=\"cisvc cisvc--memory-cards cisvc--single-track cisvc--clean-controls cisvc--standalone\" id=\"cisvc_db595fe1-75f9-4b6d-b90c-5dd01fb0b44d\" data-base-url=\"https:\/\/skinarttraining.com\/za\/wp-content\/mu-plugins\/videos\/\" data-hls-local=\"https:\/\/skinarttraining.com\/za\/wp-content\/mu-plugins\/videos\/hls.min.js\" data-thumb-version=\"thumbs-20261027-3e56e9308db2\" data-media-version=\"skinart-faq-20261027-r1\" data-versioned-folders=\"[&quot;Skinart_What_is_the_accreditation&quot;,&quot;Skinart-how-long-does-thee-course-take&quot;,&quot;Skinart_how_does_the_tutor_service_work&quot;,&quot;Skinart_what_are_the_pre_requisites&quot;,&quot;Skinart-lesson-format-and-assignments&quot;,&quot;Skinart_what_payment_options_are_available&quot;,&quot;Skinart_will_this_course_help_me_get_employment&quot;,&quot;Skinart_How_do_Learn_the_practical_skills&quot;,&quot;Skinart-Training-Validation&quot;]\" data-labels=\"{&quot;notWatched&quot;:&quot;Not watched&quot;,&quot;watched&quot;:&quot;Watched&quot;,&quot;percent&quot;:&quot;% watched&quot;,&quot;resume&quot;:&quot;Resume at&quot;,&quot;play&quot;:&quot;Play&quot;,&quot;again&quot;:&quot;Watch again&quot;}\">\n            <div class=\"cisvc__viewport\" tabindex=\"0\" role=\"region\" aria-label=\"Video carousel\">\n                <div class=\"cisvc__track\" role=\"list\">\n                                            <div class=\"cisvc__slide\" data-index=\"0\" data-folder=\"Skinart_What_is_the_accreditation\" data-title=\"Course International Accreditation\" role=\"listitem\" aria-label=\"1 of 1: Course International Accreditation\">\n                            <div class=\"cisvc__card\">\n                                <div class=\"cisvc__media\">\n                                    <img class=\"cisvc__thumb no-lazyload skip-lazy\" src=\"https:\/\/skinarttraining.com\/za\/wp-content\/mu-plugins\/videos\/Skinart_What_is_the_accreditation.webp?v=thumbs-20261027-3e56e9308db2\" alt=\"Course International Accreditation\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" data-skip-lazy=\"1\">\n                                    <div class=\"cisvc__poster-copy\" aria-hidden=\"true\"><span>SKINART TRAINING<\/span><strong>Course International Accreditation<\/strong><\/div>\n                                    <div class=\"cisvc__player-mount\">                                        <video controls controlslist=\"nodownload\" playsinline preload=\"none\" poster=\"https:\/\/skinarttraining.com\/za\/wp-content\/mu-plugins\/videos\/Skinart_What_is_the_accreditation.webp?v=thumbs-20261027-3e56e9308db2\" aria-label=\"Course International Accreditation\"><source src=\"https:\/\/skinarttraining.com\/za\/wp-content\/mu-plugins\/videos\/Skinart_What_is_the_accreditation\/master480.m3u8?v=skinart-faq-20261027-r1\" type=\"application\/vnd.apple.mpegurl\"><\/video>\n                                    <\/div>\n                                    <button class=\"cisvc__play\" type=\"button\" aria-label=\"Play video\"><span class=\"cisvc__playIcon\" aria-hidden=\"true\"><\/span><\/button>\n                                <\/div>\n                                <div class=\"cisvc__caption\">\n                                    <div class=\"cisvc__summary\"><p class=\"cisvc__current-status\" data-watch-status>0% watched<\/p><div class=\"cisvc__progress-track\" aria-hidden=\"true\"><span data-watch-bar><\/span><\/div><\/div>\n                                <\/div>\n                                <a class=\"cisvc__watch-page cisvc__sr-only\" href=\"https:\/\/skinarttraining.com\/za\/faq-videos\/certificates-and-accreditation\/\">Course International Accreditation<\/a>                            <\/div>\n                        <\/div>\n                                    <\/div>\n            <\/div>\n            <div class=\"cisvc__controls\" role=\"group\" aria-label=\"Carousel navigation\">\n                <button type=\"button\" class=\"cisvc__nav\" data-action=\"prev\" aria-label=\"Previous slide\" hidden>&lt;<\/button>\n                <span class=\"cisvc__number\" data-current-number hidden>1 \/ 1<\/span>\n                <button type=\"button\" class=\"cisvc__nav\" data-action=\"next\" aria-label=\"Next slide\" hidden>&gt;<\/button>\n                <button type=\"button\" class=\"cisvc__quality\" data-action=\"quality\" aria-label=\"Toggle quality\">SD<\/button>\n\n            <div class=\"cisvc__langRow\" role=\"group\" aria-label=\"Language controls\">\n                <select class=\"cisvc__select cisvc__audio\" aria-label=\"Audio language\">\n                    <option value=\"-1\">Default Audio<\/option>\n                <\/select>\n                <select class=\"cisvc__select cisvc__subs\" aria-label=\"Subtitle language\">\n                    <option value=\"off\">Subtitles Off<\/option>\n                <\/select>\n            <\/div>\n\n            <\/div>\n        <\/section>\n                            <style id=\"cis-video-carousel-css\">\n.cisvc{--w:min(84vw,860px);--g:clamp(10px,1.8vw,18px);max-width:1200px;margin:24px auto;padding:clamp(10px,1.8vw,16px);border-radius:16px;background:#161616;border:1px solid #414141;box-shadow:0 18px 34px #0005;color:#f8f8f8;overflow:hidden}\n.cisvc__viewport{overflow:hidden;overflow:clip;border-radius:12px;background:#161616;touch-action:pan-y;user-select:none;cursor:grab;outline:none;overscroll-behavior:contain;-webkit-user-select:none;-webkit-touch-callout:none}\n.cisvc.is-focused .cisvc__viewport{cursor:default}.cisvc.is-dragging .cisvc__viewport,.cisvc.is-dragging .cisvc__play{cursor:grabbing!important}\n.cisvc__track{display:flex;flex-wrap:nowrap;align-items:stretch;gap:var(--g);background:#161616;transform:translate3d(0,0,0);transition:transform .42s cubic-bezier(.22,.78,.22,1);will-change:transform}\n.cisvc__slide{flex:0 0 var(--w);max-width:100%;background:#161616}\n.cisvc__card{height:100%;display:flex;flex-direction:column;position:relative;background:#161616;border:1px solid #494949;border-radius:12px;overflow:hidden;box-shadow:0 8px 22px #0004}\n.cisvc__media{width:100%;aspect-ratio:16\/9;flex:0 0 auto;background:#161616;position:relative}\n.cisvc__thumb{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;background:#161616;z-index:1;pointer-events:none}.cisvc__thumb.is-missing{display:none}\n.cisvc__player-mount{position:absolute;inset:0;z-index:2;width:100%;height:100%}.cisvc__player-mount video{width:100%;height:100%;display:block;opacity:1;filter:none;background:#111;object-fit:contain}\n.cisvc__poster-copy{position:absolute;inset:0;z-index:3;pointer-events:none;display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;padding:7% 5%;background:linear-gradient(90deg,#111c,#1114 48%,transparent 74%)}\n.cisvc__poster-copy span{font-size:clamp(9px,1vw,12px);font-weight:650;letter-spacing:.15em;color:#e4e4e4;margin-bottom:12px}.cisvc__poster-copy strong{display:block;max-width:48%;font-size:clamp(25px,3.1vw,40px);font-weight:600;letter-spacing:-.025em;line-height:1.12;text-align:left;text-wrap:balance;color:#fff;text-shadow:0 2px 12px #0008}\n\/* These rules only override theme buttons inside this carousel. *\/\n.cisvc.cisvc--clean-controls button:is(.cisvc__play,.cisvc__nav,.cisvc__quality){appearance:none!important;-webkit-appearance:none!important;margin:0!important;font-family:inherit!important;font-weight:500!important;letter-spacing:normal!important;text-transform:none!important;color:#fff!important;box-shadow:none!important;background-image:none!important;cursor:pointer}\n.cisvc.cisvc--clean-controls button.cisvc__play{position:absolute!important;inset:0!important;z-index:4;width:100%!important;height:100%!important;min-height:0!important;min-width:0!important;max-width:none!important;max-height:none!important;transform:none!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;display:block!important}\n.cisvc.cisvc--clean-controls button.cisvc__play:hover,.cisvc.cisvc--clean-controls button.cisvc__play:active,.cisvc.cisvc--clean-controls button.cisvc__play:focus{background:transparent!important;color:#fff!important}\n.cisvc__playIcon{position:absolute;left:13%;top:28%;transform:translate(-50%,-50%);width:clamp(74px,12vw,100px);height:clamp(46px,7vw,60px);display:flex;align-items:center;justify-content:center;border:1px solid #a5a5a5;border-radius:10px;background:#111d;pointer-events:none}\n.cisvc__playIcon::after{content:\"\";display:block;width:0;height:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-left:16px solid #fff;position:relative;left:2px}\n.cisvc.cisvc--clean-controls button.cisvc__play:hover .cisvc__playIcon{background:#333e;border-color:#fff}\n.cisvc.cisvc--clean-controls .cisvc__slide.has-video .cisvc__play,.cisvc .cisvc__slide.has-video .cisvc__poster-copy,.cisvc .cisvc__slide.has-video .cisvc__thumb,.cisvc.cisvc--single-track .cisvc__slide.has-video .cisvc__caption{display:none!important}\n.cisvc.cisvc--single-track .cisvc__caption{display:block;margin:0;padding:7px 12px 8px;min-height:0;color:#dedede;background:#202020}\n.cisvc__summary{display:flex;gap:12px;align-items:center;min-width:0}.cisvc__current-status{font-size:11px!important;line-height:1.4!important;margin:0!important;color:#dedede!important;font-variant-numeric:tabular-nums;white-space:nowrap}\n.cisvc__progress-track{height:2px;flex:1;background:#505050;margin:0;border-radius:2px;overflow:hidden}.cisvc__progress-track span{display:block;height:100%;width:0;background:#eee;transition:width .2s}\n.cisvc__controls{margin-top:10px;display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;background:#161616;opacity:.35;pointer-events:none}.cisvc.is-booted .cisvc__controls{opacity:1;pointer-events:auto}\n.cisvc.cisvc--clean-controls button:is(.cisvc__nav,.cisvc__quality){box-sizing:border-box!important;min-height:34px!important;min-width:34px!important;border-radius:7px!important;border:1px solid #656565!important;background:#222!important;font-size:13px!important;line-height:1.2!important;padding:6px 10px!important}\n.cisvc.cisvc--clean-controls button:is(.cisvc__nav,.cisvc__quality):hover,.cisvc.cisvc--clean-controls button:is(.cisvc__nav,.cisvc__quality):active{background:#3a3a3a!important;border-color:#aaa!important}.cisvc__number{font-size:12px;font-variant-numeric:tabular-nums;color:inherit;min-width:35px;text-align:center}\n.cisvc.cisvc--clean-controls .cisvc__select{box-sizing:border-box;height:34px!important;min-height:34px!important;border:1px solid #656565!important;background:#222!important;color:#fff!important;border-radius:7px!important;padding:0 24px 0 8px!important;font-family:inherit!important;font-size:12px!important;line-height:1.2!important;max-width:100%;margin:0!important}.cisvc__langRow{display:flex;justify-content:center;align-items:center;gap:8px;flex-wrap:wrap;margin:0;min-width:0}\n.cisvc .cisvc__audio,.cisvc .cisvc__subs{display:none}.cisvc.has-player .cisvc__audio,.cisvc.has-player .cisvc__subs{display:inline-block}.cisvc video::cue{color:#fff!important;background:rgba(0,0,0,.82)!important;text-shadow:0 1px 2px rgba(0,0,0,.95)!important;font-size:16px!important;font-family:sans-serif!important;line-height:normal!important;white-space:pre-line!important;overflow-wrap:break-word!important}\n@media(max-width:600px){.cisvc video::cue{font-size:13px!important}}\n.cisvc__banner{margin-bottom:8px;padding:8px 10px;border-radius:8px;border:1px solid #888;background:#333;color:#fff;font-size:12px;line-height:1.4}\n.cisvc.cisvc--clean-controls :is(button,select,a):focus-visible,.cisvc.cisvc--clean-controls .cisvc__viewport:focus-visible{outline:2px solid #fff!important;outline-offset:3px!important}.cisvc.cisvc--clean-controls button.cisvc__play:focus-visible{outline-offset:-4px!important}.cisvc [hidden]{display:none!important}\n.cisvc__sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.cisvc .cisvc__sr-only:focus{clip:auto!important;width:auto!important;height:auto!important;margin:0!important;left:8px;top:8px;z-index:5;padding:8px!important;background:#111!important;color:#fff!important}\n.cisvc--standalone{--w:100%;--g:0px}.cisvc--standalone .cisvc__viewport{cursor:default}\n@media(max-width:680px){.cisvc{--w:84vw;--g:10px;margin:14px auto;border-radius:14px}.cisvc--standalone{--w:100%;--g:0px}.cisvc__poster-copy{padding:6% 5%}.cisvc__poster-copy strong{max-width:49%;font-size:clamp(18px,4.3vw,27px)}.cisvc__poster-copy span{font-size:8px;margin-bottom:8px}.cisvc__playIcon{left:14%;top:25%;width:64px;height:43px}.cisvc.cisvc--single-track .cisvc__caption{padding:6px 9px 7px}.cisvc__current-status{font-size:10px!important}.cisvc__controls{gap:6px}.cisvc__langRow{gap:6px}}\n@media(prefers-reduced-motion:reduce){.cisvc__track,.cisvc__progress-track span{transition:none}}\n<\/style>\n        <script type=\"text\/javascript\" id=\"cis-video-carousel-js\" data-cfasync=\"false\">\n            (function(){\n                console.log('[cisvc] script loaded');\n                function A(x){return Array.prototype.slice.call(x||[])}function C(v,min,max){return Math.max(min,Math.min(max,v))}\n                function D(){try{return new URLSearchParams(window.location.search).get('cisvc_debug')==='1'}catch(e){return false}}\n                var DEBUG_GLOBAL=D();\n                function B(root,msg){if(!DEBUG_GLOBAL||!root)return;var n=root.querySelector('.cisvc__banner');if(!n){n=document.createElement('div');n.className='cisvc__banner';root.insertBefore(n,root.firstChild)}n.textContent=String(msg||'Unknown error')}\n                function G(){if(!DEBUG_GLOBAL||window.__cisvc_global_hooks)return;window.__cisvc_global_hooks=true;window.addEventListener('error',function(e){var m='[cisvc] window error: '+(e&&e.message?e.message:'unknown');console.error(m,e&&e.error&&e.error.stack?e.error.stack:e);A(document.querySelectorAll('.cisvc')).forEach(function(r){B(r,m+' (boot may have failed)')})});window.addEventListener('unhandledrejection',function(e){var rs=e&&e.reason?(e.reason.message||String(e.reason)):'unknown';var m='[cisvc] unhandled rejection: '+rs;console.error(m,e&&e.reason&&e.reason.stack?e.reason.stack:e);A(document.querySelectorAll('.cisvc')).forEach(function(r){B(r,m+' (boot may have failed)')})})}\n                var storageOK=true;\n                function storageGet(key){try{return window.localStorage.getItem(key)}catch(_e){storageOK=false;return null}}\n                function storageSet(key,value){try{window.localStorage.setItem(key,value);return true}catch(_e){storageOK=false;return false}}\n\/* Pure browser-local watch memory. No network calls or account identifiers. *\/\nfunction createWatchMemory(storage, now) {\n    var KEY = 'cisvc_watch_v1', LIMIT = 100, MAX_RANGES = 64;\n    var clock = now || Date.now, available = true, entries = Object.create(null), selections = Object.create(null), dirty = Object.create(null), lastSample = null;\n    function validId(id) { return typeof id === 'string' && \/^[A-Za-z0-9_-]{1,180}$\/.test(id) && !\/^(?:__proto__|prototype|constructor)$\/.test(id); }\n    function finite(n) { return typeof n === 'number' && Number.isFinite(n); }\n    function clamp(n, lo, hi) { return Math.max(lo, Math.min(hi, n)); }\n    function ranges(input, duration) {\n        var result = [];\n        (Array.isArray(input) ? input : []).slice(0, 256).forEach(function (p) {\n            if (!Array.isArray(p) || !finite(p[0]) || !finite(p[1])) return;\n            var a = clamp(p[0], 0, duration), b = clamp(p[1], 0, duration);\n            if (b > a) result.push([a, b]);\n        });\n        result.sort(function (a, b) { return a[0] - b[0]; });\n        var merged = [];\n        result.forEach(function (p) {\n            var previous = merged[merged.length - 1];\n            if (previous && p[0] <= previous[1] + 0.02) previous[1] = Math.max(previous[1], p[1]);\n            else merged.push(p.slice());\n        });\n        if (merged.length > MAX_RANGES) {\n            merged.sort(function (a, b) { return (b[1] - b[0]) - (a[1] - a[0]); });\n            merged = merged.slice(0, MAX_RANGES).sort(function (a, b) { return a[0] - b[0]; });\n        }\n        return merged;\n    }\n    function clean(value) {\n        if (!value || !finite(value.duration) || value.duration <= 0 || value.duration > 86400) return null;\n        return { position: clamp(finite(value.position) ? value.position : 0, 0, value.duration), duration: value.duration,\n            ranges: ranges(value.ranges, value.duration), updatedAt: finite(value.updatedAt) ? value.updatedAt : 0 };\n    }\n    function read() {\n        var data;\n        try {\n            var raw = storage.getItem(KEY);\n            if (!raw || raw.length > 524288) return { entries: Object.create(null), selections: Object.create(null) };\n            data = JSON.parse(raw);\n        } catch (_) { available = false; }\n        var videos = Object.create(null), chosen = Object.create(null);\n        if (data && data.version === 1 && data.videos && typeof data.videos === 'object') {\n            Object.keys(data.videos).slice(0, 300).forEach(function (id) { var item = validId(id) && clean(data.videos[id]); if (item) videos[id] = item; });\n            Object.keys(data.selections || {}).slice(0, 30).forEach(function (key) {\n                var value = data.selections[key];\n                if (\/^set-[a-f0-9]{1,8}$\/.test(key) && validId(value)) chosen[key] = value;\n            });\n        }\n        return { entries: videos, selections: chosen };\n    }\n    var loaded = read(); entries = loaded.entries; selections = loaded.selections;\n    function summary(id) {\n        var item = entries[id], seconds = item ? item.ranges.reduce(function (sum, p) { return sum + p[1] - p[0]; }, 0) : 0;\n        var fraction = item ? clamp(seconds \/ item.duration, 0, 1) : 0;\n        return { position: item ? item.position : 0, duration: item ? item.duration : 0, watchedSeconds: seconds,\n            percent: Math.floor(fraction * 100), complete: fraction >= 0.95 };\n    }\n    function sample(id, position, duration, state) {\n        if (!validId(id) || !finite(position) || !finite(duration) || duration <= 0 || duration > 86400) { lastSample = null; return summary(id); }\n        var time = clock(), item = entries[id], meta = state || {}, speed = finite(meta.rate) && meta.rate > 0 ? meta.rate : 1;\n        if (!item || Math.abs(item.duration - duration) > Math.max(2, item.duration * 0.03)) item = { position: 0, duration: duration, ranges: [], updatedAt: 0 };\n        item.duration = duration; position = clamp(position, 0, duration);\n        if (lastSample && lastSample.id === id && meta.playing && meta.visible !== false && !meta.seeking) {\n            var elapsed = (time - lastSample.wall) \/ 1000, delta = position - lastSample.position;\n            if (elapsed > 0 && elapsed <= 5 && delta > 0 && delta <= elapsed * speed + 0.75 && delta <= 5 * speed) {\n                item.ranges = ranges(item.ranges.concat([[lastSample.position, position]]), duration);\n            }\n        }\n        item.position = position; item.updatedAt = time; entries[id] = item; dirty[id] = true;\n        lastSample = meta.playing && meta.visible !== false && !meta.seeking ? { id: id, position: position, wall: time } : null;\n        return summary(id);\n    }\n    function save() {\n        var fresh = read();\n        Object.keys(dirty).forEach(function (id) {\n            var item = entries[id], other = fresh.entries[id];\n            if (other && Math.abs(other.duration - item.duration) <= Math.max(2, item.duration * 0.03)) {\n                item.ranges = ranges(item.ranges.concat(other.ranges), item.duration);\n                if (other.updatedAt > item.updatedAt) { item.position = other.position; item.updatedAt = other.updatedAt; }\n            }\n            fresh.entries[id] = item;\n        });\n        var ids = Object.keys(fresh.entries).sort(function (a, b) { return fresh.entries[b].updatedAt - fresh.entries[a].updatedAt; }).slice(0, LIMIT);\n        var kept = Object.create(null); ids.forEach(function (id) { kept[id] = fresh.entries[id]; });\n        Object.keys(selections).forEach(function (key) { fresh.selections[key] = selections[key]; });\n        var recentSelections = Object.create(null);\n        Object.keys(fresh.selections).slice(-30).forEach(function (key) { recentSelections[key] = fresh.selections[key]; });\n        entries = kept; selections = recentSelections;\n        try { storage.setItem(KEY, JSON.stringify({ version: 1, videos: entries, selections: selections })); available = true; dirty = Object.create(null); }\n        catch (_) { available = false; }\n        return available;\n    }\n    function remember(collection, id) { if (\/^set-[a-f0-9]{1,8}$\/.test(collection) && validId(id)) { selections[collection] = id; save(); } }\n    function restart(id) { if (entries[id]) { entries[id].position = 0; entries[id].updatedAt = clock(); dirty[id] = true; } lastSample = null; save(); }\n    function collection(ids) { var hash = 2166136261; ids.slice().sort().join('|').split('').forEach(function (ch) { hash ^= ch.charCodeAt(0); hash = Math.imul(hash, 16777619); }); return 'set-' + (hash >>> 0).toString(16); }\n    function refresh() {\n        var fresh = read(); Object.keys(dirty).forEach(function (id) { fresh.entries[id] = entries[id]; });\n        entries = fresh.entries; selections = fresh.selections;\n    }\n    return { get: summary, sample: sample, resetAnchor: function () { lastSample = null; }, save: save, remember: remember,\n        selected: function (key) { return selections[key] || ''; }, restart: restart, collection: collection, refresh: refresh,\n        available: function () { return available; }, key: KEY };\n}\n\n                var watchMemory=createWatchMemory({getItem:storageGet,setItem:function(key,value){if(!storageSet(key,value))throw new Error('Storage unavailable')}});\n                function init(root){\n                    var DEBUG=D(),log=function(){if(!DEBUG)return;var a=['[cisvc]'];for(var i=0;i<arguments.length;i++)a.push(arguments[i]);console.log.apply(console,a)};\n                    if(root.dataset.cisvcBooted==='1')return;\n                    var viewport=root.querySelector('.cisvc__viewport'),track=root.querySelector('.cisvc__track'),slides=A(root.querySelectorAll('.cisvc__slide')),thumbs=A(root.querySelectorAll('.cisvc__thumb'));\n                    var audio=root.querySelector('.cisvc__audio'),subs=root.querySelector('.cisvc__subs'),qualityBtn=root.querySelector('.cisvc__quality'),numberNode=root.querySelector('[data-current-number]');\n                    if(!viewport||!track||!slides.length||!audio||!subs||!qualityBtn){B(root,'Carousel boot failed: missing required element');return}\n                    var base=root.getAttribute('data-base-url')||'',hlsLocal=root.getAttribute('data-hls-local')||'',motionQuery=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)'),reduced=!!(motionQuery&&motionQuery.matches),versionedFolders=[],labels={};\n                    try{versionedFolders=JSON.parse(root.getAttribute('data-versioned-folders')||'[]');labels=JSON.parse(root.getAttribute('data-labels')||'{}')}catch(_e){}\n                    var SLIDE_INTERVAL_MS=9000,NAV_PAUSE_MS=120000;\n                    var state={index:0,focused:false,isDragging:false,isVisible:true,pauseUntil:0},players=Object.create(null),docVisible=!document.hidden,timer=null,tx=0,suppressUntil=0,hlsPromise=null,drag={id:null,startX:0,startY:0,startTx:0,dx:0,dy:0};\n                                        var siteKey=(function(){try{return (new URL(base,window.location.href)).pathname.split('\/').filter(Boolean)[0]||'root'}catch(_e){return (location.pathname.split('\/').filter(Boolean)[0]||'root')}})();\n                    var LQ='cisvc_quality_'+siteKey,LS='cisvc_sub_lang_v2_'+siteKey,LA='cisvc_audio_track_'+siteKey,LAL='cisvc_audio_lang_'+siteKey;\n                    function getCookie(n){try{var m=document.cookie.match(new RegExp('(?:^|; )'+String(n).replace(\/[.*+?^${}()|[\\]\\\\]\/g,'\\\\$&')+'=([^;]*)'));return m?decodeURIComponent(m[1]):''}catch(_e){return''}}\n                    function setCookie(n,v){try{document.cookie=String(n)+'='+encodeURIComponent(String(v||''))+'; path=\/; max-age=31536000; samesite=lax'}catch(_e){}}\n                    var quality=((storageGet(LQ)||storageGet('cisvc_quality')||'sd')==='hd')?'hd':'sd';\n                    var subPref=(getCookie(LS)||storageGet(LS)||'off');\n                    if(\/^\\d+$\/.test(subPref)){subPref='off'}\n                    var audioPref=parseInt(storageGet(LA)||storageGet('cisvc_audio_track')||'-1',10);\n                    var audioLangPref=(getCookie(LAL)||storageGet(LAL)||'en').toLowerCase();\n                    if(!getCookie(LS)){setCookie(LS,subPref)}\n                    if(!getCookie(LAL)){setCookie(LAL,audioLangPref)}\n                    qualityBtn.textContent=quality.toUpperCase();\n\n                    function label(key,fallback){return labels[key]||fallback}\n                    function stamp(seconds){seconds=Math.max(0,Math.floor(seconds||0));return Math.floor(seconds\/60)+':'+String(seconds%60).padStart(2,'0')}\n                    var collection=watchMemory.collection(slides.map(function(slide){return slide.getAttribute('data-folder')||''}));\n                    var remembered=watchMemory.selected(collection),initialIndex=slides.findIndex(function(slide){return slide.getAttribute('data-folder')===remembered});\n                    function activePlayer(){return players[state.index]||null}\n                    function refreshProgress(){\n                        slides.forEach(function(slide){var id=slide.getAttribute('data-folder')||'',title=slide.getAttribute('data-title')||'',entry=watchMemory.get(id),bar=slide.querySelector('[data-watch-bar]'),status=slide.querySelector('[data-watch-status]'),play=slide.querySelector('.cisvc__play');\n                            if(bar)bar.style.width=entry.percent+'%';if(status)status.textContent=entry.percent+label('percent','% watched');\n                            if(play)play.setAttribute('aria-label',(entry.complete?label('again','Watch again'):entry.position>2?label('resume','Resume at')+' '+stamp(entry.position):label('play','Play'))+': '+title);\n                        });\n                        if(numberNode)numberNode.textContent=(state.index+1)+' \/ '+slides.length;\n                    }\n                    function loadThumbAt(idx){var img=thumbs[((idx%thumbs.length)+thumbs.length)%thumbs.length];if(!img)return;var src=img.getAttribute('data-src');if(src){img.src=src;img.removeAttribute('data-src');img.classList.remove('is-lazy')}}\n                    function loadThumbsAround(idx){loadThumbAt(idx);loadThumbAt(idx-1);loadThumbAt(idx+1)}\n                    thumbs.forEach(function(img){img.addEventListener('error',function(){img.classList.add('is-missing')})});\n                    function manifest(folder){var f=encodeURIComponent(folder),rootBase=String(base||'').replace(\/\\\/+$\/,'')+'\/';var b=rootBase+f+'\/',version=versionedFolders.indexOf(folder)>=0?'?v='+encodeURIComponent(root.getAttribute('data-media-version')||''):'';return{base:b,sd:b+'master480.m3u8'+version,hd:b+'master720.m3u8'+version,thumb:rootBase+f+'.webp?v='+encodeURIComponent(root.getAttribute('data-thumb-version')||'')}}\nfunction absUrl(baseDir,u){if(!u)return u;if(\/^(https?:)?\\\/\\\/\/i.test(u)||\/^data:\/i.test(u)||\/^blob:\/i.test(u)){return u}if(u.charAt(0)==='\/'){try{var o=new URL(baseDir);return o.protocol+'\/\/'+o.host+u}catch(_e){return u}}return baseDir+u.replace(\/^\\.?\\\/\/,'')}\nfunction parseAudioTrackLines(text){var out=[];String(text||'').split(\/\\r?\\n\/).forEach(function(ln){if(!\/^#EXT-X-MEDIA:TYPE=AUDIO\/i.test(ln)){return}var attrs={};ln.replace(\/([A-Z0-9-]+)=((\\\"[^\\\"]*\\\")|[^,]*)\/gi,function(_m,k,v){attrs[k]=String(v||'').replace(\/^\\\"|\\\"$\/g,'');return''});out.push({name:attrs.NAME||'',lang:attrs.LANGUAGE||'',attrs:attrs})});return out}\nfunction normalizeMasterText(text,src){var raw=String(text||'');var lines=raw.split(\/\\r?\\n\/);var baseDir=String(src||'').replace(\/[^\\\/?#]*([?#].*)?$\/,'');var audio=[];var rest=[];var firstStream=-1;for(var i=0;i<lines.length;i++){var ln=lines[i];if(firstStream<0&&\/^#EXT-X-STREAM-INF\/i.test(ln)){firstStream=i}if(\/^#EXT-X-MEDIA:TYPE=AUDIO\/i.test(ln)){var m=ln.match(\/URI=\\\"([^\\\"]+)\\\"\/i);if(m&&m[1]){ln=ln.replace(\/URI=\\\"([^\\\"]+)\\\"\/i,'URI=\\\"'+absUrl(baseDir,m[1])+'\\\"')}audio.push(ln)}else{rest.push(ln)}}for(var x=0;x<rest.length;x++){var rl=rest[x];if(rl&&rl.charAt(0)!=='#'){rest[x]=absUrl(baseDir,rl)}}if(!audio.length||firstStream<0){var only=rest.join('\\n');return{text:only,changed:only!==raw,audioTracks:parseAudioTrackLines(only)}}var streamPos=0;for(var k=0;k<rest.length;k++){if(\/^#EXT-X-STREAM-INF\/i.test(rest[k])){streamPos=k;break}}var out=rest.slice(0,streamPos).concat(audio).concat(rest.slice(streamPos));var outText=out.join('\\n');return{text:outText,changed:outText!==raw,audioTracks:parseAudioTrackLines(outText)}}\n                    function ensureHls(){if(window.Hls&&window.Hls.isSupported&&window.Hls.isSupported()){return Promise.resolve(true)}if(hlsPromise)return hlsPromise;hlsPromise=new Promise(function(resolve){if(!hlsLocal){log('hls missing path');resolve(false);return}var s=document.createElement('script');s.src=hlsLocal;s.defer=true;s.onload=function(){var ok=!!(window.Hls&&window.Hls.isSupported&&window.Hls.isSupported());log('hls loaded',hlsLocal,'supported',ok);resolve(ok)};s.onerror=function(){log('hls load failed',hlsLocal);resolve(false)};document.head.appendChild(s)});return hlsPromise}\n                    function canAuto(){var p=activePlayer();return !reduced&&!state.isDragging&&state.isVisible&&docVisible&&slides.length>1&&!(p&&p.playing())}\n                    function stopAuto(){if(timer!==null){clearTimeout(timer);timer=null}}\n                    function pauseAuto(){state.pauseUntil=Math.max(state.pauseUntil,Date.now()+NAV_PAUSE_MS)}\n                    function startAuto(){stopAuto();if(!canAuto())return;var delay=Math.max(SLIDE_INTERVAL_MS,state.pauseUntil-Date.now());timer=setTimeout(function(){timer=null;if(canAuto())setActive(state.index+1,false)},delay)}\n                    function resetViewportScroll(){if(viewport.scrollLeft)viewport.scrollLeft=0}\n                    viewport.addEventListener('scroll',resetViewportScroll,{passive:true});root.addEventListener('focusin',resetViewportScroll);\n                    function gap(){var s=window.getComputedStyle(track),g=parseFloat(s.columnGap||s.gap||'0');return Number.isFinite(g)?g:0}\n                    function m(){var sw=slides[0]?slides[0].offsetWidth:0,step=sw+gap(),off=(viewport.clientWidth-sw)\/2;return{sw:sw,step:step,off:off}}\n                    function i2x(i){var k=m();return k.step>0?-(i*k.step-k.off):0}function x2i(x){var k=m();return k.step>0?C(Math.round((-x+k.off)\/k.step),0,slides.length-1):state.index}\n                    function setX(x,animate){var a=i2x(0),b=i2x(slides.length-1),value=C(x,Math.min(a,b),Math.max(a,b));track.style.transition=animate&&!reduced?'transform .42s cubic-bezier(.22,.78,.22,1)':'none';track.style.transform='translate3d('+value+'px,0,0)';tx=value;resetViewportScroll()}\n                    function syncActive(){var p=activePlayer(),seen=!!(p&&p.loaded());state.focused=seen;root.classList.toggle('has-player',seen);root.classList.toggle('is-focused',seen);slides.forEach(function(slide,i){slide.classList.toggle('is-active',i===state.index);slide.classList.toggle('is-focused',i===state.index&&seen);slide.setAttribute('aria-current',i===state.index?'true':'false');A(slide.querySelectorAll('.cisvc__play,.cisvc__watch-page')).forEach(function(control){control.tabIndex=i===state.index?0:-1})});if(p)p.activate();else{qualityBtn.textContent=quality.toUpperCase();audio.innerHTML='';subs.innerHTML=''}refreshProgress()}\n                    function focusPlayer(){if(window.__cisvc_active_controller&&window.__cisvc_active_controller!==api)window.__cisvc_active_controller.forceBlur();window.__cisvc_active_controller=api;syncActive();stopAuto()}\n                    function setActive(n,user){if(user)pauseAuto();var previous=activePlayer(),index=((n%slides.length)+slides.length)%slides.length;if(index!==state.index&&previous)previous.pause(true);state.index=index;loadThumbsAround(index);setX(i2x(index),true);if(user)watchMemory.remember(collection,slides[index].getAttribute('data-folder')||'');syncActive();startAuto()}\n                    function createPlayer(slide,index){\n                        var currentFolder=slide.getAttribute('data-folder')||'',video=slide.querySelector('video')||document.createElement('video'),hls=null,manifestBlobUrl='',cachedAudioTracks=[],loadSerial=0,pendingRestore=null,pendingSubFetches=Object.create(null),pstate={customSubTrack:null,customSubLang:'',customSubCues:[],customSubPool:Object.create(null),selectedSubTrack:null,subtitlesReady:false,subtitleMeasure:null,subtitleCueLayout:new WeakMap(),subtitleLayoutViewport:'',subtitleResizeFrame:0},lastPersist=0,isLoaded=false,loadingStarted=false,sourceLoading=false,playPending=false,playerQuality=quality;\n                        video.id=video.id||'cisvc_video_'+Math.random().toString(36).slice(2);video.controls=true;video.setAttribute('controlslist','nodownload');video.addEventListener('contextmenu',function(e){e.preventDefault()});video.preload='none';video.playsInline=true;video.setAttribute('playsinline','playsinline');video.crossOrigin='anonymous';video.setAttribute('aria-label',slide.getAttribute('data-title')||'Video');slide.querySelector('.cisvc__player-mount').appendChild(video);\n                        var nativeHls=!!video.canPlayType('application\/vnd.apple.mpegurl');\n                        function isActive(){return state.index===index&&players[index]===player}\n                        function sampleWatch(force){if(Number.isFinite(video.duration)&&video.duration>0){watchMemory.sample(currentFolder,video.currentTime,video.duration,{playing:isActive()&&!video.paused,seeking:video.seeking,visible:docVisible&&isActive(),rate:video.playbackRate});if(force||Date.now()-lastPersist>5000){watchMemory.save();lastPersist=Date.now()}}refreshProgress()}\n                        function resumeLoading(position){if(hls&&!loadingStarted){loadingStarted=true;try{hls.startLoad(Number.isFinite(position)?position:-1)}catch(_e){}}video.preload='metadata'}\n                        function stopLoading(){loadingStarted=false;if(hls){try{hls.stopLoad()}catch(_e){}}video.preload='none'}\n                        function playbackFailed(err){playPending=false;sourceLoading=false;if(pendingRestore)pendingRestore.autoplay=false;video.pause();stopLoading();log('play error',err&&err.message?err.message:err);if(isActive()){pauseAuto();startAuto()}}\n                        function safePlay(){if(!isActive()||!docVisible||!state.isVisible)return;var serial=loadSerial;playPending=true;stopAuto();resumeLoading(-1);try{var promise=video.play();if(promise&&promise.then)promise.then(function(){if(serial===loadSerial)playPending=false},function(err){if(serial===loadSerial)playbackFailed(err)});else playPending=false}catch(err){if(serial===loadSerial)playbackFailed(err)}}\n                        function restorePlayback(){var pending=pendingRestore;if(!pending||!pending.ready||pending.serial!==loadSerial||!Number.isFinite(video.duration)||video.duration<=0)return;pendingRestore=null;sourceLoading=false;applySubs(subPref);watchMemory.resetAnchor();try{video.currentTime=C(pending.position,0,Math.max(0,video.duration-.25))}catch(_e){}if(pending.autoplay&&isActive())safePlay();else{video.pause();startAuto()}}\n                        function startPlaybackLoad(){var pending=pendingRestore;if(!pending||!pending.ready||pending.serial!==loadSerial)return;if(!isActive()||!docVisible||!state.isVisible){pending.autoplay=false;sourceLoading=false;stopLoading();return}sourceLoading=true;resumeLoading(pending.position);if(pending.autoplay)safePlay();restorePlayback()}\n                        function clearTracks(){A(video.querySelectorAll('track')).forEach(function(t){t.remove()})}\nfunction subtitleTrackEls(){return A(video.querySelectorAll('track[kind=\"subtitles\"]'))}\nfunction subtitleTracks(){return A(video.textTracks).filter(function(t){return \/^(subtitles|captions)$\/.test(String(t.kind||'').toLowerCase())})}\nfunction subtitleFontSize(){return window.matchMedia&&window.matchMedia('(max-width:600px)').matches?13:16}\nfunction subtitleCueHeight(cue,width){var probe=pstate.subtitleMeasure;if(!probe){probe=document.createElement('span');probe.setAttribute('aria-hidden','true');probe.style.cssText='position:fixed;left:-10000px;top:0;display:block;visibility:hidden;pointer-events:none;margin:0;padding:0;border:0;box-sizing:content-box;font:16px sans-serif;line-height:normal;white-space:pre-line;overflow-wrap:break-word;text-align:center;unicode-bidi:plaintext;';document.body.appendChild(probe);pstate.subtitleMeasure=probe}probe.style.fontSize=subtitleFontSize()+'px';probe.style.width=(width*.94)+'px';probe.textContent='';if(cue.getCueAsHTML)probe.appendChild(cue.getCueAsHTML());else probe.textContent=String(cue.text||'');var height=Math.max(subtitleFontSize()*1.125,probe.getBoundingClientRect().height);probe.textContent='';return height}\nfunction presentSubtitleCue(cue){if(!cue)return;var width=video.clientWidth||346,height=video.clientHeight||width*9\/16,key=width+'x'+height+'@'+subtitleFontSize(),layout=pstate.subtitleCueLayout.get(cue);if(!layout||layout.key!==key){var reserve=width<=480?76:Math.max(72,Math.min(90,height*.12)),endSupported=!!(window.VTTCue&&'lineAlign' in window.VTTCue.prototype),offset=height-reserve-(endSupported?0:subtitleCueHeight(cue,width));layout={key:key,line:Math.max(0,Math.min(100,offset\/height*100)),endSupported:endSupported};pstate.subtitleCueLayout.set(cue,layout)}pstate.subtitleLayoutViewport=key;try{cue.snapToLines=false;cue.line=layout.line;if(layout.endSupported)cue.lineAlign='end';cue.position=50;if(window.VTTCue&&'positionAlign' in window.VTTCue.prototype)cue.positionAlign='center';cue.align='center';cue.size=94}catch(_e){}}\nfunction presentSubtitleTrack(tr){if(tr&&tr.cues)A(tr.cues).forEach(presentSubtitleCue)}\nfunction refreshSubtitleLayout(){var width=video.clientWidth||346,height=video.clientHeight||width*9\/16,key=width+'x'+height+'@'+subtitleFontSize(),changed=!!pstate.subtitleLayoutViewport&&pstate.subtitleLayoutViewport!==key,tracks=subtitleTracks(),showing=tracks.filter(function(tr){return tr.mode==='showing'});tracks.forEach(presentSubtitleTrack);if(changed)showing.forEach(function(tr){tr.mode='disabled';tr.mode='showing'})}\nfunction queueSubtitleLayout(){if(pstate.subtitleResizeFrame)return;pstate.subtitleResizeFrame=window.requestAnimationFrame(function(){pstate.subtitleResizeFrame=0;refreshSubtitleLayout()})}\nfunction setSubtitleModes(selected,loading){subtitleTracks().forEach(function(tr){var mode=tr===selected?'showing':tr===loading?'hidden':'disabled';if(tr.mode!==mode)tr.mode=mode});pstate.selectedSubTrack=selected||null}\nfunction syncNativeSubs(){if(!isActive()||!pstate.subtitlesReady||sourceLoading||pendingRestore)return;var showing=subtitleTracks().filter(function(tr){return tr.mode==='showing'}),chosen=showing.filter(function(tr){return tr!==pstate.selectedSubTrack}).pop()||showing[0]||null,wanted=chosen?String(chosen.language||'').toLowerCase():'off';if(wanted!=='off'&&!subtitleTrackEls().some(function(el){return String(el.srclang||'').toLowerCase()===wanted}))return;if(subPref!==wanted){subPref=wanted;storageSet(LS,wanted);setCookie(LS,wanted);subs.value=wanted}applySubs(wanted)}\nfunction addTracks(folder){var p=manifest(folder),serial=loadSerial;clearTracks();['af','ar','bn','da','de','en','es','fa','fi','fr','he','hi','it','ja','ko','nl','no','pl','pt','ru','sv','ta','th','uk','vi','zh','zu'].forEach(function(lang){var t=document.createElement('track');t.kind='subtitles';t.srclang=lang;t.label=lang.toUpperCase();t.default=(subPref!=='off'&&subPref===lang);var url=p.base+encodeURIComponent(folder)+'-'+encodeURIComponent(lang)+'.vtt';t.setAttribute('data-src',url);if(subPref!=='off'&&subPref===lang)t.src=url;t.addEventListener('error',function(){log('subtitle missing',folder,lang);if(isActive()&&serial===loadSerial&&currentFolder===folder&&subPref===lang)loadCustomSub(lang,url)});t.addEventListener('load',function(){if(serial!==loadSerial||currentFolder!==folder)return;presentSubtitleTrack(t.track);if(isActive()&&subPref!=='off'&&subPref===lang)applySubs(subPref)});video.appendChild(t)})}\nfunction ensureTrackSource(el){var src=el&&el.getAttribute('data-src');if(src&&!el.getAttribute('src'))el.setAttribute('src',src)}\nfunction clearCustomSub(){var tr=pstate.customSubTrack;if(tr){(pstate.customSubCues||[]).forEach(function(cue){try{tr.removeCue(cue)}catch(_e){}});try{tr.mode='disabled'}catch(_e){}pstate.customSubTrack=null;pstate.customSubLang='';pstate.customSubCues=[]}}\nfunction tsToSec(s){var p=String(s||'').trim().replace(',', '.').split(':');if(p.length!==3){return NaN}return (parseFloat(p[0])*3600)+(parseFloat(p[1])*60)+parseFloat(p[2])}\nfunction parseVtt(text){var lines=String(text||'').replace(\/\\r\/g,'').split('\\n');var cues=[];for(var i=0;i<lines.length;i++){var ln=lines[i].trim();if(!ln||ln==='WEBVTT'||\/^\\d+$\/.test(ln)){continue}if(ln.indexOf('-->')>-1){var t=ln.split('-->');var start=tsToSec(t[0]);var end=tsToSec((t[1]||'').trim().split(' ')[0]);if(!(start>=0&&end>start)){continue}var payload=[];for(var j=i+1;j<lines.length&&lines[j].trim()!=='';j++){payload.push(lines[j]);i=j}var txt=payload.join('\\n').trim();if(txt){cues.push({s:start,e:end,t:txt})}}}return cues}\nfunction loadCustomSub(lang,url){if(!url||!window.fetch||!('VTTCue' in window)||!isActive()||String(subPref).toLowerCase()!==lang)return;var folder=currentFolder,serial=loadSerial,key=serial+'|'+folder+'|'+lang+'|'+url;var nativeReady=subtitleTrackEls().some(function(el){return String(el.srclang||'').toLowerCase()===lang&&el.track&&el.track.cues&&el.track.cues.length});if(nativeReady){applySubs(lang);return}if(pstate.customSubTrack&&pstate.customSubLang===lang){applySubs(lang);return}if(pendingSubFetches[key])return;pendingSubFetches[key]=true;return fetch(url,{credentials:'same-origin',cache:'no-store'}).then(function(r){if(!r||!r.ok)throw new Error('subtitle fetch failed');return r.text()}).then(function(vtt){var cues=parseVtt(vtt);if(!cues.length)throw new Error('subtitle cues empty');if(!isActive()||serial!==loadSerial||folder!==currentFolder||String(subPref).toLowerCase()!==lang)return;var nativeReady=subtitleTrackEls().some(function(el){return String(el.srclang||'').toLowerCase()===lang&&el.track&&el.track.cues&&el.track.cues.length});if(nativeReady){applySubs(lang);return}if(pstate.customSubTrack&&pstate.customSubLang===lang)return;clearCustomSub();var tr=pstate.customSubPool[lang]||(pstate.customSubPool[lang]=video.addTextTrack('subtitles',lang.toUpperCase(),lang));pstate.customSubCues=[];for(var i=0;i<cues.length;i++){try{var cue=new VTTCue(cues[i].s,cues[i].e,cues[i].t);presentSubtitleCue(cue);tr.addCue(cue);pstate.customSubCues.push(cue)}catch(_e){}}pstate.customSubTrack=tr;pstate.customSubLang=lang;applySubs(lang);log('subtitle fallback cues',lang,cues.length)}).catch(function(err){log('subtitle fallback failed',lang,err&&err.message?err.message:err)}).then(function(){delete pendingSubFetches[key]})}\nfunction applySubs(v){var wanted=String(v||'off').toLowerCase(),serial=loadSerial,folder=currentFolder,selected=null,nativeTrack=null,selectedSrc='',cueCount=-1;if(pstate.customSubLang!==wanted)clearCustomSub();subtitleTrackEls().forEach(function(el){var tr=el.track;if(!tr)return;if(wanted!=='off'&&String(el.srclang||tr.language||'').toLowerCase()===wanted){ensureTrackSource(el);nativeTrack=tr;if(tr.mode==='disabled')tr.mode=pstate.customSubTrack?'hidden':'showing';presentSubtitleTrack(tr);selectedSrc=el.src||'';cueCount=tr.cues?tr.cues.length:-1}else{presentSubtitleTrack(tr)}});if(nativeTrack){if(cueCount>0){clearCustomSub();selected=nativeTrack}else{selected=pstate.customSubTrack&&pstate.customSubLang===wanted?pstate.customSubTrack:nativeTrack}}setSubtitleModes(selected,selected&&selected!==nativeTrack?nativeTrack:null);pstate.subtitlesReady=true;if(nativeTrack&&cueCount<=0&&!pstate.customSubTrack&&selectedSrc)setTimeout(function(){if(!isActive()||serial!==loadSerial||folder!==currentFolder||String(subPref).toLowerCase()!==wanted)return;var count=nativeTrack.cues?nativeTrack.cues.length:-1;log('subtitle cues',wanted,count,'mode',nativeTrack.mode);if(count<=0)loadCustomSub(wanted,selectedSrc)},1500);log('subtitle applied',wanted,!!selected,'cues',cueCount)}\nfunction fillSubs(){if(!isActive())return;subs.innerHTML='';var o=document.createElement('option');o.value='off';o.textContent='Subtitles Off';subs.appendChild(o);var trackEls=subtitleTrackEls();trackEls.forEach(function(t){var x=document.createElement('option');x.value=(t.srclang||'').toLowerCase();x.textContent=t.label||((t.srclang||'').toUpperCase())||'Sub';subs.appendChild(x)});subs.disabled=trackEls.length===0;subs.value=(subs.querySelector('option[value=\\\"'+String(subPref).toLowerCase()+'\\\"]')?String(subPref).toLowerCase():'off');applySubs(subs.value);log('subtitle selection',subs.value)}\nfunction audioLabel(t,i){var a=t&&t.attrs?t.attrs:{};return (t&&t.name)||(t&&t.lang)||(a&&a.NAME)||(a&&a.LANGUAGE)||('Audio '+(i+1))}\nfunction audioLangFromTrack(t,i){var a=t&&t.attrs?t.attrs:{};var raw=(t&&t.lang)||(a&&a.LANGUAGE)||(t&&t.name)||(a&&a.NAME)||'';raw=String(raw||'').toLowerCase();var m=raw.match(\/[a-z]{2,3}(?:-[a-z]{2})?\/i);return m?m[0].toLowerCase():''}\nfunction activeAudioTracks(){if(hls&&hls.audioTracks&&hls.audioTracks.length){return hls.audioTracks}return cachedAudioTracks||[]}\nfunction fillAudio(){if(!isActive())return;audio.innerHTML='';var tracks=activeAudioTracks();if(tracks.length<=1){var baseOpt=document.createElement('option');baseOpt.value='-1';baseOpt.textContent='Default Audio';audio.appendChild(baseOpt);audio.disabled=true;audio.value='-1';log('audio tracks available',tracks.length,'selected','default');return}tracks.forEach(function(t,i){var o=document.createElement('option');o.value=String(i);o.textContent=audioLabel(t,i);audio.appendChild(o)});audio.disabled=false;var selected=-1;if(audioLangPref){for(var ai=0;ai<tracks.length;ai++){var alang=audioLangFromTrack(tracks[ai],ai);if(alang===audioLangPref||alang.indexOf(audioLangPref+'-')===0){selected=ai;break}}}if(selected<0&&Number.isFinite(audioPref)&&audioPref>=0&&audioPref<tracks.length){selected=audioPref}if(selected<0){selected=(hls&&hls.audioTrack>=0&&hls.audioTrack<tracks.length)?hls.audioTrack:0}if(hls){hls.audioTrack=selected}audio.value=String(selected);audioPref=selected;var selTrack=tracks[selected]||null;var selLang=audioLangFromTrack(selTrack,selected)||audioLangPref||'en';audioLangPref=selLang;storageSet(LAL,audioLangPref);setCookie(LAL,audioLangPref);log('audio tracks available',tracks.length,'selected',audio.value,'lang',audioLangPref)}\nfunction prepareHlsSource(src,serial){if(!window.fetch){return Promise.resolve(src)}return fetch(src,{credentials:'same-origin',cache:'no-store'}).then(function(r){if(!r||!r.ok){return src}return r.text().then(function(txt){if(serial!==loadSerial)return src;var n=normalizeMasterText(txt,src);cachedAudioTracks=n.audioTracks||[];if(!n.changed){return src}if(manifestBlobUrl){try{URL.revokeObjectURL(manifestBlobUrl)}catch(e1){}}manifestBlobUrl=URL.createObjectURL(new Blob([n.text],{type:'application\/vnd.apple.mpegurl'}));log('normalized master manifest for audio tracks');return manifestBlobUrl})}).catch(function(){return src})}\n                        function resetSource(){pstate.subtitlesReady=false;loadSerial++;pendingRestore=null;sourceLoading=false;playPending=false;video.pause();stopLoading();if(hls){try{hls.destroy()}catch(_e){}hls=null}if(manifestBlobUrl){try{URL.revokeObjectURL(manifestBlobUrl)}catch(_e){}manifestBlobUrl=''}cachedAudioTracks=[];clearCustomSub();clearTracks();A(video.querySelectorAll('source')).forEach(function(source){source.remove()});video.removeAttribute('src');video.load()}\n                        function load(options){options=options||{};var saved=watchMemory.get(currentFolder),position=Number.isFinite(options.position)?options.position:saved.complete?0:saved.position;watchMemory.remember(collection,currentFolder);resetSource();isLoaded=true;sourceLoading=true;stopAuto();slide.classList.add('has-video');video.controls=isActive();var serial=loadSerial,paths=manifest(currentFolder),src=playerQuality==='hd'?paths.hd:paths.sd;pendingRestore={serial:serial,position:position,autoplay:options.autoplay!==false,ready:false};addTracks(currentFolder);focusPlayer();ensureHls().then(function(has){if(serial!==loadSerial)return;if(!has&&nativeHls){pendingRestore.ready=true;video.src=src;video.load();if(isActive()){fillAudio();fillSubs()}startPlaybackLoad();return}if(!has){pendingRestore=null;playbackFailed(new Error('HLS unavailable'));B(root,'Hls.js not loaded, cannot play HLS on this browser.');return}hls=new window.Hls({startLevel:0,autoStartLoad:false,maxBufferLength:12,maxMaxBufferLength:20,maxBufferSize:16777216,backBufferLength:3,capLevelToPlayerSize:false,fragLoadPolicy:{default:{maxTimeToFirstByteMs:60000,maxLoadTimeMs:120000,timeoutRetry:{maxNumRetry:3,retryDelayMs:0,maxRetryDelayMs:0},errorRetry:{maxNumRetry:3,retryDelayMs:1000,maxRetryDelayMs:8000}}}});var owner=hls;owner.attachMedia(video);owner.on(window.Hls.Events.MEDIA_ATTACHED,function(){prepareHlsSource(src,serial).then(function(finalSrc){if(serial===loadSerial&&hls===owner)owner.loadSource(finalSrc)})});owner.on(window.Hls.Events.MANIFEST_PARSED,function(){if(serial!==loadSerial)return;if(isActive()){fillAudio();fillSubs()}if(pendingRestore)pendingRestore.ready=true;startPlaybackLoad()});owner.on(window.Hls.Events.AUDIO_TRACKS_UPDATED,function(){if(serial===loadSerial&&isActive())fillAudio()});owner.on(window.Hls.Events.ERROR,function(_,d){if(serial!==loadSerial||hls!==owner)return;log('hls error',d&&d.type,d&&d.details,d&&d.fatal,d&&(d.frag&&d.frag.url||d.url||d.context&&d.context.url||d.response&&d.response.url)||'');if(d&&d.fatal){pendingRestore=null;playbackFailed(new Error(d.details||d.type||'Manifest\/player error'));if(isActive())B(root,'Manifest\/player error: '+(d.details||d.type||'unknown'))}})})}\n                        function pause(inactive){sampleWatch(true);playPending=false;sourceLoading=false;if(pendingRestore)pendingRestore.autoplay=false;video.pause();stopLoading();if(inactive)video.controls=false;watchMemory.resetAnchor()}\n                        function activate(){video.controls=true;qualityBtn.textContent=playerQuality.toUpperCase();if(isLoaded){fillAudio();fillSubs();if(pendingRestore&&pendingRestore.ready)startPlaybackLoad()}}\n                        function changeQuality(next){var position=video.currentTime||0,wasPlaying=!video.paused;playerQuality=next;load({position:position,autoplay:wasPlaying})}\n                        function selectAudio(i){var tracks=activeAudioTracks(),chosen=tracks[i]||null;audioPref=i;audioLangPref=(audioLangFromTrack(chosen,i)||audioLangPref||'en').toLowerCase();storageSet(LA,String(i));storageSet(LAL,audioLangPref);setCookie(LAL,audioLangPref);if(hls&&i>=0&&i<tracks.length){var position=video.currentTime||0,wasPlaying=!video.paused,serial=loadSerial;hls.audioTrack=i;if(wasPlaying)resumeLoading(-1);setTimeout(function(){if(serial!==loadSerial||!isActive())return;try{video.currentTime=position}catch(_e){}if(wasPlaying)safePlay();else{video.pause();stopLoading()}},80)}}\n                        video.addEventListener('play',function(){if(!isActive()){video.pause();return}if(!isLoaded){load({autoplay:true});return}focusPlayer();resumeLoading(-1);watchMemory.resetAnchor();stopAuto()});\n                        video.addEventListener('playing',function(){playPending=false;sourceLoading=false;if(!isActive()){pause(true);return}watchMemory.resetAnchor();sampleWatch(false);stopAuto()});\n                        video.addEventListener('pause',function(){playPending=false;sampleWatch(true);stopLoading();if(isActive()&&!video.ended&&docVisible&&state.isVisible&&!(pendingRestore&&pendingRestore.autoplay))pauseAuto();startAuto()});video.addEventListener('ended',function(){playPending=false;sourceLoading=false;pendingRestore=null;sampleWatch(true);watchMemory.resetAnchor();stopLoading();if(isActive())state.pauseUntil=0;startAuto()});\n                        video.addEventListener('error',function(){if(isLoaded){pendingRestore=null;playbackFailed(video.error||new Error('Video unavailable'))}});\n                        if(window.ResizeObserver){pstate.subtitleResizeObserver=new window.ResizeObserver(queueSubtitleLayout);pstate.subtitleResizeObserver.observe(video)}window.addEventListener('resize',queueSubtitleLayout);document.addEventListener('fullscreenchange',queueSubtitleLayout);video.addEventListener('webkitbeginfullscreen',queueSubtitleLayout);video.addEventListener('webkitendfullscreen',queueSubtitleLayout);video.addEventListener('timeupdate',function(){sampleWatch(false)});video.addEventListener('loadedmetadata',restorePlayback);video.addEventListener('durationchange',restorePlayback);video.addEventListener('canplay',restorePlayback);\n                        video.addEventListener('loadeddata',function(){if(video.paused&&!pendingRestore)stopLoading()});video.addEventListener('seeking',function(){watchMemory.resetAnchor();if(isActive())resumeLoading(video.currentTime)});video.addEventListener('seeked',function(){sampleWatch(true);if(video.paused&&!pendingRestore)stopLoading()});video.addEventListener('ratechange',function(){watchMemory.resetAnchor();sampleWatch(true)});\n                        if(video.textTracks&&video.textTracks.addEventListener)video.textTracks.addEventListener('change',syncNativeSubs);\n                        var player={video:video,loaded:function(){return isLoaded},playing:function(){return isLoaded&&(sourceLoading||playPending||(!video.paused&&!video.ended)||!!(pendingRestore&&pendingRestore.autoplay))},play:safePlay,load:load,pause:pause,activate:activate,quality:changeQuality,audio:selectAudio,subtitles:applySubs,restart:function(){watchMemory.restart(currentFolder);if(isLoaded){if(pendingRestore)pendingRestore.position=0;try{video.currentTime=0}catch(_e){}safePlay()}else load({position:0,autoplay:true})}};\n                        return player;\n                    }\n                    function playActive(options){var p=activePlayer();if(!p){p=createPlayer(slides[state.index],state.index);players[state.index]=p}if(!p.loaded())p.load(options||{});else{focusPlayer();if(options&&options.position===0)p.restart();else p.play()}}\n                    function blurFocus(){var p=activePlayer();if(p)p.pause(false);state.focused=false;root.classList.remove('is-focused');slides.forEach(function(slide){slide.classList.remove('is-focused')});startAuto()}\n                    viewport.addEventListener('pointerdown',function(e){if(slides.length<2||e.target.closest('video,a,select')||(e.target.closest('button')&&!e.target.closest('.cisvc__play'))||(e.pointerType==='mouse'&&e.button!==0))return;state.isDragging=true;root.classList.add('is-dragging');drag={id:e.pointerId,startX:e.clientX,startY:e.clientY,startTx:tx,dx:0,dy:0};stopAuto()});\n                    viewport.addEventListener('pointermove',function(e){if(!state.isDragging||drag.id!==e.pointerId)return;drag.dx=e.clientX-drag.startX;drag.dy=e.clientY-drag.startY;if(Math.abs(drag.dx)>Math.abs(drag.dy)){if(Math.abs(drag.dx)>=10){try{viewport.setPointerCapture(e.pointerId)}catch(_e){}}setX(drag.startTx+drag.dx,false)}});\n                    function endDrag(e){if(!state.isDragging||drag.id!==e.pointerId)return;state.isDragging=false;root.classList.remove('is-dragging');try{viewport.releasePointerCapture(e.pointerId)}catch(_e){}var moved=Math.max(Math.abs(drag.dx),Math.abs(drag.dy)),horizontal=Math.abs(drag.dx)>Math.abs(drag.dy),target=x2i(tx),cancelled=e.type==='pointercancel';drag.id=null;drag.dx=0;drag.dy=0;if(moved<10&&!cancelled){setX(i2x(state.index),true);startAuto();return}suppressUntil=Date.now()+650;if(horizontal&&!cancelled)setActive(target,true);else{setX(i2x(state.index),true);startAuto()}}\n                    viewport.addEventListener('pointerup',endDrag);viewport.addEventListener('pointercancel',endDrag);\n                    root.addEventListener('click',function(e){if(e.detail!==0&&Date.now()<suppressUntil){e.preventDefault();e.stopPropagation();return}var action=e.target.closest('[data-action]');if(action&&root.contains(action)){e.preventDefault();var name=action.getAttribute('data-action');if(name==='prev'){setActive(state.index-1,true);return}if(name==='next'){setActive(state.index+1,true);return}if(name==='quality'){var current=activePlayer(),next=(qualityBtn.textContent||quality).toLowerCase()==='hd'?'sd':'hd';quality=next;storageSet(LQ,next);qualityBtn.textContent=next.toUpperCase();if(current&&current.loaded())current.quality(next);return}}var play=e.target.closest('.cisvc__play');if(play&&root.contains(play)){e.preventDefault();var slide=play.closest('.cisvc__slide'),idx=parseInt(slide.getAttribute('data-index'),10);if(idx!==state.index)setActive(idx,true);playActive();return}if(e.target.closest('video,a,select,button'))return;var slide=e.target.closest('.cisvc__slide');if(slide&&root.contains(slide)){var idx=parseInt(slide.getAttribute('data-index'),10);if(idx!==state.index)setActive(idx,true)}});\n                    root.addEventListener('keydown',function(e){if(e.target.closest('video,select,input,textarea'))return;if(e.key==='ArrowLeft'&&slides.length>1){e.preventDefault();setActive(state.index-1,true)}if(e.key==='ArrowRight'&&slides.length>1){e.preventDefault();setActive(state.index+1,true)}if(e.key==='Escape'){e.preventDefault();blurFocus()}});\n                    document.addEventListener('pointerdown',function(e){if(!root.contains(e.target)){blurFocus();if(window.__cisvc_active_controller===api)window.__cisvc_active_controller=null}},true);\n                    document.addEventListener('visibilitychange',function(){docVisible=!document.hidden;var p=activePlayer();if(!docVisible&&p)p.pause(false);watchMemory.resetAnchor();if(docVisible)startAuto();else stopAuto()});\n                    if('IntersectionObserver'in window){var io=new IntersectionObserver(function(entries){entries.forEach(function(entry){if(entry.target===root){state.isVisible=entry.isIntersecting&&entry.intersectionRatio>=.3;if(state.isVisible)startAuto();else{var p=activePlayer();if(p)p.pause(false);stopAuto()}}})},{threshold:[0,.3,.6,1]});io.observe(root)}\n                    if(motionQuery&&motionQuery.addEventListener)motionQuery.addEventListener('change',function(e){reduced=e.matches;refreshProgress();startAuto()});\n                    window.addEventListener('resize',function(){setX(i2x(state.index),false)});window.addEventListener('pagehide',function(){Object.keys(players).forEach(function(key){players[key].pause(true)});watchMemory.save()});window.addEventListener('storage',function(e){if(e.key===watchMemory.key){watchMemory.refresh();refreshProgress()}});\n                    audio.addEventListener('change',function(){var p=activePlayer(),i=parseInt(audio.value,10);if(p&&Number.isFinite(i))p.audio(i)});subs.addEventListener('change',function(){subPref=subs.value;storageSet(LS,subPref);setCookie(LS,subPref);var p=activePlayer();if(p)p.subtitles(subPref)});\n                    var api={forceBlur:blurFocus};\n                    root.dataset.cisvcBooted='1';root.classList.add('is-booted');\n                    slides.forEach(function(slide,i){if(slide.querySelector('video'))players[i]=createPlayer(slide,i)});\n                    setActive(initialIndex>=0?initialIndex:0,false);refreshProgress();log('init',root.id,base);\n                }\n\n                function bootOne(root){try{init(root)}catch(err){console.error('[cisvc] boot error',err&&err.stack?err.stack:err);if(DEBUG_GLOBAL){console.log('[cisvc] errors caught',err&&err.message?err.message:String(err))}B(root,'Carousel boot exception: '+(err&&err.message?err.message:String(err)))}}\n                function boot(){G();A(document.querySelectorAll('.cisvc')).forEach(bootOne)}\n                if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',boot);else boot();\n            })();\n        <\/script>\n                                    <div class=\"sat-video-watch__summary\"><p>Gary explains the certificates issued after course completion and how QR-code validation helps people check the training recorded on a certificate. Use the course page for its current certificate inclusions and assessment requirements. A training certificate records education; it is not a promise of employment or permission to practise.<\/p><\/div><p><a href=\"https:\/\/skinarttraining.com\/za\/faq-videos\/\">All video guides<\/a> \u00b7 <a href=\"https:\/\/skinarttraining.com\/za\/shop\/\">Explore current course information<\/a><\/p><nav class=\"sat-video-watch__related\" aria-label=\"Related video guides\"><h2>Related video guides<\/h2><ul><li><a href=\"https:\/\/skinarttraining.com\/za\/faq-videos\/lessons-and-assignments\/\">How do Skinart lessons and assignments work?<\/a><\/li><li><a href=\"https:\/\/skinarttraining.com\/za\/faq-videos\/learning-practical-skills\/\">How do I learn practical body-art skills online?<\/a><\/li><li><a href=\"https:\/\/skinarttraining.com\/za\/faq-videos\/training-validation\/\">How does Skinart training validation work?<\/a><\/li><\/ul><\/nav><\/article>\n","protected":false},"excerpt":{"rendered":"<p>Gary explains Skinart course-completion certificates and QR-code training validation. See what the certificate records and where to check current course details.<\/p>\n","protected":false},"author":4043,"featured_media":0,"parent":2329,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"class_list":["post-2684","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/pages\/2684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/users\/4043"}],"replies":[{"embeddable":true,"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/comments?post=2684"}],"version-history":[{"count":1,"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/pages\/2684\/revisions"}],"predecessor-version":[{"id":2691,"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/pages\/2684\/revisions\/2691"}],"up":[{"embeddable":true,"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/pages\/2329"}],"wp:attachment":[{"href":"https:\/\/skinarttraining.com\/za\/wp-json\/wp\/v2\/media?parent=2684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}