/* Generated by scripts/build-glyphs.js from glyphs.js: edit those, then run it. */ /** * openvibe-shared/ov-glyphs.js — the OpenVibe glyphs (plan L32): the same hand as the mark (24-unit grid, 2-unit round * strokes), in the text's colour and size. * * any glyph by name (openvibe.design/icons lists them); a title names it * a brand logo, from brands.js (Simple Icons, CC0), fetched the first time one * shows, filled in the text's colour (add ovg-brand-color to wear the brand's) * class ovg-xs … ovg-3x, ovg-fw, ovg-rotate-90/180/270, ovg-flip-h/-v, ovg-solid, ovg-line, ovg-draw, ovg-once * OVGlyphs.icon('live', { title }) an element, drawn; OVGlyphs.html('live') its markup * * A spinner is the glyph busy: three dots that take turns, never a spin. Font Awesome markup () is still drawn with the glyph its name maps to, until every site writes data-ov-icon * (scripts/fa-to-ov.js rewrites a repository); a release after that drops it. * * Font Awesome's features keep working without its stylesheet (4.62.0): sizes (fa-2xs … fa-2xl, fa-1x … fa-10x), fa-fw, * fa-ul/fa-li, fa-border, fa-pull-*, fa-rotate-* and fa-flip-*, fa-stack, fa-layers with counters and text, the * animations (fa-beat, fa-bounce, fa-fade, fa-beat-fade, fa-flip, fa-shake; fa-spin breathes), fa-thin and fa-light * as thinner strokes, data-fa-transform (grow, shrink, up, down, left, right, rotate, flip-h, flip-v), and a title that * names the icon to screen readers. Every variable Font Awesome documents (--fa-beat-scale …) is honoured. The glyphs' * own motion: ovg-draw draws the lines in once, ovg-once plays an animation a single time (4.63.0). * * swaps what is in the page, then anything added later * OVGlyphs.swap(rootEl) swaps inside one element now * OVGlyphs.fromFa('fa-eye') → 'eye' the glyph a Font Awesome name maps to, or null * * 288 glyphs for 481 Font Awesome names (openvibe.design/icons shows them). */ (function () { 'use strict'; if (typeof window === 'undefined' || window.OVGlyphs) return; const G = {"airplane":"","alert":"","alert-circle":"","align-left":"","archive":"","arrow-down":"","arrow-left":"","arrow-right":"","arrow-up":"","arrows-h":"","at":"","back":"","ban":"","bell":"","bell-ring":"","binoculars":"","book":"","book-open":"","box":"","brain":"","branch":"","bridge":"","briefcase":"","bug":"","burst":"","busy":"","calendar":"","camera":"","camera-flip":"","camera-off":"","car":"","card":"","care":"","cart":"","cc":"","chart":"","chat":"","chat-off":"","check":"","check-circle":"","check-double":"","chevron":"","chevrons-left":"","chevrons-right":"","child":"","chip":"","circle":"","city":"","clapper":"","clipboard":"","clipboard-check":"","clock":"","close":"","cloud":"","cloud-off":"","code":"","coin":"","columns":"","commit":"","compass":"","compress":"","computer":"","contrast":"","cookie":"","copy":"","couch":"","cpu":"","crown":"","cubes":"","database":"","dice":"","dish":"","dollar":"","donate":"","door":"","down":"","download":"","drive":"","drop":"","ear":"","enter":"","eraser":"","expand":"","eye":"","eye-off":"","fast-forward":"","file":"","file-code":"","film":"","filter":"","finish":"","fire":"","fish":"","fist":"","flag":"","flame":"","flask":"","focus":"","folder":"","folder-tree":"","food":"","forward":"","game":"","gauge":"","gavel":"","gear":"","gem":"","ghost":"","gift":"","globe":"","gpu":"","grid":"","grip":"","group":"","hammer":"","hand":"","handshake":"","hash":"","heading":"","headphones":"","heart":"","heart-broken":"","heart-pulse":"","help":"","history":"","home":"","hot-tub":"","hourglass":"","id":"","idea":"","image":"","inbox":"","infinity":"","info":"","invite":"","joystick":"","key":"","keyboard":"","language":"","laugh":"","layers":"","layers-plus":"","leaf":"","leave":"","lifebuoy":"","link":"","link-off":"","list":"","list-ordered":"","live":"","lock":"","lungs":"","mail":"","map":"","mask":"","medical":"","megaphone":"","members":"","memory":"","menu":"","mic":"","mic-off":"","microscope":"","minus":"","minus-circle":"","money":"","moon":"","more":"","mountain":"","move":"","mug":"","music":"","mute":"","news":"","nodes":"","open":"","palette":"","parking":"","pause":"","paw":"","pencil":"","phone":"","phone-off":"","piggy":"","pin":"","plane":"","play":"","plug":"","plus":"","plus-circle":"","print":"","puzzle":"","quote":"","radio":"","ranking":"","record":"","recycle":"","reply":"","restroom":"","retry":"","rewind":"","road":"","robot":"","rocket":"","route":"","rss":"","save":"","scale":"","scissors":"","scroll":"","search":"","seedling":"","send":"","server":"","shapes":"","share":"","shelter":"","shield":"","shirt":"","shoe":"","sidebar":"","signature":"","skip":"","skull":"","slash":"","sliders":"","smile":"","snow":"","sort":"","sort-asc":"","spark":"","square":"","star":"","steps":"","stop":"","store":"","storm":"","sun":"","swap":"","sword":"","table":"","tack":"","tag":"","target":"","task":"","telescope":"","tent":"","terminal":"","text":"","thumbs-up":"","ticket":"","timeline":"","toolbox":"","train":"","trash":"","tree":"","trend-down":"","trend-up":"","trophy":"","tv":"","umbrella":"","undo":"","up":"","upload":"","user":"","user-check":"","user-circle":"","user-lock":"","user-minus":"","user-off":"","user-pen":"","user-tag":"","video":"","volume":"","walk":"","wallet":"","wand":"","water":"","wave":"","weight":"","wifi":"","wind":"","window":"","window-restore":"","wizard":"","wrench":"","x-circle":"","zap":""}; const S = {"airplane":"","alert":"","alert-circle":"","archive":"","bell":"","binoculars":"","book":"","book-open":"","box":"","brain":"","bridge":"","briefcase":"","bug":"","burst":"","calendar":"","camera":"","camera-flip":"","camera-off":"","car":"","card":"","care":"","cart":"","cc":"","chart":"","chat":"","chat-off":"","check-circle":"","child":"","chip":"","circle":"","city":"","clapper":"","clipboard":"","clipboard-check":"","clock":"","cloud":"","cloud-off":"","coin":"","columns":"","compass":"","compress":"","computer":"","contrast":"","cookie":"","copy":"","couch":"","cpu":"","crown":"","cubes":"","database":"","dice":"","dish":"","donate":"","door":"","download":"","drive":"","drop":"","eraser":"","expand":"","eye":"","eye-off":"","fast-forward":"","file":"","file-code":"","film":"","finish":"","fire":"","fish":"","flag":"","flame":"","focus":"","folder":"","folder-tree":"","food":"","game":"","gauge":"","gavel":"","gear":"","gem":"","ghost":"","gift":"","globe":"","gpu":"","grid":"","group":"","hammer":"","hand":"","handshake":"","headphones":"","heart":"","heart-broken":"","help":"","history":"","home":"","hot-tub":"","id":"","idea":"","image":"","inbox":"","info":"","invite":"","joystick":"","key":"","keyboard":"","laugh":"","layers":"","layers-plus":"","leaf":"","lifebuoy":"","live":"","lock":"","mail":"","map":"","mask":"","medical":"","megaphone":"","members":"","memory":"","mic":"","mic-off":"","microscope":"","minus-circle":"","money":"","moon":"","more":"","mountain":"","mug":"","music":"","mute":"","news":"","nodes":"","palette":"","parking":"","pause":"","paw":"","pencil":"","phone":"","piggy":"","pin":"","plane":"","play":"","plug":"","plus-circle":"","print":"","puzzle":"","radio":"","ranking":"","record":"","restroom":"","retry":"","rewind":"","robot":"","rocket":"","save":"","scissors":"","search":"","seedling":"","server":"","shapes":"","shelter":"","shield":"","shirt":"","shoe":"","sidebar":"","skip":"","skull":"","sliders":"","smile":"","spark":"","square":"","star":"","steps":"","store":"","sun":"","sword":"","table":"","tack":"","tag":"","target":"","task":"","telescope":"","tent":"","terminal":"","text":"","thumbs-up":"","ticket":"","toolbox":"","train":"","trash":"","tree":"","trophy":"","tv":"","umbrella":"","upload":"","user":"","user-check":"","user-circle":"","user-lock":"","user-minus":"","user-off":"","user-pen":"","user-tag":"","video":"","volume":"","walk":"","wallet":"","wand":"","water":"","weight":"","window":"","window-restore":"","wrench":"","x-circle":"","zap":""}; const FA = {"address-card":"id","adjust":"contrast","align-left":"align-left","angle-down":"down","angle-right":"chevron","angles-left":"chevrons-left","angles-right":"chevrons-right","apple-whole":"food","arrow-down":"arrow-down","arrow-down-short-wide":"sort-asc","arrow-down-wide-short":"sort","arrow-left":"arrow-left","arrow-right":"arrow-right","arrow-right-arrow-left":"swap","arrow-right-from-bracket":"leave","arrow-right-to-bracket":"enter","arrow-rotate-left":"undo","arrow-rotate-right":"retry","arrow-trend-down":"trend-down","arrow-trend-up":"trend-up","arrow-up":"arrow-up","arrow-up-from-bracket":"share","arrow-up-right-from-square":"open","arrows-left-right":"arrows-h","arrows-rotate":"retry","arrows-to-dot":"focus","arrows-up-down-left-right":"move","at":"at","backpack":"briefcase","backward":"rewind","backward-fast":"rewind","balance-scale":"scale","ban":"ban","bars":"menu","basket-shopping":"cart","bell":"bell","binoculars":"binoculars","bolt":"zap","bolt-lightning":"zap","book":"book","book-open":"book-open","book-skull":"book","box":"box","box-archive":"archive","box-open":"box","brain":"brain","bridge":"bridge","briefcase":"briefcase","briefcase-medical":"medical","broadcast":"live","broadcast-tower":"live","bug":"bug","bullhorn":"megaphone","bullseye":"target","burst":"burst","calendar":"calendar","calendar-check":"calendar","calendar-day":"calendar","calendar-days":"calendar","camera":"camera","camera-cctv":"camera","camera-retro":"camera","camera-rotate":"camera-flip","camera-slash":"camera-off","campground":"tent","car":"car","caret-down":"down","cart":"cart","cart-plus":"cart","cart-shopping":"cart","chart-area":"chart","chart-bar":"chart","chart-column":"chart","chart-line":"chart","chart-pie":"chart","chart-simple":"chart","check":"check","check-circle":"check-circle","check-double":"check-double","chevron-down":"down","chevron-left":"back","chevron-right":"chevron","chevron-up":"up","child":"child","circle":"circle","circle-check":"check-circle","circle-dollar-to-slot":"donate","circle-dot":"record","circle-exclamation":"alert-circle","circle-half-stroke":"contrast","circle-info":"info","circle-minus":"minus-circle","circle-nodes":"nodes","circle-notch":"busy","circle-play":"play","circle-plus":"plus-circle","circle-question":"help","circle-user":"user-circle","circle-xmark":"x-circle","city":"city","clapperboard":"clapper","clip":"scissors","clipboard":"clipboard","clipboard-check":"clipboard-check","clipboard-list":"clipboard","clock":"clock","clock-rotate-left":"history","clone":"copy","closed-captioning":"cc","cloud":"cloud","cloud-arrow-down":"download","cloud-arrow-up":"upload","cloud-bolt":"storm","cloud-moon":"cloud","cloud-rain":"cloud","cloud-showers-heavy":"cloud","cloud-slash":"cloud-off","cloud-sun":"cloud","code":"code","code-branch":"branch","code-commit":"commit","code-fork":"branch","coin":"coin","coins":"coin","comment":"chat","comment-dots":"chat","comment-slash":"chat-off","comments":"chat","compass":"compass","compress":"compress","cookie":"cookie","cookie-bite":"cookie","copy":"copy","couch":"couch","cpu":"cpu","credit-card":"card","crosshairs":"target","crown":"crown","cube":"box","cubes":"cubes","cut":"scissors","database":"database","desktop":"computer","diagram-project":"nodes","dice":"dice","dice-five":"dice","dice-six":"dice","display":"computer","dollar-sign":"dollar","door-closed":"door","door-open":"door","down-left-and-up-right-to-center":"compress","download":"download","droplet":"drop","ear-listen":"ear","earth-americas":"globe","earth-europe":"globe","ellipsis":"more","ellipsis-vertical":"more","envelope":"mail","eraser":"eraser","exchange-alt":"swap","expand":"expand","external-link":"open","eye":"eye","eye-slash":"eye-off","face-grin":"laugh","face-grin-squint":"laugh","face-grin-squint-tears":"laugh","face-grin-stars":"smile","face-laugh":"laugh","face-smile":"smile","faucet":"drop","faucet-drip":"drop","file":"file","file-audio":"file","file-code":"file-code","file-image":"image","file-lines":"file","file-pdf":"file","file-pen":"pencil","film":"film","filter":"filter","fire":"fire","fish":"fish","fist-raised":"fist","flag":"flag","flag-checkered":"finish","flask":"flask","flask-vial":"flask","floppy-disk":"save","folder":"folder","folder-open":"folder","folder-tree":"folder-tree","font":"text","forward":"fast-forward","forward-fast":"fast-forward","forward-step":"skip","gamepad":"game","gauge":"gauge","gauge-high":"gauge","gauge-simple":"gauge","gauge-simple-high":"gauge","gauge-simple-low":"gauge","gavel":"gavel","gear":"gear","gears":"gear","gem":"gem","ghost":"ghost","gift":"gift","globe":"globe","globe-americas":"globe","gpu":"gpu","grid":"grid","grip":"grip","grip-vertical":"grip","hammer":"hammer","hand":"hand","hand-fist":"fist","hand-holding-dollar":"coin","hand-holding-heart":"care","hand-point-right":"hand","hand-pointer":"hand","handshake":"handshake","handshake-angle":"handshake","hard-drive":"drive","hashtag":"hash","hat-wizard":"wizard","hdd":"drive","heading":"heading","headphones":"headphones","headphones-simple":"headphones","headset":"headphones","heart":"heart","heart-crack":"heart-broken","heart-pulse":"heart-pulse","heartbeat":"heart-pulse","hiking":"mountain","hot-tub":"hot-tub","hot-tub-person":"hot-tub","hourglass":"hourglass","hourglass-end":"hourglass","hourglass-half":"hourglass","hourglass-start":"hourglass","house":"home","house-chimney":"home","house-signal":"home","icicles":"snow","icons":"shapes","id-card":"id","image":"image","images":"image","inbox":"inbox","infinity":"infinity","info-circle":"info","joystick":"joystick","key":"key","keyboard":"keyboard","kit-medical":"medical","language":"language","laptop":"computer","layer-group":"layers","leaf":"leaf","left-right":"arrows-h","life-ring":"lifebuoy","lightbulb":"idea","link":"link","link-slash":"link-off","list":"list","list-check":"steps","list-ol":"list-ordered","list-ul":"list","location-crosshairs":"target","location-dot":"pin","location-pin":"pin","lock":"lock","lungs":"lungs","magnifying-glass":"search","magnifying-glass-chart":"chart","magnifying-glass-dollar":"search","magnifying-glass-location":"search","map":"map","map-location-dot":"map","map-marker-alt":"pin","map-pin":"pin","mask":"mask","memory":"memory","message":"chat","microchip":"chip","microphone":"mic","microphone-lines":"mic","microphone-slash":"mic-off","microscope":"microscope","minus":"minus","minus-circle":"minus-circle","mobile-screen":"phone","mobile-screen-button":"phone","money-bill":"money","money-bill-1":"money","money-bill-transfer":"money","money-bill-wave":"money","money-check":"money","moon":"moon","mountain":"mountain","mountain-sun":"mountain","mug-hot":"mug","mug-saucer":"mug","music":"music","network-wired":"nodes","newspaper":"news","object-group":"group","openstreetmap":"map","paint-brush":"palette","paintbrush":"palette","palette":"palette","paper-plane":"plane","parking":"parking","paste":"clipboard","pause":"pause","paw":"paw","pen":"pencil","pen-nib":"pencil","pen-to-square":"pencil","pencil":"pencil","people-arrows":"members","people-group":"members","person-hiking":"mountain","person-shelter":"shelter","person-swimming":"water","person-walking":"walk","phone":"phone","phone-slash":"phone-off","photo-film":"film","piggy-bank":"piggy","plane":"airplane","plane-departure":"airplane","play":"play","plug":"plug","plug-circle-bolt":"plug","plug-circle-check":"plug","plug-circle-plus":"plug","plug-circle-xmark":"plug","plus":"plus","plus-circle":"plus-circle","power-off":"stop","print":"print","puzzle":"puzzle","puzzle-piece":"puzzle","puzzle-piece-simple":"puzzle","question":"help","quote-left":"quote","quote-right":"quote","radio":"radio","ram":"memory","ranking-star":"ranking","receipt":"ticket","recycle":"recycle","reply":"reply","restroom":"restroom","right-from-bracket":"leave","right-left":"swap","right-to-bracket":"enter","road":"road","robot":"robot","rocket":"rocket","rotate":"retry","rotate-back":"undo","rotate-left":"retry","rotate-right":"retry","route":"route","rss":"rss","satellite":"image","satellite-dish":"dish","save":"save","scale-balanced":"scale","scissors":"scissors","screwdriver-wrench":"wrench","scroll":"scroll","search":"search","seedling":"seedling","server":"server","shapes":"shapes","share-nodes":"nodes","shield":"shield","shield-halved":"shield","shield-heart":"shield","shirt":"shirt","shoe-prints":"walk","signal":"wifi","signature":"signature","sitemap":"nodes","skull":"skull","skull-crossbones":"skull","slash":"slash","sliders":"sliders","sliders-h":"sliders","smog":"cloud","snowflake":"snow","sparkles":"spark","spinner":"busy","square":"square","square-parking":"parking","star":"star","star-of-life":"spark","step-forward":"skip","stop":"stop","store":"store","street-view":"walk","suitcase":"briefcase","suitcase-medical":"medical","sun":"sun","sword":"sword","table":"table","table-cells":"grid","table-columns":"columns","table-list":"table","tag":"tag","tags":"tag","telescope":"telescope","television":"tv","terminal":"terminal","text-height":"text","th":"grid","thumbs-up":"thumbs-up","thumbtack":"tack","ticket":"ticket","timeline":"timeline","times":"close","toolbox":"toolbox","tower-broadcast":"live","tower-cell":"live","train":"train","trash":"trash","trash-can":"trash","tree":"tree","triangle-exclamation":"alert","trophy":"trophy","tv":"tv","umbrella":"umbrella","umbrella-beach":"umbrella","undo":"undo","unlock":"lock","up-right-and-down-left-from-center":"expand","up-right-from-square":"open","upload":"upload","user":"user","user-astronaut":"user","user-check":"user-check","user-circle":"user-circle","user-edit":"user-pen","user-group":"members","user-lock":"user-lock","user-minus":"user-minus","user-pen":"user-pen","user-plus":"invite","user-secret":"user","user-shield":"shield","user-slash":"user-off","user-tag":"user-tag","users":"members","utensils":"food","video":"video","video-slash":"video","volume-high":"volume","volume-low":"volume","volume-off":"mute","volume-xmark":"mute","wallet":"wallet","wand-magic":"wand","wand-magic-sparkles":"wand","wand-sparkles":"wand","water":"water","wave-square":"wave","weight-hanging":"weight","wifi":"wifi","wind":"wind","window-maximize":"window","window-restore":"window-restore","wrench":"wrench","xmark":"close","xmark-circle":"x-circle"}; const FB = {"reddit-alien":"reddit","kickstarter-k":"kick","youtube":"youtube","square-youtube":"youtube","twitch":"twitch","discord":"discord","github":"github","square-github":"github","x-twitter":"x","square-x-twitter":"x","twitter":"x","kick":"kick","kickstarter":"kickstarter","google":"google","tiktok":"tiktok","threads":"threads","spotify":"spotify","soundcloud":"soundcloud","reddit":"reddit","tumblr":"tumblr","hacker-news":"ycombinator","line":"line","paypal":"paypal","patreon":"patreon","mastodon":"mastodon","linux":"linux","instagram":"instagram","facebook":"facebook","facebook-f":"facebook","cloudflare":"cloudflare","brave":"brave","bluesky":"bluesky","bitcoin":"bitcoin","apple":"apple","telegram":"telegram","whatsapp":"whatsapp","steam":"steam","snapchat":"snapchat","pinterest":"pinterest","vimeo":"vimeo","vimeo-v":"vimeo","npm":"npm","node":"nodedotjs","node-js":"nodedotjs","docker":"docker","python":"python","android":"android","chrome":"googlechrome","firefox":"firefoxbrowser","firefox-browser":"firefoxbrowser","gitlab":"gitlab","ubuntu":"ubuntu","raspberry":"raspberrypi","raspberry-pi":"raspberrypi","stripe":"stripe","cc-stripe":"stripe","signal":"signal","matrix":"matrix","medium":"medium","wikipedia":"wikipedia","wikipedia-w":"wikipedia","ethereum":"ethereum"}; // Font Awesome's style, size, layout and animation classes: they say how, not what. const MOD = /^fa-(solid|regular|light|thin|duotone|sharp|sharp-duotone|classic|brands|fw|lg|xl|xs|sm|2xs|2xl|[0-9]+x|spin|spin-pulse|spin-reverse|pulse|beat|beat-fade|bounce|fade|flip|shake|border|inverse|li|ul|stack|stack-1x|stack-2x|layers|layers-text|layers-counter|pull-left|pull-right|rotate-[0-9]+|rotate-by|flip-horizontal|flip-vertical|flip-both|swap-opacity|width-auto|width-fixed)$/; const BUSY = ''; const CSS = ".ovg::before,.ovg::after{content:none!important;display:none!important}.ovg{display:inline-block;width:1.15em;height:1.15em;line-height:1;vertical-align:-.18em;font-family:inherit!important;font-style:normal!important}.ovg>svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:calc(var(--ovg-stroke,2) * 1px + max(0px, (18.4px - 1.15em) * .25));stroke-linecap:round;stroke-linejoin:round;overflow:visible}html[data-ov-icons=solid]{--ovg-pref:99999px}html[data-ov-icons=line]{--ovg-pref:0px}.ovg>svg.has-s{stroke-width:min(var(--ovg-stroke,2) * 1px + max(0px, (18.4px - 1.15em) * .25), max(0px, (1.15em - var(--ovg-pref, var(--ovg-solid-below, 18.4px))) * 999))}.ovg>svg>.ovg-s{fill:currentColor;stroke:none;clip-path:inset(max(0px, (1.15em - var(--ovg-pref, var(--ovg-solid-below, 18.4px))) * 999))}.ovg>svg>.ovg-s .ln{fill:none;stroke:currentColor;stroke-width:2.6px}.ovg>svg>.ovg-s,.ovg>svg>.ovg-s *{stroke-dasharray:none!important;animation:none!important}.ovg.ovg-solid>svg.has-s{stroke-width:0}.ovg.ovg-solid>svg>.ovg-s{clip-path:none}.ovg.ovg-line>svg.has-s{stroke-width:calc(var(--ovg-stroke,2) * 1px + max(0px, (18.4px - 1.15em) * .25))}.ovg.ovg-line>svg>.ovg-s{clip-path:inset(50%)}.ovg.ovg-thin{--ovg-stroke:1}.ovg.ovg-light{--ovg-stroke:1.5}.ovg.ovg-regular{--ovg-stroke:2}.ovg.ovg-bold{--ovg-stroke:2.5}.ovg.ovg-duotone>svg>.ovg-s{clip-path:none;opacity:.2;fill:var(--ovg-duotone-color,currentColor)}.ovg.ovg-duotone>svg.has-s{stroke-width:var(--ovg-stroke,2)}:where([aria-current=page],[aria-current=true],[aria-pressed=true],[aria-selected=true],.is-here)>.ovg:not(.ovg-line)>svg.has-s{stroke-width:0}:where([aria-current=page],[aria-current=true],[aria-pressed=true],[aria-selected=true],.is-here)>.ovg:not(.ovg-line)>svg>.ovg-s{clip-path:none}.ovg.ovg-brand>svg{fill:currentColor;stroke:none}.ovg.ovg-brand.ovg-brand-color{color:var(--ovg-brand)}.ovg.fa-thin{--ovg-stroke:1}.ovg.fa-light{--ovg-stroke:1.5}.ovg.fa-solid{--ovg-solid-below:99999px}.ovg.fa-duotone{--ovg-duotone-color:var(--fa-secondary-color,currentColor)}.ovg.fa-duotone>svg{stroke:var(--fa-primary-color,currentColor)}.ovg.fa-2xs{font-size:.625em}.ovg.fa-xs{font-size:.75em}.ovg.fa-sm{font-size:.875em}.ovg.fa-lg{font-size:1.25em}.ovg.fa-xl{font-size:1.5em}.ovg.fa-2xl{font-size:2em}.ovg.fa-1x{font-size:1em}.ovg.fa-2x{font-size:2em}.ovg.fa-3x{font-size:3em}.ovg.fa-4x{font-size:4em}.ovg.fa-5x{font-size:5em}.ovg.fa-6x{font-size:6em}.ovg.fa-7x{font-size:7em}.ovg.fa-8x{font-size:8em}.ovg.fa-9x{font-size:9em}.ovg.fa-10x{font-size:10em}.ovg.fa-fw{width:1.25em;text-align:center}.ovg.ovg-fill{--ovg-solid-below:99999px}.ovg.ovg-xs{font-size:.75em}.ovg.ovg-sm{font-size:.875em}.ovg.ovg-lg{font-size:1.25em}.ovg.ovg-xl{font-size:1.5em}.ovg.ovg-2x{font-size:2em}.ovg.ovg-3x{font-size:3em}.ovg.ovg-fw{width:1.25em;text-align:center}.ovg.ovg-rotate-90>svg{transform:rotate(90deg)}.ovg.ovg-rotate-180>svg{transform:rotate(180deg)}.ovg.ovg-rotate-270>svg{transform:rotate(270deg)}.ovg.ovg-flip-h>svg{transform:scale(-1,1)}.ovg.ovg-flip-v>svg{transform:scale(1,-1)}.ovg.fa-border{box-sizing:content-box;border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);padding:var(--fa-border-padding,.2em .25em .15em)}.ovg.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.ovg.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.ovg.fa-rotate-90>svg{transform:rotate(90deg)}.ovg.fa-rotate-180>svg{transform:rotate(180deg)}.ovg.fa-rotate-270>svg{transform:rotate(270deg)}.ovg.fa-rotate-by>svg{transform:rotate(var(--fa-rotate-angle,0))}.ovg.fa-flip-horizontal>svg{transform:scale(-1,1)}.ovg.fa-flip-vertical>svg{transform:scale(1,-1)}.ovg.fa-flip-both>svg{transform:scale(-1,-1)}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{position:absolute;left:calc(var(--fa-li-width,2em)*-1);width:var(--fa-li-width,2em);text-align:center;line-height:inherit}.fa-stack{display:inline-block;position:relative;width:2.5em;height:2em;line-height:2em;vertical-align:middle}.fa-stack>.ovg{position:absolute;inset:0;margin:auto;width:1em;height:1em}.fa-stack>.ovg.fa-stack-2x{font-size:2em}.ovg.fa-inverse{color:var(--fa-inverse,#fff)}.fa-layers{display:inline-block;position:relative;width:1em;height:1em;text-align:center;vertical-align:-.125em}.fa-layers>.ovg{position:absolute;inset:0;margin:auto;width:1em;height:1em}.fa-layers-text{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:inline-block}.fa-layers-counter{position:absolute;top:var(--fa-top,0);right:var(--fa-right,0);display:inline-block;box-sizing:border-box;min-width:var(--fa-counter-min-width,1.5em);max-width:var(--fa-counter-max-width,5em);padding:var(--fa-counter-padding,.25em .5em);border-radius:var(--fa-counter-border-radius,1em);background:var(--fa-counter-background-color,#ff253a);color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transform:scale(var(--fa-counter-scale,.25));transform-origin:top right}.ovg.fa-beat{animation:ovgBeat var(--fa-animation-duration,1s) var(--fa-animation-timing,ease-in-out) var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite) var(--fa-animation-direction,normal)}.ovg.fa-bounce{animation:ovgBounce var(--fa-animation-duration,1s) var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1)) var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite) var(--fa-animation-direction,normal)}.ovg.fa-fade{animation:ovgFade var(--fa-animation-duration,1s) var(--fa-animation-timing,cubic-bezier(.4,0,.6,1)) var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite) var(--fa-animation-direction,normal)}.ovg.fa-beat-fade{animation:ovgBeatFade var(--fa-animation-duration,1s) var(--fa-animation-timing,cubic-bezier(.4,0,.6,1)) var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite) var(--fa-animation-direction,normal)}.ovg.fa-flip{animation:ovgFlip var(--fa-animation-duration,1s) var(--fa-animation-timing,ease-in-out) var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite) var(--fa-animation-direction,normal)}.ovg.fa-shake{animation:ovgShake var(--fa-animation-duration,1s) var(--fa-animation-timing,linear) var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite) var(--fa-animation-direction,normal)}.ovg.fa-spin,.ovg.fa-pulse,.ovg.fa-spin-pulse{animation:ovgBreathe var(--fa-animation-duration,1.6s) ease-in-out var(--fa-animation-delay,0s) var(--fa-animation-iteration-count,infinite)!important}.ovg[data-ovg=busy].fa-spin,.ovg[data-ovg=busy].fa-pulse,.ovg[data-ovg=busy].fa-spin-pulse{animation:none!important}@keyframes ovgBeat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes ovgBounce{0%{transform:scale(1,1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%,100%{transform:scale(1,1) translateY(0)}}@keyframes ovgFade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes ovgBeatFade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes ovgFlip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes ovgShake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,100%{transform:rotate(0)}}@keyframes ovgBreathe{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.9)}}.ovg.ovg-draw>svg>*{stroke-dasharray:1;stroke-dashoffset:1;animation:ovgDraw var(--ovg-draw-duration,.6s) cubic-bezier(.4,0,.2,1) var(--ovg-draw-delay,0s) forwards}.ovg.ovg-draw>svg>*:nth-child(2){animation-delay:calc(var(--ovg-draw-delay,0s) + .12s)}.ovg.ovg-draw>svg>*:nth-child(n+3){animation-delay:calc(var(--ovg-draw-delay,0s) + .24s)}@keyframes ovgDraw{to{stroke-dashoffset:0}}.ovg.ovg-once{--fa-animation-iteration-count:1}.ovg[data-ovg=busy]>svg{fill:currentColor;stroke:none}.ovg[data-ovg=busy] circle{animation:ovgHop 1s ease-in-out infinite;transform-box:fill-box;transform-origin:center}.ovg[data-ovg=busy] circle:nth-child(2){animation-delay:.15s}.ovg[data-ovg=busy] circle:nth-child(3){animation-delay:.3s}@keyframes ovgHop{0%,60%,100%{transform:translateY(0);opacity:.55}30%{transform:translateY(-3px);opacity:1}}html[data-ov-motion=off] .ovg,html[data-ov-motion=off] .ovg[data-ovg=busy] circle,html[data-ov-motion=off] .ovg.ovg-draw>svg>*{animation:none!important;stroke-dashoffset:0!important}"; const nameOf = (el) => { for (const c of el.classList) if (c.startsWith('fa-') && !MOD.test(c)) return c.slice(3); return null; }; const fromFa = (fa) => { const n = String(fa || '').replace(/^fa-/, ''); return Object.prototype.hasOwnProperty.call(FA, n) ? FA[n] : null; }; // data-fa-transform, in Font Awesome's units (a sixteenth of the icon). const TF = /^(grow|shrink|up|down|left|right|rotate)-(-?[0-9.]+)$|^flip-(h|v)$/; function transformOf(spec) { let s = 1, x = 0, y = 0, r = 0, fx = 1, fy = 1, any = false; for (const p of String(spec || '').toLowerCase().split(/\s+/)) { const m = TF.exec(p); if (!m) continue; any = true; if (m[3]) { if (m[3] === 'h') fx = -1; else fy = -1; continue; } const n = Number(m[2]); if (m[1] === 'grow') s += n / 16; else if (m[1] === 'shrink') s -= n / 16; else if (m[1] === 'up') y -= n / 16; else if (m[1] === 'down') y += n / 16; else if (m[1] === 'left') x -= n / 16; else if (m[1] === 'right') x += n / 16; else r += n; } return any ? 'translate(' + x + 'em,' + y + 'em) rotate(' + r + 'deg) scale(' + (fx * s) + ',' + (fy * s) + ')' : ''; } // Brand logos (4.72.0): brands.js from beside this script, once, then every waiting element is drawn. const SRC = (document.currentScript && document.currentScript.src) || ''; let brandState = 0; // 0 idle, 1 loading, 2 ready, 3 unavailable const waiting = new Set(); const BRANDS_REV = '3548611c3e72'; // A logo far below the fold (a footer's social links) waits until it comes near the screen (4.138.0): most visits // never get there, and brands.js is 26 KB. One that is in view, or hidden in a closed fold that opens, loads then. let brandSeen = null; function wantBrands(el) { if (brandState || typeof IntersectionObserver !== 'function' || !el.getBoundingClientRect) { loadBrands(); return; } const r = el.getBoundingClientRect(); if ((r.width || r.height) && r.bottom > -800 && r.top < (window.innerHeight || 0) + 800) { loadBrands(); return; } brandSeen = brandSeen || new IntersectionObserver((es) => { if (es.some((e) => e.isIntersecting)) { brandSeen.disconnect(); brandSeen = null; loadBrands(); } }, { rootMargin: '800px 0px' }); brandSeen.observe(el); } function loadBrands() { if (brandState) return; if (window.OVBrands) { brandState = 2; return; } brandState = 1; // No backslashes here: this text is inside a template literal. const base = SRC ? SRC.split(/[?#]/)[0] : ''; const dir = base && /ov-glyphs[.]js$/.test(base) ? base.slice(0, base.lastIndexOf('/') + 1) : 'https://openvibe.network/shared/'; const sc = document.createElement('script'); sc.src = dir + 'brands.js' + (BRANDS_REV ? '?v=' + BRANDS_REV : ''); sc.async = true; sc.onload = () => { brandState = window.OVBrands ? 2 : 3; waiting.forEach((el) => draw(el)); waiting.clear(); }; sc.onerror = () => { brandState = 3; waiting.clear(); }; document.head.appendChild(sc); } function drawBrand(el, own) { let fa = null; if (own == null) for (const c of el.classList) if (c.startsWith('fa-') && c !== 'fa-brands' && !MOD.test(c) && Object.prototype.hasOwnProperty.call(FB, c.slice(3))) { fa = c.slice(3); break; } if (own == null && !fa) return; const slug = own != null ? own : FB[fa]; if (el.dataset.ovg === 'brand:' + slug) return; if (!window.OVBrands) { if (brandState !== 3) { waiting.add(el); wantBrands(el); } return; } const b = window.OVBrands.get(slug); if (!b || (!el.dataset.ovg && el.textContent.trim())) return; el.classList.add('ovg', 'ovg-brand'); el.dataset.ovg = 'brand:' + slug; if (fa) el.dataset.ovgFa = fa; // A near-black brand (GitHub, X, Apple…) would vanish on a dark page: it wears the text's colour instead. const n = parseInt(b.hex.slice(1), 16), lum = (0.2126 * (n >> 16) + 0.7152 * ((n >> 8) & 255) + 0.0722 * (n & 255)) / 255; el.style.setProperty('--ovg-brand', lum < 0.12 ? 'currentColor' : b.hex); const title = el.getAttribute('title'); if (title && !el.hasAttribute('aria-label')) { el.setAttribute('role', 'img'); el.setAttribute('aria-label', title); } else if (!el.hasAttribute('aria-label') && !title) el.setAttribute('aria-hidden', 'true'); el.innerHTML = ''; } // OpenVibe's own markup (4.231.0): data-ov-brand names a logo by its slug, data-ov-icon a glyph by its name. function drawNative(el, name) { const g = name === 'busy' || Object.prototype.hasOwnProperty.call(G, name) ? name : null; if (!g) { if (el.dataset.ovg) { el.classList.remove('ovg'); delete el.dataset.ovg; el.textContent = ''; } return; } if (el.dataset.ovg === g && el.firstChild) { if (!el.classList.contains('ovg')) el.classList.add('ovg'); return; } el.classList.add('ovg'); el.dataset.ovg = g; paint(el, g, ''); } function paint(el, g, t) { const title = el.getAttribute('title'); if (title && !el.hasAttribute('aria-label')) { el.setAttribute('role', 'img'); el.setAttribute('aria-label', title); } else if (!el.hasAttribute('aria-label') && !title) el.setAttribute('aria-hidden', 'true'); el.innerHTML = ''; // ovg-draw draws each line in: every shape measures 1 along its length. if (el.classList.contains('ovg-draw')) el.firstChild.childNodes.forEach((n) => { if (n.setAttribute) n.setAttribute('pathLength', '1'); }); } function draw(el) { const own = el.getAttribute('data-ov-icon'); if (own != null) return drawNative(el, own.trim()); const brand = el.getAttribute('data-ov-brand'); if (brand != null) return drawBrand(el, brand.trim()); if (el.classList.contains('fa-brands') || el.classList.contains('fab')) return drawBrand(el); const fa = nameOf(el); const g = fa && fromFa(fa); if (!g) { if (el.dataset.ovg) { el.classList.remove('ovg'); delete el.dataset.ovg; delete el.dataset.ovgFa; delete el.dataset.ovgTf; el.textContent = ''; } return; } const tf = el.getAttribute('data-fa-transform') || ''; if (el.dataset.ovgFa === fa && (el.dataset.ovgTf || '') === tf) { if (!el.classList.contains('ovg')) el.classList.add('ovg'); return; } // adding a class it has would observe itself forever if (!el.dataset.ovg && el.textContent.trim()) return; // an icon element with text of its own is not an icon el.classList.add('ovg'); el.dataset.ovg = g; el.dataset.ovgFa = fa; if (tf) el.dataset.ovgTf = tf; else delete el.dataset.ovgTf; paint(el, g, transformOf(tf)); } const SEL = '[data-ov-icon],[data-ov-brand],i[class*="fa-"],span[class*="fa-"]'; function swap(root) { const r = root || document; if (r.matches && r.matches(SEL)) draw(r); if (r.querySelectorAll) r.querySelectorAll(SEL).forEach(draw); } function start() { if (!document.getElementById('ov-glyphs-css')) { const s = document.createElement('style'); s.id = 'ov-glyphs-css'; s.textContent = CSS; document.head.appendChild(s); } swap(document); try { new MutationObserver((records) => { for (const r of records) { if (r.type === 'attributes') { if (r.target.matches && r.target.matches(SEL)) draw(r.target); continue; } r.addedNodes.forEach((n) => { if (n.nodeType === 1) swap(n); }); } }).observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['class', 'data-fa-transform', 'data-ov-icon', 'data-ov-brand'] }); } catch (e) { /* no observer: what was there is swapped */ } } const esc = (v) => String(v).replace(/[&<>"]/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c])); // The markup for a glyph, and an element drawn now (4.231.0). function html(name, o) { const opt = o || {}; return ''; } function icon(name, o) { const opt = o || {}; const el = document.createElement('i'); el.setAttribute('data-ov-icon', String(name)); if (opt.cls) el.className = String(opt.cls); if (opt.title) el.setAttribute('title', String(opt.title)); if (!document.getElementById('ov-glyphs-css')) { const st = document.createElement('style'); st.id = 'ov-glyphs-css'; st.textContent = CSS; document.head.appendChild(st); } draw(el); return el; } window.OVGlyphs = { swap, fromFa, icon, html, has: (n) => n === 'busy' || Object.prototype.hasOwnProperty.call(G, n) }; if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start); else start(); })();