d.bottom-2?g:e,d.half,d)},justify:function(a,d,e){return e[0]+(a.half?-1:1)*(d+a.labelDistance)},alignToPlotEdges:function(a,d,e,g){a=a.getBBox().width;return d?a+g:e-a-g},alignToConnectors:function(a,d,e,g){let b=0,f;a.forEach(function(a){f=
+a.dataLabel.getBBox().width;f>b&&(b=f)});return d?b+g:e-b-g}};g.compose=function(g){a.compose(B);C.pushUnique(z,g)&&(g=g.prototype,g.dataLabelPositioners=d,g.alignDataLabel=x,g.drawDataLabels=e,g.placeDataLabels=h,g.verifyDataLabelOverflow=y)}})(h||(h={}));return h});M(a,"Extensions/OverlappingDataLabels.js",[a["Core/Chart/Chart.js"],a["Core/Utilities.js"]],function(a,y){function x(a,l){let p,t=!1;a&&(p=a.newOpacity,a.oldOpacity!==p&&(a.alignAttr&&a.placed?(a[p?"removeClass":"addClass"]("highcharts-data-label-hidden"),
+t=!0,a.alignAttr.opacity=p,a[a.isOld?"animate":"attr"](a.alignAttr,null,function(){l.styledMode||a.css({pointerEvents:p?"auto":"none"})}),C(l,"afterHideOverlappingLabel")):a.attr({opacity:p})),a.isOld=!0);return t}const {addEvent:L,fireEvent:C,isArray:z,isNumber:H,objectEach:B,pick:u}=y;L(a,"render",function(){let a=this,l=[];(this.labelCollectors||[]).forEach(function(a){l=l.concat(a())});(this.yAxis||[]).forEach(function(a){a.stacking&&a.options.stackLabels&&!a.options.stackLabels.allowOverlap&&
+B(a.stacking.stacks,function(a){B(a,function(a){a.label&&l.push(a.label)})})});(this.series||[]).forEach(function(p){var t=p.options.dataLabels;p.visible&&(!1!==t.enabled||p._hasPointLabels)&&(t=m=>m.forEach(h=>{h.visible&&(z(h.dataLabels)?h.dataLabels:h.dataLabel?[h.dataLabel]:[]).forEach(function(g){const e=g.options;g.labelrank=u(e.labelrank,h.labelrank,h.shapeArgs&&h.shapeArgs.height);e.allowOverlap?(g.oldOpacity=g.opacity,g.newOpacity=1,x(g,a)):l.push(g)})}),t(p.nodes||[]),t(p.points))});this.hideOverlappingLabels(l)});
+a.prototype.hideOverlappingLabels=function(a){let l=this,p=a.length,t=l.renderer;var m;let h;let g,e,w,u=!1;var v=function(a){let d,e;var g;let h=a.box?0:a.padding||0,b=g=0,f,c;if(a&&(!a.alignAttr||a.placed))return d=a.alignAttr||{x:a.attr("x"),y:a.attr("y")},e=a.parentGroup,a.width||(g=a.getBBox(),a.width=g.width,a.height=g.height,g=t.fontMetrics(a.element).h),f=a.width-2*h,(c={left:"0",center:"0.5",right:"1"}[a.alignValue])?b=+c*f:H(a.x)&&Math.round(a.x)!==a.translateX&&(b=a.x-a.translateX),{x:d.x+
+(e.translateX||0)+h-(b||0),y:d.y+(e.translateY||0)+h-g,width:a.width-2*h,height:a.height-2*h}};for(h=0;h=e.x+e.width||w.x+w.width<=e.x||w.y>=e.y+e.height||w.y+w.height<=e.y||
+((v.labelrank{v(a)||(a={radius:a||0});return l(t,g,a)};if(-1===L.symbolCustomAttribs.indexOf("borderRadius")){L.symbolCustomAttribs.push("borderRadius","brBoxHeight","brBoxY");const h=C.prototype.symbols.arc;C.prototype.symbols.arc=function(a,g,l,m,d={}){a=h(a,g,l,m,d);const {innerR:e=0,r=l,start:q=0,end:t=0}=d;if(d.open||!d.borderRadius)return a;l=t-q;g=Math.sin(l/2);d=Math.max(Math.min(p(d.borderRadius||0,r-e),(r-e)/2,r*g/(1+g)),0);l=Math.min(d,l/Math.PI*2*e);for(g=a.length-1;g--;){{let e=
+void 0,h=void 0,k=void 0;m=a;var b=g,f=1this.borderWidth&&(t="all");t||(t="end");const v=Math.min(p(a.radius,b),b/2,"all"===t?f/2:Infinity)||0;"end"===t&&(m&&(l-=v),d+=v);u(h,{brBoxHeight:d,brBoxY:l,r:v})}}},{order:9})}y={optionsToObject:m};"";return y});M(a,"Core/Responsive.js",[a["Core/Utilities.js"]],function(a){const {diffObjects:x,extend:I,find:L,merge:C,pick:z,uniqueKey:H}=a;var B;(function(u){function v(a,l){const h=a.condition;(h.callback||function(){return this.chartWidth<=
+z(h.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=z(h.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=z(h.minWidth,0)&&this.chartHeight>=z(h.minHeight,0)}).call(this)&&l.push(a._id)}function l(a,l){const h=this.options.responsive;var g=this.currentResponsive;let e=[];!l&&h&&h.rules&&h.rules.forEach(a=>{"undefined"===typeof a._id&&(a._id=H());this.matchResponsiveRule(a,e)},this);l=C(...e.map(a=>L((h||{}).rules||[],e=>e._id===a)).map(a=>a&&a.chartOptions));l.isResponsiveOptions=!0;e=e.toString()||void 0;
+e!==(g&&g.ruleIds)&&(g&&this.update(g.undoOptions,a,!0),e?(g=x(l,this.options,!0,this.collectionsWithUpdate),g.isResponsiveOptions=!0,this.currentResponsive={ruleIds:e,mergedOptions:l,undoOptions:g},this.update(l,a,!0)):this.currentResponsive=void 0)}const p=[];u.compose=function(t){a.pushUnique(p,t)&&I(t.prototype,{matchResponsiveRule:v,setResponsive:l});return t}})(B||(B={}));"";"";return B});M(a,"masters/highcharts.src.js",[a["Core/Globals.js"],a["Core/Utilities.js"],a["Core/Defaults.js"],a["Core/Animation/Fx.js"],
+a["Core/Animation/AnimationUtilities.js"],a["Core/Renderer/HTML/AST.js"],a["Core/Templating.js"],a["Core/Renderer/RendererUtilities.js"],a["Core/Renderer/SVG/SVGElement.js"],a["Core/Renderer/SVG/SVGRenderer.js"],a["Core/Renderer/HTML/HTMLElement.js"],a["Core/Renderer/HTML/HTMLRenderer.js"],a["Core/Axis/Axis.js"],a["Core/Axis/DateTimeAxis.js"],a["Core/Axis/LogarithmicAxis.js"],a["Core/Axis/PlotLineOrBand/PlotLineOrBand.js"],a["Core/Axis/Tick.js"],a["Core/Tooltip.js"],a["Core/Series/Point.js"],a["Core/Pointer.js"],
+a["Core/Legend/Legend.js"],a["Core/Chart/Chart.js"],a["Core/Axis/Stacking/StackingAxis.js"],a["Core/Axis/Stacking/StackItem.js"],a["Core/Series/Series.js"],a["Core/Series/SeriesRegistry.js"],a["Series/Column/ColumnSeries.js"],a["Series/Column/ColumnDataLabel.js"],a["Series/Pie/PieSeries.js"],a["Series/Pie/PieDataLabel.js"],a["Core/Series/DataLabel.js"],a["Core/Responsive.js"],a["Core/Color/Color.js"],a["Core/Time.js"]],function(a,y,I,L,C,z,H,B,u,v,l,p,t,m,h,g,e,w,E,F,d,k,r,q,G,b,f,c,n,M,D,K,U,T){a.animate=
+C.animate;a.animObject=C.animObject;a.getDeferredAnimation=C.getDeferredAnimation;a.setAnimation=C.setAnimation;a.stop=C.stop;a.timers=L.timers;a.AST=z;a.Axis=t;a.Chart=k;a.chart=k.chart;a.Fx=L;a.Legend=d;a.PlotLineOrBand=g;a.Point=E;a.Pointer=F;a.Series=G;a.StackItem=q;a.SVGElement=u;a.SVGRenderer=v;a.Templating=H;a.Tick=e;a.Time=T;a.Tooltip=w;a.Color=U;a.color=U.parse;p.compose(v);l.compose(u);F.compose(k);d.compose(k);a.defaultOptions=I.defaultOptions;a.getOptions=I.getOptions;a.time=I.defaultTime;
+a.setOptions=I.setOptions;a.dateFormat=H.dateFormat;a.format=H.format;a.numberFormat=H.numberFormat;a.addEvent=y.addEvent;a.arrayMax=y.arrayMax;a.arrayMin=y.arrayMin;a.attr=y.attr;a.clearTimeout=y.clearTimeout;a.correctFloat=y.correctFloat;a.createElement=y.createElement;a.css=y.css;a.defined=y.defined;a.destroyObjectProperties=y.destroyObjectProperties;a.discardElement=y.discardElement;a.distribute=B.distribute;a.erase=y.erase;a.error=y.error;a.extend=y.extend;a.extendClass=y.extendClass;a.find=
+y.find;a.fireEvent=y.fireEvent;a.getMagnitude=y.getMagnitude;a.getStyle=y.getStyle;a.inArray=y.inArray;a.isArray=y.isArray;a.isClass=y.isClass;a.isDOMElement=y.isDOMElement;a.isFunction=y.isFunction;a.isNumber=y.isNumber;a.isObject=y.isObject;a.isString=y.isString;a.keys=y.keys;a.merge=y.merge;a.normalizeTickInterval=y.normalizeTickInterval;a.objectEach=y.objectEach;a.offset=y.offset;a.pad=y.pad;a.pick=y.pick;a.pInt=y.pInt;a.relativeLength=y.relativeLength;a.removeEvent=y.removeEvent;a.seriesType=
+b.seriesType;a.splat=y.splat;a.stableSort=y.stableSort;a.syncTimeout=y.syncTimeout;a.timeUnits=y.timeUnits;a.uniqueKey=y.uniqueKey;a.useSerialIds=y.useSerialIds;a.wrap=y.wrap;c.compose(f);D.compose(G);m.compose(t);h.compose(t);M.compose(n);g.compose(t);K.compose(k);r.compose(t,k,G);w.compose(F);return a});a["masters/highcharts.src.js"]._modules=a;return a["masters/highcharts.src.js"]});
+//# sourceMappingURL=highcharts.js.map
\ No newline at end of file
diff --git a/assets/js/highcharts/timeline.js b/assets/js/highcharts/timeline.js
new file mode 100644
index 00000000..26261f14
--- /dev/null
+++ b/assets/js/highcharts/timeline.js
@@ -0,0 +1,26 @@
+/*
+ Highcharts JS v11.1.0 (2023-06-05)
+
+ Timeline series
+
+ (c) 2010-2021 Highsoft AS
+ Author: Daniel Studencki
+
+ License: www.highcharts.com/license
+*/
+'use strict';(function(b){"object"===typeof module&&module.exports?(b["default"]=b,module.exports=b):"function"===typeof define&&define.amd?define("highcharts/modules/timeline",["highcharts"],function(c){b(c);b.Highcharts=c;return b}):b("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(b){function c(b,k,c,t){b.hasOwnProperty(k)||(b[k]=t.apply(null,c),"function"===typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:k,module:b[k]}})))}b=b?b._modules:
+{};c(b,"Series/Timeline/TimelinePoint.js",[b["Core/Series/Point.js"],b["Core/Series/SeriesRegistry.js"],b["Core/Utilities.js"]],function(b,c,r){const {series:k,seriesTypes:{pie:{prototype:{pointClass:q}}}}=c,{defined:x,isNumber:l,merge:h,objectEach:u,pick:n}=r;class v extends k.prototype.pointClass{constructor(){super(...arguments);this.series=this.options=void 0}alignConnector(){let b=this.series,g=this.connector,f=this.dataLabel,c=this.dataLabel.options=h(b.options.dataLabels,this.options.dataLabels);
+var a=this.series.chart,e=g.getBBox(),d=e.x+f.translateX;e=e.y+f.translateY;a.inverted?e-=f.options.connectorWidth/2:d+=f.options.connectorWidth/2;a=a.isInsidePlot(d,e);g[a?"animate":"attr"]({d:this.getConnectorPath()});g.addClass(`highcharts-color-${this.colorIndex}`);b.chart.styledMode||g.attr({stroke:c.connectorColor||this.color,"stroke-width":c.connectorWidth,opacity:f[x(f.newOpacity)?"newOpacity":"opacity"]})}drawConnector(){const b=this.series;this.connector||(this.connector=b.chart.renderer.path(this.getConnectorPath()).attr({zIndex:-1}).add(this.dataLabel));
+this.series.chart.isInsidePlot(this.dataLabel.x,this.dataLabel.y)&&this.alignConnector()}getConnectorPath(){let b=this.series.chart,g=this.series.xAxis.len,f=b.inverted,c=f?"x2":"y2",a=this.dataLabel,e=a.targetPosition,d={x1:this.plotX,y1:this.plotY,x2:this.plotX,y2:l(e.y)?e.y:a.y},m=(a.alignAttr||a)[c[0]]\u25cf {point.key}
',pointFormat:"{point.description}"},states:{hover:{lineWidthPlus:0}},dataLabels:{enabled:!0,allowOverlap:!0,alternate:!0,backgroundColor:"#ffffff",borderWidth:1,borderColor:"#999999",
+borderRadius:3,color:"#333333",connectorWidth:1,distance:100,formatter:function(){let b;b=this.series.chart.styledMode?'\u25cf ':'\u25cf ';return b+=''+(this.key||"")+"
"+(this.point.label||"")},style:{textOutline:"none",fontWeight:"normal",fontSize:"0.8em"},shadow:!1,verticalAlign:"middle"},marker:{enabledThreshold:0,symbol:"square",radius:6,lineWidth:2,
+height:15},showInLegend:!1,colorKey:"x",legendSymbol:"rectangle"}});c(b,"Series/Timeline/TimelineSeries.js",[b["Core/Series/SeriesRegistry.js"],b["Core/Renderer/SVG/SVGElement.js"],b["Series/Timeline/TimelinePoint.js"],b["Series/Timeline/TimelineSeriesDefaults.js"],b["Core/Utilities.js"]],function(b,c,r,t,w){const {seriesTypes:{column:k,line:l}}=b,{addEvent:h,arrayMax:u,arrayMin:n,defined:v,extend:q,merge:g,pick:f}=w;class p extends l{constructor(){super(...arguments);this.visibilityMap=this.userOptions=
+this.points=this.options=this.data=void 0}alignDataLabel(a,e,b,c){var d=this.chart.inverted,m=this.visibilityMap.filter(function(a){return a}),f=this.visiblePointsCount,g=m.indexOf(a);m=this.options.dataLabels;let k=a.userDLOptions||{};g=m.alternate?g&&g!==f-1?2:1.5:1;let h;f=Math.floor(this.xAxis.len/f);let l=e.padding;a.visible&&(h=Math.abs(k.x||a.options.dataLabels.x),d?(d=2*(h-l)-a.itemHeight/2,d={width:d+"px",textOverflow:e.width/d*e.height/2>f*g?"ellipsis":"none"}):d={width:(k.width||m.width||
+f*g-2*l)+"px"},e.css(d),this.chart.styledMode||e.shadow(m.shadow));super.alignDataLabel.apply(this,arguments)}bindAxes(){const a=this;super.bindAxes.call(a);["xAxis","yAxis"].forEach(function(b){"xAxis"!==b||a[b].userOptions.type||(a[b].categories=a[b].hasNames=!0)})}distributeDL(){const a=this,b=a.options.dataLabels;let d=1;if(b){const e=b.distance||0;a.points.forEach(c=>{c.options.dataLabels=g({[a.chart.inverted?"x":"y"]:b.alternate&&d%2?-e:e},c.userDLOptions);d++})}}generatePoints(){const a=this;
+super.generatePoints.apply(a);a.points.forEach(function(b,d){b.applyOptions({x:a.xData[d]},a.xData[d])})}getVisibilityMap(){return(this.data.length?this.data:this.userOptions.data).map(function(a){return a&&!1!==a.visible&&!a.isNull?a:!1})}getXExtremes(a){const b=this;a=a.filter(function(a,e){return b.points[e].isValid()&&b.points[e].visible});return{min:n(a),max:u(a)}}init(){const a=this;super.init.apply(a,arguments);a.eventsToUnbind.push(h(a,"afterTranslate",function(){let b,d=Number.MAX_VALUE;
+a.points.forEach(function(a){a.isInside=a.isInside&&a.visible;a.visible&&!a.isNull&&(v(b)&&(d=Math.min(d,Math.abs(a.plotX-b))),b=a.plotX)});a.closestPointRangePx=d}));a.eventsToUnbind.push(h(a,"drawDataLabels",function(){a.distributeDL()}));a.eventsToUnbind.push(h(a,"afterDrawDataLabels",function(){let b;a.points.forEach(function(a){if(b=a.dataLabel)return b.animate=function(a){this.targetPosition&&(this.targetPosition=a);return c.prototype.animate.apply(this,arguments)},b.targetPosition||(b.targetPosition=
+{}),a.drawConnector()})}));a.eventsToUnbind.push(h(a.chart,"afterHideOverlappingLabel",function(){a.points.forEach(function(a){a.connector&&a.dataLabel&&a.dataLabel.oldOpacity!==a.dataLabel.newOpacity&&a.alignConnector()})}))}markerAttribs(a,b){var d=this.options.marker;let c=a.marker||{},e=c.symbol||d.symbol,g=f(c.width,d.width,this.closestPointRangePx),k=f(c.height,d.height),h=0;if(this.xAxis.dateTime)return super.markerAttribs.call(this,a,b);b&&(d=d.states[b]||{},b=c.states&&c.states[b]||{},h=
+f(b.radius,d.radius,h+(d.radiusPlus||0)));a.hasImage=e&&0===e.indexOf("url");a={x:Math.floor(a.plotX)-g/2-h/2,y:a.plotY-k/2-h/2,width:g+h,height:k+h};return this.chart.inverted?{y:a.x&&a.width&&this.xAxis.len-a.x-a.width,x:a.y&&a.y,width:a.height,height:a.width}:a}processData(){let a=0,b;this.visibilityMap=this.getVisibilityMap();this.visibilityMap.forEach(function(b){b&&a++});this.visiblePointsCount=a;for(b=0;b