diff --git a/index.html b/index.html
new file mode 100644
index 0000000..d5afdf8
--- /dev/null
+++ b/index.html
@@ -0,0 +1,165 @@
+
+
+
+
+
+ DOKK Graph
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mknodes.py b/mknodes.py
new file mode 100755
index 0000000..e3d4d71
--- /dev/null
+++ b/mknodes.py
@@ -0,0 +1,66 @@
+#!/usr/bin/env python3
+
+"""
+This script creates the data.js file containing the list of nodes end edges for
+the vis.js graph.
+"""
+
+import json
+import networkx
+import matplotlib.pyplot as plt
+from pathlib import Path
+
+
+G = networkx.nx.Graph()
+
+
+data = '../dokk/data'
+edge_properties = [ 'comics_cartoon', 'comics_author', 'ttrpg_character' ]
+
+nodes = []
+edges = []
+
+for path in Path(data).glob('**/*.json',):
+ with open(path, 'r') as f:
+ n = json.loads(f.read())
+
+ G.add_node(n['node_id'])
+
+ nodes.append({
+ 'title': n['node_name'] + ('\n' + n['node_description'] if 'node_description' in n else ''),
+ #'color': { 'background': '', 'border': ''},
+ 'label': n['node_name'],
+ 'id': n['node_id']
+ })
+
+ for p in edge_properties:
+ if p not in n.keys():
+ continue
+
+ if not type(n[p]) == list:
+ n[p] = [ n[p] ]
+
+ for target in n[p]:
+ G.add_edge(n['node_id'], target)
+
+ edges.append({
+ 'title': p,
+ 'from': n['node_id'],
+ #'label': p,
+ 'to': target,
+ })
+
+"""
+pos = networkx.nx.spring_layout(G, k=1, iterations=200, scale=1000)
+
+for n in nodes:
+ n['x'] = pos[n['id']][0]
+ n['y'] = pos[n['id']][1]
+
+networkx.nx.set_node_attributes(G, pos, 'pos')
+networkx.nx.draw(G, pos=pos)
+plt.show()
+"""
+
+with open('data.js', 'w') as f:
+ f.write('var nodes={};\nvar edges={}'.format(json.dumps(nodes), json.dumps(edges)))
diff --git a/vis-network.min.js b/vis-network.min.js
new file mode 100644
index 0000000..d398c38
--- /dev/null
+++ b/vis-network.min.js
@@ -0,0 +1,49 @@
+/**
+ * vis-network
+ * https://visjs.github.io/vis-network/
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 0.0.0-no-version
+ * @date 2021-09-27T21:50:48.604Z
+ *
+ * @copyright (c) 2011-2017 Almende B.V, http://almende.com
+ * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs
+ *
+ * @license
+ * vis.js is dual licensed under both
+ *
+ * 1. The Apache 2.0 License
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * 2. The MIT License
+ * http://opensource.org/licenses/MIT
+ *
+ * vis.js may be distributed under either license.
+ */
+!function(g,A){"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define(["exports"],A):A((g="undefined"!=typeof globalThis?globalThis:g||self).vis=g.vis||{})}(this,(function(g){var A="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=function(g){return g&&g.Math==Math&&g},e=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof A&&A)||function(){return this}()||Function("return this")(),C={},I=function(g){try{return!!g()}catch(g){return!0}},i=!I((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),o={},n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,s=r&&!n.call({1:2},1);o.f=s?function(g){var A=r(this,g);return!!A&&A.enumerable}:n;var a,d,h=function(g,A){return{enumerable:!(1&g),configurable:!(2&g),writable:!(4&g),value:A}},l={}.toString,c=function(g){return l.call(g).slice(8,-1)},u=c,p="".split,f=I((function(){return!Object("z").propertyIsEnumerable(0)}))?function(g){return"String"==u(g)?p.call(g,""):Object(g)}:Object,v=function(g){if(null==g)throw TypeError("Can't call method on "+g);return g},y=f,m=v,b=function(g){return y(m(g))},w=function(g){return"object"==typeof g?null!==g:"function"==typeof g},k={},x=k,E=e,O=function(g){return"function"==typeof g?g:void 0},T=function(g,A){return arguments.length<2?O(x[g])||O(E[g]):x[g]&&x[g][A]||E[g]&&E[g][A]},D=T("navigator","userAgent")||"",N=e,R=D,P=N.process,M=N.Deno,B=P&&P.versions||M&&M.version,z=B&&B.v8;z?d=(a=z.split("."))[0]<4?1:a[0]+a[1]:R&&(!(a=R.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=R.match(/Chrome\/(\d+)/))&&(d=a[1]);var Z=d&&+d,S=Z,F=I,G=!!Object.getOwnPropertySymbols&&!F((function(){var g=Symbol();return!String(g)||!(Object(g)instanceof Symbol)||!Symbol.sham&&S&&S<41})),L=G&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,j=T,V=L?function(g){return"symbol"==typeof g}:function(g){var A=j("Symbol");return"function"==typeof A&&Object(g)instanceof A},Y=w,W={exports:{}},Q=e,U=function(g,A){try{Object.defineProperty(Q,g,{value:A,configurable:!0,writable:!0})}catch(t){Q[g]=A}return A},_="__core-js_shared__",H=e[_]||U(_,{}),K=H;(W.exports=function(g,A){return K[g]||(K[g]=void 0!==A?A:{})})("versions",[]).push({version:"3.16.1",mode:"pure",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"});var X=v,J=function(g){return Object(X(g))},q=J,$={}.hasOwnProperty,gg=Object.hasOwn||function(g,A){return $.call(q(g),A)},Ag=0,tg=Math.random(),eg=function(g){return"Symbol("+String(void 0===g?"":g)+")_"+(++Ag+tg).toString(36)},Cg=e,Ig=W.exports,ig=gg,og=eg,ng=G,rg=L,sg=Ig("wks"),ag=Cg.Symbol,dg=rg?ag:ag&&ag.withoutSetter||og,hg=function(g){return ig(sg,g)&&(ng||"string"==typeof sg[g])||(ng&&ig(ag,g)?sg[g]=ag[g]:sg[g]=dg("Symbol."+g)),sg[g]},lg=w,cg=V,ug=function(g,A){var t,e;if("string"===A&&"function"==typeof(t=g.toString)&&!Y(e=t.call(g)))return e;if("function"==typeof(t=g.valueOf)&&!Y(e=t.call(g)))return e;if("string"!==A&&"function"==typeof(t=g.toString)&&!Y(e=t.call(g)))return e;throw TypeError("Can't convert object to primitive value")},pg=hg("toPrimitive"),fg=function(g,A){if(!lg(g)||cg(g))return g;var t,e=g[pg];if(void 0!==e){if(void 0===A&&(A="default"),t=e.call(g,A),!lg(t)||cg(t))return t;throw TypeError("Can't convert object to primitive value")}return void 0===A&&(A="number"),ug(g,A)},vg=V,yg=function(g){var A=fg(g,"string");return vg(A)?A:String(A)},mg=w,bg=e.document,wg=mg(bg)&&mg(bg.createElement),kg=function(g){return wg?bg.createElement(g):{}},xg=kg,Eg=!i&&!I((function(){return 7!=Object.defineProperty(xg("div"),"a",{get:function(){return 7}}).a})),Og=i,Tg=o,Dg=h,Ng=b,Rg=yg,Pg=gg,Mg=Eg,Bg=Object.getOwnPropertyDescriptor;C.f=Og?Bg:function(g,A){if(g=Ng(g),A=Rg(A),Mg)try{return Bg(g,A)}catch(g){}if(Pg(g,A))return Dg(!Tg.f.call(g,A),g[A])};var zg=I,Zg=/#|\.prototype\./,Sg=function(g,A){var t=Gg[Fg(g)];return t==jg||t!=Lg&&("function"==typeof A?zg(A):!!A)},Fg=Sg.normalize=function(g){return String(g).replace(Zg,".").toLowerCase()},Gg=Sg.data={},Lg=Sg.NATIVE="N",jg=Sg.POLYFILL="P",Vg=Sg,Yg=function(g){if("function"!=typeof g)throw TypeError(String(g)+" is not a function");return g},Wg=Yg,Qg=function(g,A,t){if(Wg(g),void 0===A)return g;switch(t){case 0:return function(){return g.call(A)};case 1:return function(t){return g.call(A,t)};case 2:return function(t,e){return g.call(A,t,e)};case 3:return function(t,e,C){return g.call(A,t,e,C)}}return function(){return g.apply(A,arguments)}},Ug={},_g=w,Hg=function(g){if(!_g(g))throw TypeError(String(g)+" is not an object");return g},Kg=i,Xg=Eg,Jg=Hg,qg=yg,$g=Object.defineProperty;Ug.f=Kg?$g:function(g,A,t){if(Jg(g),A=qg(A),Jg(t),Xg)try{return $g(g,A,t)}catch(g){}if("get"in t||"set"in t)throw TypeError("Accessors not supported");return"value"in t&&(g[A]=t.value),g};var gA=Ug,AA=h,tA=i?function(g,A,t){return gA.f(g,A,AA(1,t))}:function(g,A,t){return g[A]=t,g},eA=e,CA=C.f,IA=Vg,iA=k,oA=Qg,nA=tA,rA=gg,sA=function(g){var A=function(A,t,e){if(this instanceof g){switch(arguments.length){case 0:return new g;case 1:return new g(A);case 2:return new g(A,t)}return new g(A,t,e)}return g.apply(this,arguments)};return A.prototype=g.prototype,A},aA=function(g,A){var t,e,C,I,i,o,n,r,s=g.target,a=g.global,d=g.stat,h=g.proto,l=a?eA:d?eA[s]:(eA[s]||{}).prototype,c=a?iA:iA[s]||(iA[s]={}),u=c.prototype;for(C in A)t=!IA(a?C:s+(d?".":"#")+C,g.forced)&&l&&rA(l,C),i=c[C],t&&(o=g.noTargetGet?(r=CA(l,C))&&r.value:l[C]),I=t&&o?o:A[C],t&&typeof i==typeof I||(n=g.bind&&t?oA(I,eA):g.wrap&&t?sA(I):h&&"function"==typeof I?oA(Function.call,I):I,(g.sham||I&&I.sham||i&&i.sham)&&nA(n,"sham",!0),c[C]=n,h&&(rA(iA,e=s+"Prototype")||nA(iA,e,{}),iA[e][C]=I,g.real&&u&&!u[C]&&nA(u,C,I)))},dA=Math.ceil,hA=Math.floor,lA=function(g){return isNaN(g=+g)?0:(g>0?hA:dA)(g)},cA=lA,uA=Math.min,pA=function(g){return g>0?uA(cA(g),9007199254740991):0},fA=lA,vA=Math.max,yA=Math.min,mA=function(g,A){var t=fA(g);return t<0?vA(t+A,0):yA(t,A)},bA=b,wA=pA,kA=mA,xA=function(g){return function(A,t,e){var C,I=bA(A),i=wA(I.length),o=kA(e,i);if(g&&t!=t){for(;i>o;)if((C=I[o++])!=C)return!0}else for(;i>o;o++)if((g||o in I)&&I[o]===t)return g||o||0;return!g&&-1}},EA={includes:xA(!0),indexOf:xA(!1)},OA={},TA=gg,DA=b,NA=EA.indexOf,RA=OA,PA=function(g,A){var t,e=DA(g),C=0,I=[];for(t in e)!TA(RA,t)&&TA(e,t)&&I.push(t);for(;A.length>C;)TA(e,t=A[C++])&&(~NA(I,t)||I.push(t));return I},MA=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],BA=PA,zA=MA,ZA=Object.keys||function(g){return BA(g,zA)},SA={};SA.f=Object.getOwnPropertySymbols;var FA=i,GA=I,LA=ZA,jA=SA,VA=o,YA=J,WA=f,QA=Object.assign,UA=Object.defineProperty,_A=!QA||GA((function(){if(FA&&1!==QA({b:1},QA(UA({},"a",{enumerable:!0,get:function(){UA(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var g={},A={},t=Symbol(),e="abcdefghijklmnopqrst";return g[t]=7,e.split("").forEach((function(g){A[g]=g})),7!=QA({},g)[t]||LA(QA({},A)).join("")!=e}))?function(g,A){for(var t=YA(g),e=arguments.length,C=1,I=jA.f,i=VA.f;e>C;)for(var o,n=WA(arguments[C++]),r=I?LA(n).concat(I(n)):LA(n),s=r.length,a=0;s>a;)o=r[a++],FA&&!i.call(n,o)||(t[o]=n[o]);return t}:QA;aA({target:"Object",stat:!0,forced:Object.assign!==_A},{assign:_A});var HA=k.Object.assign,KA=Yg,XA=w,JA=[].slice,qA={},$A=function(g,A,t){if(!(A in qA)){for(var e=[],C=0;C=.1;)(l=+I[a++%i])>s&&(l=s),h=Math.sqrt(l*l/(1+r*r)),A+=h=o<0?-h:h,t+=r*h,!0===d?g.lineTo(A,t):g.moveTo(A,t),s-=l,d=!d}var at={circle:it,dashedLine:st,database:rt,diamond:function(g,A,t,e){g.beginPath(),g.lineTo(A,t+e),g.lineTo(A+e,t),g.lineTo(A,t-e),g.lineTo(A-e,t),g.closePath()},ellipse:nt,ellipse_vis:nt,hexagon:function(g,A,t,e){g.beginPath();var C=2*Math.PI/6;g.moveTo(A+e,t);for(var I=1;I<6;I++)g.lineTo(A+e*Math.cos(C*I),t+e*Math.sin(C*I));g.closePath()},roundRect:ot,square:function(g,A,t,e){g.beginPath(),g.rect(A-e,t-e,2*e,2*e),g.closePath()},star:function(g,A,t,e){g.beginPath(),t+=.1*(e*=.82);for(var C=0;C<10;C++){var I=C%2==0?1.3*e:.5*e;g.lineTo(A+I*Math.sin(2*C*Math.PI/10),t-I*Math.cos(2*C*Math.PI/10))}g.closePath()},triangle:function(g,A,t,e){g.beginPath(),t+=.275*(e*=1.15);var C=2*e,I=C/2,i=Math.sqrt(3)/6*C,o=Math.sqrt(C*C-I*I);g.moveTo(A,t-(o-i)),g.lineTo(A+I,t+i),g.lineTo(A-I,t+i),g.lineTo(A,t-(o-i)),g.closePath()},triangleDown:function(g,A,t,e){g.beginPath(),t-=.275*(e*=1.15);var C=2*e,I=C/2,i=Math.sqrt(3)/6*C,o=Math.sqrt(C*C-I*I);g.moveTo(A,t+(o-i)),g.lineTo(A+I,t-i),g.lineTo(A-I,t-i),g.lineTo(A,t+(o-i)),g.closePath()}};function dt(g,A){void 0===A&&(A={});var t=A.insertAt;if(g&&"undefined"!=typeof document){var e=document.head||document.getElementsByTagName("head")[0],C=document.createElement("style");C.type="text/css","top"===t&&e.firstChild?e.insertBefore(C,e.firstChild):e.appendChild(C),C.styleSheet?C.styleSheet.cssText=g:C.appendChild(document.createTextNode(g))}}dt(".vis-overlay{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}");dt(".vis [class*=span]{min-height:0;width:auto}");dt('div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:0 0 10px 0 rgba(0,0,0,.5)}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:hsla(0,0%,100%,0) #fff hsla(0,0%,100%,0) hsla(0,0%,100%,0);border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(180deg,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#4c4c4c",endColorstr="#131313",GradientType=0)}div.vis-color-picker div.vis-new-color{left:159px;text-align:right;padding-right:2px}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-initial-color{left:10px;text-align:left;padding-left:2px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}');dt('div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:transparent;width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(180deg,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);border:1px solid #999;box-shadow:0 0 3px 0 #aaa;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2,#385380);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(180deg,#3876c2 0,#385380);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3876c2",endColorstr="#385380",GradientType=0);box-shadow:0 0 1px 0 #111927;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:none}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(180deg,#9d9d9d 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#9d9d9d",endColorstr="#c8c8c8",GradientType=0)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(180deg,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);border:1px solid #999;box-shadow:0 0 3px 0 #aaa;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0) rgba(136,183,213,0) rgba(136,183,213,0) rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0) rgba(194,225,245,0) rgba(194,225,245,0) #f2faff;border-width:12px;margin-top:-12px}');dt("div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}");var ht={exports:{}};!function(g){function A(g){if(g)return function(g){for(var t in A.prototype)g[t]=A.prototype[t];return g}(g)}g.exports=A,A.prototype.on=A.prototype.addEventListener=function(g,A){return this._callbacks=this._callbacks||{},(this._callbacks["$"+g]=this._callbacks["$"+g]||[]).push(A),this},A.prototype.once=function(g,A){function t(){this.off(g,t),A.apply(this,arguments)}return t.fn=A,this.on(g,t),this},A.prototype.off=A.prototype.removeListener=A.prototype.removeAllListeners=A.prototype.removeEventListener=function(g,A){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var t,e=this._callbacks["$"+g];if(!e)return this;if(1==arguments.length)return delete this._callbacks["$"+g],this;for(var C=0;C=o?g?"":void 0:(e=I.charCodeAt(i))<55296||e>56319||i+1===o||(C=I.charCodeAt(i+1))<56320||C>57343?g?I.charAt(i):e:g?I.slice(i,i+2):C-56320+(e-55296<<10)+65536}},mt={codeAt:yt(!1),charAt:yt(!0)},bt=H,wt=Function.toString;"function"!=typeof bt.inspectSource&&(bt.inspectSource=function(g){return wt.call(g)});var kt,xt,Et,Ot=bt.inspectSource,Tt=e.WeakMap,Dt="function"==typeof Tt&&/native code/.test(Ot(Tt)),Nt=W.exports,Rt=eg,Pt=Nt("keys"),Mt=function(g){return Pt[g]||(Pt[g]=Rt(g))},Bt=Dt,zt=w,Zt=tA,St=gg,Ft=H,Gt=Mt,Lt=OA,jt="Object already initialized",Vt=e.WeakMap;if(Bt||Ft.state){var Yt=Ft.state||(Ft.state=new Vt),Wt=Yt.get,Qt=Yt.has,Ut=Yt.set;kt=function(g,A){if(Qt.call(Yt,g))throw new TypeError(jt);return A.facade=g,Ut.call(Yt,g,A),A},xt=function(g){return Wt.call(Yt,g)||{}},Et=function(g){return Qt.call(Yt,g)}}else{var _t=Gt("state");Lt[_t]=!0,kt=function(g,A){if(St(g,_t))throw new TypeError(jt);return A.facade=g,Zt(g,_t,A),A},xt=function(g){return St(g,_t)?g[_t]:{}},Et=function(g){return St(g,_t)}}var Ht,Kt,Xt,Jt={set:kt,get:xt,has:Et,enforce:function(g){return Et(g)?xt(g):kt(g,{})},getterFor:function(g){return function(A){var t;if(!zt(A)||(t=xt(A)).type!==g)throw TypeError("Incompatible receiver, "+g+" required");return t}}},qt=!I((function(){function g(){}return g.prototype.constructor=null,Object.getPrototypeOf(new g)!==g.prototype})),$t=gg,ge=J,Ae=qt,te=Mt("IE_PROTO"),ee=Object.prototype,Ce=Ae?Object.getPrototypeOf:function(g){return g=ge(g),$t(g,te)?g[te]:"function"==typeof g.constructor&&g instanceof g.constructor?g.constructor.prototype:g instanceof Object?ee:null},Ie=I,ie=Ce,oe=tA,ne=gg,re=hg("iterator"),se=!1;[].keys&&("next"in(Xt=[].keys())?(Kt=ie(ie(Xt)))!==Object.prototype&&(Ht=Kt):se=!0);var ae=null==Ht||Ie((function(){var g={};return Ht[re].call(g)!==g}));ae&&(Ht={}),ae&&!ne(Ht,re)&&oe(Ht,re,(function(){return this}));var de,he={IteratorPrototype:Ht,BUGGY_SAFARI_ITERATORS:se},le=Ug,ce=Hg,ue=ZA,pe=i?Object.defineProperties:function(g,A){ce(g);for(var t,e=ue(A),C=e.length,I=0;C>I;)le.f(g,t=e[I++],A[t]);return g},fe=T("document","documentElement"),ve=Hg,ye=pe,me=MA,be=OA,we=fe,ke=kg,xe=Mt("IE_PROTO"),Ee=function(){},Oe=function(g){return"