diff --git a/legacy/smartadmin/apex-area.html b/legacy/smartadmin/apex-area.html new file mode 100644 index 0000000..bf2adb1 --- /dev/null +++ b/legacy/smartadmin/apex-area.html @@ -0,0 +1,2076 @@ + + + + + + + + Apex Area Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Area Chart

+ + + + + + +
Build on a solid foundation with an area chart display.
+ + +
+
+ Explore these Apex Area Chart samples to accelerate your app’s data visualization development. +
+
+
+
+
+

Basic Area +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Datetime X-Axis Area +

+
+ + + +
+
+
+
+
+ + + + + +
+
+
+
+
+ +
+
+

Github Style Area +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+

Irregular Timeseries Area +

+
+ + + +
+
+
+
+
+
+
+
+ +
+ +
+
+
+

Spline Area +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Negative Area +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Stacked Area +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Missing/Null Values Area +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-bar.html b/legacy/smartadmin/apex-bar.html new file mode 100644 index 0000000..9395dd6 --- /dev/null +++ b/legacy/smartadmin/apex-bar.html @@ -0,0 +1,2167 @@ + + + + + + + + Apex Bar Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + + +

Apex Bar Chart

+ + + + + + +
Explore these Apex Bar Chart samples to speed up your app’s data comparison development.
+ + +
+
+
+ + +
+
+

Basic Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Stacked Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Grouped Stacked Bars Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Bar with Markers Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Custom DataLabels Bar Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Bar with Images Bar +

+
+ + + +
+
+
+
+
+
+
+
+
+
+ + +
+
+

Grouped Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Stacked Bars 100 Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Bar with Negative Values Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Reversed Bar Chart Bar +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Patterned Bar +

+
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-box-whisker.html b/legacy/smartadmin/apex-box-whisker.html new file mode 100644 index 0000000..1b39387 --- /dev/null +++ b/legacy/smartadmin/apex-box-whisker.html @@ -0,0 +1,1882 @@ + + + + + + + + Apex Box & Whisker Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Box & Whisker Chart

+ + + + + + +
Leverage these Apex Box & Whisker Chart variants as a starting point for custom analytical dashboards.
+ + +
+
+
+
+
+

Basic Box & Whisker +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

Horizontal BoxPlot Box & Whisker +

+
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-bubble.html b/legacy/smartadmin/apex-bubble.html new file mode 100644 index 0000000..4977dd1 --- /dev/null +++ b/legacy/smartadmin/apex-bubble.html @@ -0,0 +1,1882 @@ + + + + + + + + Apex Bubble Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Bubble Chart

+ + + + + + +
Utilize this collection of Apex Bubble Chart examples to blow up your development game!
+ + +
+
+
+
+
+

Simple Bubble +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

3D Bubble Chart +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-candlestick.html b/legacy/smartadmin/apex-candlestick.html new file mode 100644 index 0000000..5a93be1 --- /dev/null +++ b/legacy/smartadmin/apex-candlestick.html @@ -0,0 +1,1943 @@ + + + + + + + + Apex Candlestick Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Candlestick Chart

+ + + + + + +
Use this page of Apex Candlestick Chart samples to prototype and enhance your app’s trading features.
+ + +
+
+
+
+
+

Basic Candlestick +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Combo Candlestick +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Category x-axis Candlestick +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Candlestick with line Candlestick +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-column.html b/legacy/smartadmin/apex-column.html new file mode 100644 index 0000000..7937f12 --- /dev/null +++ b/legacy/smartadmin/apex-column.html @@ -0,0 +1,2183 @@ + + + + + + + + Apex Column Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Column Chart

+ + + + + + +
Utilize this collection of Apex Chart examples to simplify your comparative analysis.
+ + +
+
+
+
+
+

Basic Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Stacked Columns Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Grouped Stacked Columns Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Column with Markers Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Column with Rotated Labels Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Dynamic Loaded Chart Column +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Column with Data Labels Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Stacked Columns 100 Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Dumbbell Chart Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Column with Group Label Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Column with Negative Values Column +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Distributed Columns Column +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-funnel.html b/legacy/smartadmin/apex-funnel.html new file mode 100644 index 0000000..9c59cbc --- /dev/null +++ b/legacy/smartadmin/apex-funnel.html @@ -0,0 +1,1882 @@ + + + + + + + + Apex Funnel Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Funnel Chart

+ + + + + + +
Build your base with a chart that’s a riot—perfect for visualizing process bottlenecks!
+ + +
+
+
+
+
+

Funnel Chart +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

Pyramid Chart +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-heatmap.html b/legacy/smartadmin/apex-heatmap.html new file mode 100644 index 0000000..cf93efb --- /dev/null +++ b/legacy/smartadmin/apex-heatmap.html @@ -0,0 +1,1911 @@ + + + + + + + + Apex Heatmap Charts | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Heatmap Chart

+ + + + + + +
Launch your app with this scorching heatmap—great for analyzing user engagement zones!
+ + +
+
+
+
+
+

Basic Heatmap +

+
+ + + +
+
+
+
+
+
+
+
+
+
+

Color Range Heatmap +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

Multiple Series Heatmap +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-line.html b/legacy/smartadmin/apex-line.html new file mode 100644 index 0000000..0215936 --- /dev/null +++ b/legacy/smartadmin/apex-line.html @@ -0,0 +1,2186 @@ + + + + + + + + Apex Line Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Line Chart

+ + + + + + +
Start with a chart that’s on the right path—ideal for showing progress over time...
+ + +
+
+
+
+
+

Basic Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Zoomable Timeseries Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Synchronized charts Line +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+

Stepline Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Negative values with different color Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Realtime Line +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Line with Data Labels Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Line Chart with Annotations Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Brush chart Line +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+

Gradient Line Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Missing/null values Line +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Dashed Line +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-mixed-combo.html b/legacy/smartadmin/apex-mixed-combo.html new file mode 100644 index 0000000..d37ace5 --- /dev/null +++ b/legacy/smartadmin/apex-mixed-combo.html @@ -0,0 +1,1976 @@ + + + + + + + + Apex Mixed/Combo Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Mixed/Combo Chart

+ + + + + + +
Mix it up with a chart party—perfect for tackling complex data maps, ideal for juggling multiple data, blending complex datasets.
+ + +
+
+
+
+
+

Line Column Mixed +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Line & Area Mixed +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Line Scatter Mixed +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Multiple Y-Axis Mixed +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Line Column Area Mixed +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ + + + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-pie-donut.html b/legacy/smartadmin/apex-pie-donut.html new file mode 100644 index 0000000..9144b45 --- /dev/null +++ b/legacy/smartadmin/apex-pie-donut.html @@ -0,0 +1,2062 @@ + + + + + + + + Apex Pie/Donut Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +

Apex Pie/Donut Chart

+ + + + + + +
Slice into success with a tasty pie chart—perfect for dishing out delicious proportions with a grin!
+ + +
+
+
+
+
+

Simple Pie Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Donut Update Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Gradient Donut Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Donut with Pattern Chart +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Simple Donut Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Monochrome Pie Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Semi Donut Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Pie with Image Chart +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-polar-area.html b/legacy/smartadmin/apex-polar-area.html new file mode 100644 index 0000000..c7ba3b2 --- /dev/null +++ b/legacy/smartadmin/apex-polar-area.html @@ -0,0 +1,1883 @@ + + + + + + + + Apex Polar Area Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Polar Area Chart

+ + + + + + +
Build your base with a chart that’s out of this world—perfect for polar data vibes!
+ + +
+
+
+
+
+

Basic Polar Area +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

Monochrome Polar Area +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-radar.html b/legacy/smartadmin/apex-radar.html new file mode 100644 index 0000000..0f76eff --- /dev/null +++ b/legacy/smartadmin/apex-radar.html @@ -0,0 +1,1913 @@ + + + + + + + + Apex Radar Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Radar Chart

+ + + + + + +
Kick off with this radar roundup—awesome for visualizing trends like a sci-fi pro!
+ + +
+
+
+
+
+

Basic Radar +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Radar with Polygon-fill Radar +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Radar - Multiple Series Radar +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-radialbars-circle.html b/legacy/smartadmin/apex-radialbars-circle.html new file mode 100644 index 0000000..040e087 --- /dev/null +++ b/legacy/smartadmin/apex-radialbars-circle.html @@ -0,0 +1,2040 @@ + + + + + + + + Apex RadialBars/Circle Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex RadialBars/Circle Chart

+ + + + + + +
Encapsulate your objectives with this chart—ideal for monitoring progress with precision.
+ + +
+
+
+ +
+
+

Basic RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Custom Angle Circle RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Radialbars with Image RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Semi Circle Gauge RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+ +
+
+

Multiple RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Gradient RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Stroked Gauge RadialBars +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-range-area.html b/legacy/smartadmin/apex-range-area.html new file mode 100644 index 0000000..eff23be --- /dev/null +++ b/legacy/smartadmin/apex-range-area.html @@ -0,0 +1,1950 @@ + + + + + + + + Apex Range Area Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Range Area Chart

+ + + + + + +
This range area design—ideal for highlighting trends within defined boundaries — perfect for showcasing data fluctuations in a structured format.
+ + +
+
+
+ +
+
+

Basic Range Area +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Datetime Range Area +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+ +
+
+

Combo Range Area +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Multiple Range Area +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ + + + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-scatter.html b/legacy/smartadmin/apex-scatter.html new file mode 100644 index 0000000..3873e67 --- /dev/null +++ b/legacy/smartadmin/apex-scatter.html @@ -0,0 +1,1979 @@ + + + + + + + + Apex Scatter Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Scatter Chart

+ + + + + + +
Optimal for exploring data dispersion with accuracy, perfect for visualizing data distribution with precision.
+ + +
+
+
+ +
+
+

Basic Scatter +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Scatter - Images Chart +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Scatter - Image Chart +

+
+ + + +
+
+
+
+
+
+
+
+
+
+ + +
+
+

Scatter - Datetime Chart +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+

Scatter - Category Chart +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-slope.html b/legacy/smartadmin/apex-slope.html new file mode 100644 index 0000000..e8b48aa --- /dev/null +++ b/legacy/smartadmin/apex-slope.html @@ -0,0 +1,1882 @@ + + + + + + + + Apex Slope Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Slope Chart

+ + + + + + +
Highly effective for assessing data evolution efficiently, ideal for visualizing shifts over time.
+ + +
+
+
+
+
+

Basic Slope +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+

Multi group Slope +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-sparkline.html b/legacy/smartadmin/apex-sparkline.html new file mode 100644 index 0000000..b992c5b --- /dev/null +++ b/legacy/smartadmin/apex-sparkline.html @@ -0,0 +1,1851 @@ + + + + + + + + Apex Sparkline | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Sparkline

+ + + + + + +
Perfect for subtle metric insights, highly effective for presenting data in a streamlined format.
+ + +
+
+
+
+
+

Basic Sparklines +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-timeline.html b/legacy/smartadmin/apex-timeline.html new file mode 100644 index 0000000..b7db60d --- /dev/null +++ b/legacy/smartadmin/apex-timeline.html @@ -0,0 +1,2002 @@ + + + + + + + + Apex Timeline Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Timeline Chart

+ + + + + + +
Highly effective for managing and displaying schedules efficiently, presenting chronological data with clarity, and tracking events in a structured sequence.
+ + +
+
+
+
+
+

Basic Timeline +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Multi-series Timeline +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Multiple series - Group rows Timeline +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Custom Colors Timeline +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Advanced (Multiple ranges) Timeline +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Dumbbell Chart (Horizontal) Timeline +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/apex-treemap.html b/legacy/smartadmin/apex-treemap.html new file mode 100644 index 0000000..78c834d --- /dev/null +++ b/legacy/smartadmin/apex-treemap.html @@ -0,0 +1,1943 @@ + + + + + + + + Apex Treemap Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Apex Treemap Chart

+ + + + + + +
Used for displaying complex data relationships and showcasing hierarchical structures.
+ + +
+
+
+
+
+

Basic Treemap +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Color range Treemap +

+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+

Multiple Series Treemap +

+
+ + + +
+
+
+
+
+
+
+
+ +
+
+

Distributed Treemap +

+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/appintel.html b/legacy/smartadmin/appintel.html new file mode 100644 index 0000000..8bb7cf8 --- /dev/null +++ b/legacy/smartadmin/appintel.html @@ -0,0 +1,1919 @@ + + + + + + + + Application Intelligence | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ +
+ +
+
+ +

Application Intelligence

+ + + + + + +
+
+ +
+ Truly a Game-Changer in Admin Dashboards. + +
+ +
+

+ Completely redesigned using Artificial Intelligence, SmartAdmin v5 is the first of its kind. + This release redefines intelligent design by leveraging AI to analyze patterns, optimize workflows, + and create a code structure that minimizes redundancy while maximizing performance. +

+

+ The result is an admin template that is faster, lighter, and more versatile than ever before. + AI-driven insights have influenced everything—from UI/UX design principles to the underlying architecture—ensuring + the all new SmartAdmin is robust, reliable, and future-proof. +

+

+ + Experience the future of admin dashboards today. Get started with SmartAdmin version 5 and transform the way you work! + +

+ +
+ Unit Testing +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MetricSmartAdmin v5Other Admin TemplatesImprovement (%)
First Contentful Paint (FCP)0.9s1.5s40% Faster
Time to Interactive (TTI)1.8s3.2s44% Faster
Total Blocking Time (TBT)50ms180ms72% Less Blocking
JavaScript Execution Time120ms250ms52% Faster
Memory Usage35MB60MB42% Less Memory
DOM Nodes Count850150043% Fewer Nodes
Layout Shift Score0.020.1283% Less Shift
Server Response Time180ms300ms40% Faster
CSS Rendering EfficiencyOptimizedStandardHighly Optimized
Overall Comparison40% Faster, 30% Less Code, AI-OptimizedSlower, More Redundant CodeSignificant Performance Gain
+
+
+
+
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/auth-forgetpassword.html b/legacy/smartadmin/auth-forgetpassword.html new file mode 100644 index 0000000..33008e6 --- /dev/null +++ b/legacy/smartadmin/auth-forgetpassword.html @@ -0,0 +1,109 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/auth-lockscreen.html b/legacy/smartadmin/auth-lockscreen.html new file mode 100644 index 0000000..c7290db --- /dev/null +++ b/legacy/smartadmin/auth-lockscreen.html @@ -0,0 +1,114 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/auth-login.html b/legacy/smartadmin/auth-login.html new file mode 100644 index 0000000..8d93e9f --- /dev/null +++ b/legacy/smartadmin/auth-login.html @@ -0,0 +1,144 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/auth-register.html b/legacy/smartadmin/auth-register.html new file mode 100644 index 0000000..978a530 --- /dev/null +++ b/legacy/smartadmin/auth-register.html @@ -0,0 +1,119 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/auth-twofactor.html b/legacy/smartadmin/auth-twofactor.html new file mode 100644 index 0000000..5fc9d43 --- /dev/null +++ b/legacy/smartadmin/auth-twofactor.html @@ -0,0 +1,101 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/badges.html b/legacy/smartadmin/badges.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/badges.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

Not Found

+

The requested URL was not found on this server.

+
+
Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
+ diff --git a/legacy/smartadmin/buildnotes.html b/legacy/smartadmin/buildnotes.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/buildnotes.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

Not Found

+

The requested URL was not found on this server.

+
+
Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
+ diff --git a/legacy/smartadmin/colorpalette.html b/legacy/smartadmin/colorpalette.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/colorpalette.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

Not Found

+

The requested URL was not found on this server.

+
+
Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
+ diff --git a/legacy/smartadmin/css/smartapp.min.css b/legacy/smartadmin/css/smartapp.min.css new file mode 100644 index 0000000..c9ecbe0 --- /dev/null +++ b/legacy/smartadmin/css/smartapp.min.css @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! + * Bootstrap v5.3.7 (https://getbootstrap.com/) + * Copyright 2011-2025 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */@import url(https://fonts.googleapis.com/css2?family=Public+Sans:ital,wght@0,100..900;1,100..900&display=swap);:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#f8f9fa;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:0.875rem;--bs-body-font-weight:400;--bs-body-line-height:1.6;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{-webkit-box-sizing:border-box;box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}.h1,h1{font-size:calc(1.34375rem + 1.125vw)}@media (min-width:1200px){.h1,h1{font-size:2.1875rem}}.h2,h2{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h2,h2{font-size:1.75rem}}.h3,h3{font-size:calc(1.278125rem + .3375vw)}@media (min-width:1200px){.h3,h3{font-size:1.53125rem}}.h4,h4{font-size:calc(1.25625rem + .075vw)}@media (min-width:1200px){.h4,h4{font-size:1.3125rem}}.h5,h5{font-size:1.09375rem}.h6,h6{font-size:.875rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.09375rem;font-weight:300}.display-1{font-weight:300;line-height:1.2;font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.display-1{font-size:2.5rem}}.display-2{font-weight:300;line-height:1.2;font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.display-2{font-size:2rem}}.display-3{font-weight:300;line-height:1.2;font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.display-3{font-size:1.75rem}}.display-4{font-weight:300;line-height:1.2;font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.display-4{font-size:1.5rem}}.display-5{font-weight:300;line-height:1.2;font-size:1.25rem}.display-6{font-weight:300;line-height:1.2;font-size:1.15rem}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.09375rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px;--bs-breakpoint-xxxl:1599px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{-ms-flex-negative:0;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:2rem}.g-5,.gy-5{--bs-gutter-y:2rem}.g-6,.gx-6{--bs-gutter-x:3rem}.g-6,.gy-6{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-sm-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-sm-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-sm-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-sm-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-sm-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-sm-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:2rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:2rem}.g-sm-6,.gx-sm-6{--bs-gutter-x:3rem}.g-sm-6,.gy-sm-6{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-md-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-md-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-md-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-md-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-md-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-md-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:2rem}.g-md-5,.gy-md-5{--bs-gutter-y:2rem}.g-md-6,.gx-md-6{--bs-gutter-x:3rem}.g-md-6,.gy-md-6{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-lg-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-lg-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-lg-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-lg-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-lg-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-lg-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:2rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:2rem}.g-lg-6,.gx-lg-6{--bs-gutter-x:3rem}.g-lg-6,.gy-lg-6{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-xl-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xl-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xl-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xl-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xl-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xl-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:2rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:2rem}.g-xl-6,.gx-xl-6{--bs-gutter-x:3rem}.g-xl-6,.gy-xl-6{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-xxl-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xxl-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xxl-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xxl-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xxl-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xxl-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xxl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xxl-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-xxl-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xxl-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xxl-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-xxl-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-xxl-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xxl-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-xxl-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-xxl-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xxl-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-xxl-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-xxl-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--bs-gutter-x:3rem}.g-xxl-6,.gy-xxl-6{--bs-gutter-y:3rem}}@media (min-width:1599px){.col-xxxl{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0}.row-cols-xxxl-auto>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.row-cols-xxxl-1>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.row-cols-xxxl-2>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.row-cols-xxxl-3>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.row-cols-xxxl-4>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.row-cols-xxxl-5>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:20%}.row-cols-xxxl-6>*{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xxxl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.col-xxxl-1{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:8.33333333%}.col-xxxl-2{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:16.66666667%}.col-xxxl-3{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.col-xxxl-4{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:33.33333333%}.col-xxxl-5{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:41.66666667%}.col-xxxl-6{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.col-xxxl-7{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:58.33333333%}.col-xxxl-8{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:66.66666667%}.col-xxxl-9{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.col-xxxl-10{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:83.33333333%}.col-xxxl-11{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:91.66666667%}.col-xxxl-12{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.offset-xxxl-0{margin-left:0}.offset-xxxl-1{margin-left:8.33333333%}.offset-xxxl-2{margin-left:16.66666667%}.offset-xxxl-3{margin-left:25%}.offset-xxxl-4{margin-left:33.33333333%}.offset-xxxl-5{margin-left:41.66666667%}.offset-xxxl-6{margin-left:50%}.offset-xxxl-7{margin-left:58.33333333%}.offset-xxxl-8{margin-left:66.66666667%}.offset-xxxl-9{margin-left:75%}.offset-xxxl-10{margin-left:83.33333333%}.offset-xxxl-11{margin-left:91.66666667%}.g-xxxl-0,.gx-xxxl-0{--bs-gutter-x:0}.g-xxxl-0,.gy-xxxl-0{--bs-gutter-y:0}.g-xxxl-1,.gx-xxxl-1{--bs-gutter-x:0.25rem}.g-xxxl-1,.gy-xxxl-1{--bs-gutter-y:0.25rem}.g-xxxl-2,.gx-xxxl-2{--bs-gutter-x:0.5rem}.g-xxxl-2,.gy-xxxl-2{--bs-gutter-y:0.5rem}.g-xxxl-3,.gx-xxxl-3{--bs-gutter-x:1rem}.g-xxxl-3,.gy-xxxl-3{--bs-gutter-y:1rem}.g-xxxl-4,.gx-xxxl-4{--bs-gutter-x:1.5rem}.g-xxxl-4,.gy-xxxl-4{--bs-gutter-y:1.5rem}.g-xxxl-5,.gx-xxxl-5{--bs-gutter-x:2rem}.g-xxxl-5,.gy-xxxl-5{--bs-gutter-y:2rem}.g-xxxl-6,.gx-xxxl-6{--bs-gutter-x:3rem}.g-xxxl-6,.gy-xxxl-6{--bs-gutter-y:3rem}}.table{--bs-table-color-type:initial;--bs-table-bg-type:initial;--bs-table-color-state:initial;--bs-table-bg-state:initial;--bs-table-color:var(--bs-emphasis-color);--bs-table-bg:var(--bs-body-bg);--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-emphasis-color);--bs-table-striped-bg:rgba(var(--bs-emphasis-color-rgb), 0.025);--bs-table-active-color:var(--bs-emphasis-color);--bs-table-active-bg:rgba(var(--bs-emphasis-color-rgb), 0.1);--bs-table-hover-color:var(--bs-emphasis-color);--bs-table-hover-bg:rgba(var(--bs-emphasis-color-rgb), 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);-webkit-box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)));box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state,var(--bs-table-bg-type,var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type:var(--bs-table-striped-color);--bs-table-bg-type:var(--bs-table-striped-bg)}.table-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a6b5cc;--bs-table-striped-bg:#cadcf9;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b5b6b7;--bs-table-striped-bg:#dcdddf;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#a7b9b1;--bs-table-striped-bg:#cce1d7;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a6c3ca;--bs-table-striped-bg:#caeef6;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f9edc8;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#f2d2d5;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#c6c7c8;--bs-table-striped-bg:#f2f3f4;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#4d5154;--bs-table-striped-bg:#272a2e;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1598.98px){.table-responsive-xxxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.25rem;font-weight:500}.col-form-label{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;font-weight:500;line-height:1.6}.col-form-label-lg{padding-top:calc(.75rem + var(--bs-border-width));padding-bottom:calc(.75rem + var(--bs-border-width));font-size:1.125rem}.col-form-label-sm{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));font-size:.825rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.5rem 1.125rem;font-size:.875rem;font-weight:400;line-height:1.6;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:#86b7fe;outline:0;-webkit-box-shadow:0 0 0 .25rem rgba(13,110,253,.25);box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.6em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-webkit-input-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:-ms-input-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::-ms-input-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-secondary-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.5rem 1.125rem;margin:-.5rem -1.125rem;-webkit-margin-end:1.125rem;margin-inline-end:1.125rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.5rem 1.125rem;margin:-.5rem -1.125rem;-webkit-margin-end:1.125rem;margin-inline-end:1.125rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.5rem 0;margin-bottom:0;line-height:1.6;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.6em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem .844rem;font-size:.825rem;border-radius:var(--bs-border-radius-sm)}.form-control-sm::-webkit-file-upload-button{padding:.375rem .844rem;margin:-.375rem -.844rem;-webkit-margin-end:.844rem;margin-inline-end:.844rem}.form-control-sm::file-selector-button{padding:.375rem .844rem;margin:-.375rem -.844rem;-webkit-margin-end:.844rem;margin-inline-end:.844rem}.form-control-lg{min-height:calc(1.6em + 1.5rem + calc(var(--bs-border-width) * 2));padding:.75rem 1.5rem;font-size:1.125rem;border-radius:var(--bs-border-radius-lg)}.form-control-lg::-webkit-file-upload-button{padding:.75rem 1.5rem;margin:-.75rem -1.5rem;-webkit-margin-end:1.5rem;margin-inline-end:1.5rem}.form-control-lg::file-selector-button{padding:.75rem 1.5rem;margin:-.75rem -1.5rem;-webkit-margin-end:1.5rem;margin-inline-end:1.5rem}textarea.form-control{min-height:calc(1.6em + 1rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.6em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.6em + 1.5rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.6em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--bs-border-radius)}.form-control-color.form-control-sm{height:calc(1.6em + .75rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.6em + 1.5rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.5rem 3.375rem .5rem 1.125rem;font-size:.875rem;font-weight:400;line-height:1.6;color:var(--bs-body-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-body-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right 1.125rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-select{-webkit-transition:none;transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;-webkit-box-shadow:0 0 0 .25rem rgba(13,110,253,.25);box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:1.125rem;background-image:none}.form-select:disabled{background-color:var(--bs-secondary-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.375rem;padding-bottom:.375rem;padding-left:.844rem;font-size:.825rem;border-radius:var(--bs-border-radius-sm)}.form-select-lg{padding-top:.75rem;padding-bottom:.75rem;padding-left:1.5rem;font-size:1.125rem;border-radius:var(--bs-border-radius-lg)}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.4rem;padding-left:1.71em;margin-bottom:.25rem}.form-check .form-check-input{float:left;margin-left:-1.71em}.form-check-reverse{padding-right:1.71em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.71em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-body-bg);-ms-flex-negative:0;flex-shrink:0;width:1.21em;height:1.21em;margin-top:.195em;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{-webkit-filter:brightness(90%);filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;-webkit-box-shadow:0 0 0 .25rem rgba(13,110,253,.25);box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;-webkit-filter:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;-webkit-transition:background-position .15s ease-in-out;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{-webkit-transition:none;transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;-webkit-filter:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25);box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;-webkit-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;-moz-appearance:none;appearance:none;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-secondary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));min-height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;max-width:100%;height:100%;padding:1rem 1.125rem;overflow:hidden;color:rgba(var(--bs-body-color-rgb),.65);text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transition:opacity .1s ease-in-out,-webkit-transform .1s ease-in-out;transition:opacity .1s ease-in-out,-webkit-transform .1s ease-in-out;transition:opacity .1s ease-in-out,transform .1s ease-in-out;transition:opacity .1s ease-in-out,transform .1s ease-in-out,-webkit-transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{-webkit-transition:none;transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem 1.125rem}.form-floating>.form-control-plaintext::-webkit-input-placeholder,.form-floating>.form-control::-webkit-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext:-ms-input-placeholder,.form-floating>.form-control:-ms-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::-ms-input-placeholder,.form-floating>.form-control::-ms-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder),.form-floating>.form-control:not(:-moz-placeholder){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:not(:-ms-input-placeholder),.form-floating>.form-control:not(:-ms-input-placeholder){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem;padding-left:1.125rem}.form-floating>.form-control:not(:-moz-placeholder)~label{transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:not(:-ms-input-placeholder)~label{transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{-webkit-transform:scale(.85) translateY(-.5rem) translateX(.15rem);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{-webkit-transform:scale(.85) translateY(-.5rem) translateX(.15rem);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>textarea:not(:-moz-placeholder)~label::after{position:absolute;inset:1rem .5625rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>textarea:not(:-ms-input-placeholder)~label::after{position:absolute;inset:1rem .5625rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>textarea:focus~label::after,.form-floating>textarea:not(:placeholder-shown)~label::after{position:absolute;inset:1rem .5625rem;z-index:-1;height:1.5em;content:"";background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius)}.form-floating>textarea:disabled~label::after{background-color:var(--bs-secondary-bg)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#6c757d}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1.125rem;font-size:.875rem;font-weight:400;line-height:1.6;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius)}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.75rem 1.5rem;font-size:1.125rem;border-radius:var(--bs-border-radius-lg)}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.375rem .844rem;font-size:.825rem;border-radius:var(--bs-border-radius-sm)}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:4.5rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(-1 * var(--bs-border-width));border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-valid-color)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.825rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-form-valid-border-color);padding-right:calc(1.6em + 1rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.4em + .25rem) center;background-size:calc(.8em + .5rem) calc(.8em + .5rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-form-valid-border-color);-webkit-box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.6em + 1rem);background-position:top calc(.4em + .25rem) right calc(.4em + .25rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-form-valid-border-color)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:6.1875rem;background-position:right 1.125rem center,center right 3.375rem;background-size:16px 12px,calc(.8em + .5rem) calc(.8em + .5rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-form-valid-border-color);-webkit-box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.6em + 1rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{-webkit-box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-form-invalid-color)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.825rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-form-invalid-border-color);padding-right:calc(1.6em + 1rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.4em + .25rem) center;background-size:calc(.8em + .5rem) calc(.8em + .5rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-form-invalid-border-color);-webkit-box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.6em + 1rem);background-position:top calc(.4em + .25rem) right calc(.4em + .25rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-form-invalid-border-color)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:6.1875rem;background-position:right 1.125rem center,center right 3.375rem;background-size:16px 12px,calc(.8em + .5rem) calc(.8em + .5rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-form-invalid-border-color);-webkit-box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.6em + 1rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{-webkit-box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:1.125rem;--bs-btn-padding-y:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.6;--bs-btn-color:var(--bs-body-color);--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:var(--bs-border-radius);--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;-webkit-box-shadow:var(--bs-btn-focus-box-shadow);box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;-webkit-box-shadow:var(--bs-btn-focus-box-shadow);box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{-webkit-box-shadow:var(--bs-btn-focus-box-shadow);box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{-webkit-box-shadow:var(--bs-btn-focus-box-shadow);box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:0 0 0 #000;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.75rem;--bs-btn-padding-x:1.5rem;--bs-btn-font-size:1.125rem;--bs-btn-border-radius:var(--bs-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.375rem;--bs-btn-padding-x:0.844rem;--bs-btn-font-size:0.825rem;--bs-btn-border-radius:var(--bs-border-radius-sm)}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;-webkit-transition:width .35s ease;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{-webkit-transition:none;transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:0.85rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(var(--bs-border-radius) - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:var(--bs-box-shadow);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:var(--bs-tertiary-color);--bs-dropdown-item-padding-x:1.5rem;--bs-dropdown-item-padding-y:0.65rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1.5rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1599px){.dropdown-menu-xxxl-start{--bs-position:start}.dropdown-menu-xxxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxxl-end{--bs-position:end}.dropdown-menu-xxxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.825rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--bs-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(-1 * var(--bs-border-width))}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.84375rem;padding-left:.84375rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.633rem;padding-left:.633rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(-1 * var(--bs-border-width))}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{-webkit-transition:none;transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;-webkit-box-shadow:0 0 0 .25rem rgba(13,110,253,.25);box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.125rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.125rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:var(--bs-border-radius);--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:inherit;flex-wrap:inherit;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);-webkit-transition:var(--bs-navbar-toggler-transition);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{-webkit-transition:none;transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;-webkit-box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width);box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1599px){.navbar-expand-xxxl{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xxxl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xxxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxxl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xxxl .navbar-toggler{display:none}.navbar-expand-xxxl .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand-xxxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxxl .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;-webkit-transform:none!important;transform:none!important;-webkit-transition:none;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child)>.card-header,.card-group>.card:not(:last-child)>.card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child)>.card-footer,.card-group>.card:not(:last-child)>.card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child)>.card-header,.card-group>.card:not(:first-child)>.card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child)>.card-footer,.card-group>.card:not(:first-child)>.card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1.25rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1.25rem;--bs-accordion-active-color:var(--bs-primary-text-emphasis);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:.875rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;-webkit-transition:var(--bs-accordion-transition);transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{-webkit-transition:none;transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);-webkit-box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);-webkit-transform:var(--bs-accordion-btn-icon-transform);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{-ms-flex-negative:0;flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);-webkit-transition:var(--bs-accordion-btn-icon-transition);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{-webkit-transition:none;transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;outline:0;-webkit-box-shadow:var(--bs-accordion-btn-focus-box-shadow);box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:0.875rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius-sm);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{-webkit-transition:none;transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;-webkit-box-shadow:var(--bs-pagination-focus-box-shadow);box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item .page-link{border-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.125rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.825rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.badge{--bs-badge-padding-x:0.7em;--bs-badge-padding-y:0.5em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:500;--bs-badge-color:#fff;--bs-badge-border-radius:var(--bs-border-radius);display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:var(--bs-border-radius);--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text-emphasis);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text-emphasis);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color:var(--bs-success-text-emphasis);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color:var(--bs-info-text-emphasis);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color:var(--bs-warning-text-emphasis);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color:var(--bs-danger-text-emphasis);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color:var(--bs-light-text-emphasis);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color:var(--bs-dark-text-emphasis);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text-emphasis)}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}@keyframes progress-bar-stripes{0%{background-position-x:var(--bs-progress-height)}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.65625rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:-webkit-box;display:-ms-flexbox;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);-webkit-transition:var(--bs-progress-bar-transition);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:not(.active):active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1599px){.list-group-horizontal-xxxl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xxxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text-emphasis);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-primary-border-subtle);--bs-list-group-active-color:var(--bs-primary-bg-subtle);--bs-list-group-active-bg:var(--bs-primary-text-emphasis);--bs-list-group-active-border-color:var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text-emphasis);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-secondary-border-subtle);--bs-list-group-active-color:var(--bs-secondary-bg-subtle);--bs-list-group-active-bg:var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color:var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text-emphasis);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-success-border-subtle);--bs-list-group-active-color:var(--bs-success-bg-subtle);--bs-list-group-active-bg:var(--bs-success-text-emphasis);--bs-list-group-active-border-color:var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text-emphasis);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-info-border-subtle);--bs-list-group-active-color:var(--bs-info-bg-subtle);--bs-list-group-active-bg:var(--bs-info-text-emphasis);--bs-list-group-active-border-color:var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text-emphasis);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-warning-border-subtle);--bs-list-group-active-color:var(--bs-warning-bg-subtle);--bs-list-group-active-bg:var(--bs-warning-text-emphasis);--bs-list-group-active-border-color:var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text-emphasis);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-danger-border-subtle);--bs-list-group-active-color:var(--bs-danger-bg-subtle);--bs-list-group-active-bg:var(--bs-danger-text-emphasis);--bs-list-group-active-border-color:var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text-emphasis);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-light-border-subtle);--bs-list-group-active-color:var(--bs-light-bg-subtle);--bs-list-group-active-bg:var(--bs-light-text-emphasis);--bs-list-group-active-border-color:var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text-emphasis);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle);--bs-list-group-action-active-color:var(--bs-emphasis-color);--bs-list-group-action-active-bg:var(--bs-dark-border-subtle);--bs-list-group-active-color:var(--bs-dark-bg-subtle);--bs-list-group-active-bg:var(--bs-dark-text-emphasis);--bs-list-group-active-border-color:var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;-webkit-box-sizing:content-box;box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;-webkit-filter:var(--bs-btn-close-filter);filter:var(--bs-btn-close-filter);border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;-webkit-box-shadow:var(--bs-btn-close-focus-shadow);box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}[data-bs-theme=dark]{--bs-btn-close-filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);-webkit-box-shadow:var(--bs-toast-box-shadow);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color:var(--bs-body-color);--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:var(--bs-box-shadow-sm);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.6;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{-webkit-transform:translate(0,-50px);transform:translate(0,-50px);-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin-top:calc(-.5 * var(--bs-modal-header-padding-y));margin-right:calc(-.5 * var(--bs-modal-header-padding-x));margin-bottom:calc(-.5 * var(--bs-modal-header-padding-y));margin-left:auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:var(--bs-box-shadow)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}@media (max-width:1598.98px){.modal-fullscreen-xxxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxxl-down .modal-footer,.modal-fullscreen-xxxl-down .modal-header{border-radius:0}.modal-fullscreen-xxxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:182px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-font-size:0.825rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(-1 * var(--bs-tooltip-arrow-height))}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:calc(-1 * var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.825rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:3px;--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - 3px);--bs-popover-box-shadow:var(--bs-box-shadow);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:0.875rem;--bs-popover-header-color:inherit;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.6;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;-webkit-filter:var(--bs-carousel-control-icon-filter);filter:var(--bs-carousel-control-icon-filter);border:0;opacity:.5;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:var(--bs-carousel-indicator-active-bg);background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:var(--bs-carousel-caption-color);text-align:center}.carousel-dark{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light]{--bs-carousel-indicator-active-bg:#fff;--bs-carousel-caption-color:#fff}[data-bs-theme=dark]{--bs-carousel-indicator-active-bg:#000;--bs-carousel-caption-color:#000;--bs-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;-webkit-animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:1.5rem;--bs-spinner-height:1.5rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:0.875rem;--bs-spinner-height:0.875rem;--bs-spinner-border-width:0.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{--bs-spinner-width:1.5rem;--bs-spinner-height:1.5rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:0.875rem;--bs-spinner-height:0.875rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl,.offcanvas-xxxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:var(--bs-box-shadow-sm);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.6}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{-webkit-transition:none;transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{-webkit-transform:none;transform:none}.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{-webkit-transition:none;transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{-webkit-transform:none;transform:none}.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{-webkit-transition:none;transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{-webkit-transform:none;transform:none}.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{-webkit-transition:none;transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{-webkit-transform:none;transform:none}.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{-webkit-transition:none;transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{-webkit-transform:none;transform:none}.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1598.98px){.offcanvas-xxxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}}@media (max-width:1598.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxxl{-webkit-transition:none;transition:none}}@media (max-width:1598.98px){.offcanvas-xxxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas-xxxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-xxxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas-xxxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas-xxxl.show:not(.hiding),.offcanvas-xxxl.showing{-webkit-transform:none;transform:none}.offcanvas-xxxl.hiding,.offcanvas-xxxl.show,.offcanvas-xxxl.showing{visibility:visible}}@media (min-width:1599px){.offcanvas-xxxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxxl .offcanvas-header{display:none}.offcanvas-xxxl .offcanvas-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;-webkit-transition:var(--bs-offcanvas-transition);transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{-webkit-transition:none;transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(-100%);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(-100%);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);-webkit-transform:translateY(100%);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{-webkit-transform:none;transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y));margin-left:auto}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{-webkit-animation:placeholder-glow 2s ease-in-out infinite;animation:placeholder-glow 2s ease-in-out infinite}@-webkit-keyframes placeholder-glow{50%{opacity:.2}}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-animation:placeholder-wave 2s linear infinite;animation:placeholder-wave 2s linear infinite}@-webkit-keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0;mask-position:-200% 0}}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,.75))!important}.focus-ring:focus{outline:0;-webkit-box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:.375rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,.5));text-underline-offset:.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{-ms-flex-negative:0;flex-shrink:0;width:1em;height:1em;fill:currentcolor;-webkit-transition:.2s ease-in-out transform;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{-webkit-transition:none;transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{-webkit-transform:var(--bs-icon-link-transform,translate3d(.25em,0,0));transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width:1599px){.sticky-xxxl-top{position:sticky;top:0;z-index:1020}.sticky-xxxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch}.vstack{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-item-align:stretch;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){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}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;-ms-flex-item-align:stretch;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-none{display:none!important}.shadow{-webkit-box-shadow:var(--bs-box-shadow)!important;box-shadow:var(--bs-box-shadow)!important}.shadow-sm{-webkit-box-shadow:var(--bs-box-shadow-sm)!important;box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{-webkit-box-shadow:var(--bs-box-shadow-lg)!important;box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{-webkit-transform:translate(-50%,-50%)!important;transform:translate(-50%,-50%)!important}.translate-middle-x{-webkit-transform:translateX(-50%)!important;transform:translateX(-50%)!important}.translate-middle-y{-webkit-transform:translateY(-50%)!important;transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:2rem!important}.m-6{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:2rem!important;margin-left:2rem!important}.mx-6{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:2rem!important}.mt-6{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:2rem!important}.me-6{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:2rem!important}.mb-6{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:2rem!important}.ms-6{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:2rem!important}.p-6{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:2rem!important;padding-left:2rem!important}.px-6{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:2rem!important}.pt-6{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:2rem!important}.pe-6{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:2rem!important}.pb-6{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:2rem!important}.ps-6{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:2rem!important}.gap-6{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:2rem!important}.row-gap-6{row-gap:3rem!important}.column-gap-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.34375rem + 1.125vw)!important}.fs-2{font-size:calc(1.3rem + .6vw)!important}.fs-3{font-size:calc(1.278125rem + .3375vw)!important}.fs-4{font-size:calc(1.25625rem + .075vw)!important}.fs-5{font-size:1.09375rem!important}.fs-6{font-size:.875rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.6!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:.125em!important}.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2{text-underline-offset:.25em!important}.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3{text-underline-offset:.375em!important}.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-sm-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-sm-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-sm-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-sm-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-sm-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-sm-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-sm-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-sm-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-sm-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:2rem!important}.m-sm-6{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:2rem!important;margin-left:2rem!important}.mx-sm-6{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-sm-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:2rem!important}.mt-sm-6{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:2rem!important}.me-sm-6{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:2rem!important}.mb-sm-6{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:2rem!important}.ms-sm-6{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:2rem!important}.p-sm-6{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:2rem!important;padding-left:2rem!important}.px-sm-6{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-sm-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:2rem!important}.pt-sm-6{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:2rem!important}.pe-sm-6{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:2rem!important}.pb-sm-6{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:2rem!important}.ps-sm-6{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:2rem!important}.gap-sm-6{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:2rem!important}.row-gap-sm-6{row-gap:3rem!important}.column-gap-sm-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-sm-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-md-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-md-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-md-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-md-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-md-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-md-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-md-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-md-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-md-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:2rem!important}.m-md-6{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:2rem!important;margin-left:2rem!important}.mx-md-6{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-md-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:2rem!important}.mt-md-6{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:2rem!important}.me-md-6{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:2rem!important}.mb-md-6{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:2rem!important}.ms-md-6{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:2rem!important}.p-md-6{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:2rem!important;padding-left:2rem!important}.px-md-6{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-md-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:2rem!important}.pt-md-6{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:2rem!important}.pe-md-6{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:2rem!important}.pb-md-6{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:2rem!important}.ps-md-6{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:2rem!important}.gap-md-6{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:2rem!important}.row-gap-md-6{row-gap:3rem!important}.column-gap-md-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-md-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-lg-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-lg-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-lg-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-lg-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-lg-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-lg-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-lg-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-lg-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-lg-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:2rem!important}.m-lg-6{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:2rem!important;margin-left:2rem!important}.mx-lg-6{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-lg-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:2rem!important}.mt-lg-6{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:2rem!important}.me-lg-6{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:2rem!important}.mb-lg-6{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:2rem!important}.ms-lg-6{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:2rem!important}.p-lg-6{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:2rem!important;padding-left:2rem!important}.px-lg-6{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-lg-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:2rem!important}.pt-lg-6{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:2rem!important}.pe-lg-6{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:2rem!important}.pb-lg-6{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:2rem!important}.ps-lg-6{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:2rem!important}.gap-lg-6{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:2rem!important}.row-gap-lg-6{row-gap:3rem!important}.column-gap-lg-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-lg-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-xl-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-xl-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-xl-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-xl-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-xl-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-xl-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-xl-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-xl-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-xl-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:2rem!important}.m-xl-6{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:2rem!important}.mt-xl-6{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:2rem!important}.me-xl-6{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:2rem!important}.mb-xl-6{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:2rem!important}.ms-xl-6{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:2rem!important}.p-xl-6{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xl-6{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xl-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:2rem!important}.pt-xl-6{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:2rem!important}.pe-xl-6{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:2rem!important}.pb-xl-6{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:2rem!important}.ps-xl-6{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:2rem!important}.gap-xl-6{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:2rem!important}.row-gap-xl-6{row-gap:3rem!important}.column-gap-xl-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xl-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xxl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xxl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xxl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xxl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xxl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xxl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xxl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xxl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xxl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-xxl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xxl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xxl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xxl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xxl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xxl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xxl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-xxl-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-xxl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xxl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xxl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xxl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xxl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xxl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xxl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xxl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xxl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xxl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xxl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xxl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xxl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xxl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xxl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xxl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xxl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-xxl-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-xxl-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-xxl-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-xxl-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-xxl-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-xxl-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-xxl-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-xxl-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:2rem!important}.m-xxl-6{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xxl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xxl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:2rem!important}.mt-xxl-6{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:2rem!important}.me-xxl-6{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:2rem!important}.mb-xxl-6{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:2rem!important}.ms-xxl-6{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:2rem!important}.p-xxl-6{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xxl-6{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xxl-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:2rem!important}.pt-xxl-6{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:2rem!important}.pe-xxl-6{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:2rem!important}.pb-xxl-6{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:2rem!important}.ps-xxl-6{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:2rem!important}.gap-xxl-6{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:2rem!important}.row-gap-xxl-6{row-gap:3rem!important}.column-gap-xxl-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xxl-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1599px){.float-xxxl-start{float:left!important}.float-xxxl-end{float:right!important}.float-xxxl-none{float:none!important}.object-fit-xxxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxxl-inline{display:inline!important}.d-xxxl-inline-block{display:inline-block!important}.d-xxxl-block{display:block!important}.d-xxxl-grid{display:grid!important}.d-xxxl-inline-grid{display:inline-grid!important}.d-xxxl-table{display:table!important}.d-xxxl-table-row{display:table-row!important}.d-xxxl-table-cell{display:table-cell!important}.d-xxxl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xxxl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-xxxl-none{display:none!important}.flex-xxxl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xxxl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xxxl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xxxl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xxxl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xxxl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xxxl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xxxl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xxxl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.flex-xxxl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xxxl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xxxl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xxxl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xxxl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xxxl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xxxl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xxxl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.justify-content-xxxl-evenly{-webkit-box-pack:space-evenly!important;-ms-flex-pack:space-evenly!important;justify-content:space-evenly!important}.align-items-xxxl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xxxl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xxxl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xxxl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xxxl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xxxl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xxxl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xxxl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xxxl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xxxl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xxxl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xxxl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xxxl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xxxl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xxxl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xxxl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xxxl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}.order-xxxl-first{-webkit-box-ordinal-group:0!important;-ms-flex-order:-1!important;order:-1!important}.order-xxxl-0{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important}.order-xxxl-1{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important}.order-xxxl-2{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important}.order-xxxl-3{-webkit-box-ordinal-group:4!important;-ms-flex-order:3!important;order:3!important}.order-xxxl-4{-webkit-box-ordinal-group:5!important;-ms-flex-order:4!important;order:4!important}.order-xxxl-5{-webkit-box-ordinal-group:6!important;-ms-flex-order:5!important;order:5!important}.order-xxxl-last{-webkit-box-ordinal-group:7!important;-ms-flex-order:6!important;order:6!important}.m-xxxl-0{margin:0!important}.m-xxxl-1{margin:.25rem!important}.m-xxxl-2{margin:.5rem!important}.m-xxxl-3{margin:1rem!important}.m-xxxl-4{margin:1.5rem!important}.m-xxxl-5{margin:2rem!important}.m-xxxl-6{margin:3rem!important}.m-xxxl-auto{margin:auto!important}.mx-xxxl-0{margin-right:0!important;margin-left:0!important}.mx-xxxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxxl-5{margin-right:2rem!important;margin-left:2rem!important}.mx-xxxl-6{margin-right:3rem!important;margin-left:3rem!important}.mx-xxxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxxl-5{margin-top:2rem!important;margin-bottom:2rem!important}.my-xxxl-6{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxxl-0{margin-top:0!important}.mt-xxxl-1{margin-top:.25rem!important}.mt-xxxl-2{margin-top:.5rem!important}.mt-xxxl-3{margin-top:1rem!important}.mt-xxxl-4{margin-top:1.5rem!important}.mt-xxxl-5{margin-top:2rem!important}.mt-xxxl-6{margin-top:3rem!important}.mt-xxxl-auto{margin-top:auto!important}.me-xxxl-0{margin-right:0!important}.me-xxxl-1{margin-right:.25rem!important}.me-xxxl-2{margin-right:.5rem!important}.me-xxxl-3{margin-right:1rem!important}.me-xxxl-4{margin-right:1.5rem!important}.me-xxxl-5{margin-right:2rem!important}.me-xxxl-6{margin-right:3rem!important}.me-xxxl-auto{margin-right:auto!important}.mb-xxxl-0{margin-bottom:0!important}.mb-xxxl-1{margin-bottom:.25rem!important}.mb-xxxl-2{margin-bottom:.5rem!important}.mb-xxxl-3{margin-bottom:1rem!important}.mb-xxxl-4{margin-bottom:1.5rem!important}.mb-xxxl-5{margin-bottom:2rem!important}.mb-xxxl-6{margin-bottom:3rem!important}.mb-xxxl-auto{margin-bottom:auto!important}.ms-xxxl-0{margin-left:0!important}.ms-xxxl-1{margin-left:.25rem!important}.ms-xxxl-2{margin-left:.5rem!important}.ms-xxxl-3{margin-left:1rem!important}.ms-xxxl-4{margin-left:1.5rem!important}.ms-xxxl-5{margin-left:2rem!important}.ms-xxxl-6{margin-left:3rem!important}.ms-xxxl-auto{margin-left:auto!important}.p-xxxl-0{padding:0!important}.p-xxxl-1{padding:.25rem!important}.p-xxxl-2{padding:.5rem!important}.p-xxxl-3{padding:1rem!important}.p-xxxl-4{padding:1.5rem!important}.p-xxxl-5{padding:2rem!important}.p-xxxl-6{padding:3rem!important}.px-xxxl-0{padding-right:0!important;padding-left:0!important}.px-xxxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxxl-5{padding-right:2rem!important;padding-left:2rem!important}.px-xxxl-6{padding-right:3rem!important;padding-left:3rem!important}.py-xxxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxxl-5{padding-top:2rem!important;padding-bottom:2rem!important}.py-xxxl-6{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxxl-0{padding-top:0!important}.pt-xxxl-1{padding-top:.25rem!important}.pt-xxxl-2{padding-top:.5rem!important}.pt-xxxl-3{padding-top:1rem!important}.pt-xxxl-4{padding-top:1.5rem!important}.pt-xxxl-5{padding-top:2rem!important}.pt-xxxl-6{padding-top:3rem!important}.pe-xxxl-0{padding-right:0!important}.pe-xxxl-1{padding-right:.25rem!important}.pe-xxxl-2{padding-right:.5rem!important}.pe-xxxl-3{padding-right:1rem!important}.pe-xxxl-4{padding-right:1.5rem!important}.pe-xxxl-5{padding-right:2rem!important}.pe-xxxl-6{padding-right:3rem!important}.pb-xxxl-0{padding-bottom:0!important}.pb-xxxl-1{padding-bottom:.25rem!important}.pb-xxxl-2{padding-bottom:.5rem!important}.pb-xxxl-3{padding-bottom:1rem!important}.pb-xxxl-4{padding-bottom:1.5rem!important}.pb-xxxl-5{padding-bottom:2rem!important}.pb-xxxl-6{padding-bottom:3rem!important}.ps-xxxl-0{padding-left:0!important}.ps-xxxl-1{padding-left:.25rem!important}.ps-xxxl-2{padding-left:.5rem!important}.ps-xxxl-3{padding-left:1rem!important}.ps-xxxl-4{padding-left:1.5rem!important}.ps-xxxl-5{padding-left:2rem!important}.ps-xxxl-6{padding-left:3rem!important}.gap-xxxl-0{gap:0!important}.gap-xxxl-1{gap:.25rem!important}.gap-xxxl-2{gap:.5rem!important}.gap-xxxl-3{gap:1rem!important}.gap-xxxl-4{gap:1.5rem!important}.gap-xxxl-5{gap:2rem!important}.gap-xxxl-6{gap:3rem!important}.row-gap-xxxl-0{row-gap:0!important}.row-gap-xxxl-1{row-gap:.25rem!important}.row-gap-xxxl-2{row-gap:.5rem!important}.row-gap-xxxl-3{row-gap:1rem!important}.row-gap-xxxl-4{row-gap:1.5rem!important}.row-gap-xxxl-5{row-gap:2rem!important}.row-gap-xxxl-6{row-gap:3rem!important}.column-gap-xxxl-0{-webkit-column-gap:0!important;-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxxl-1{-webkit-column-gap:.25rem!important;-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxxl-2{-webkit-column-gap:.5rem!important;-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxxl-3{-webkit-column-gap:1rem!important;-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxxl-4{-webkit-column-gap:1.5rem!important;-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxxl-5{-webkit-column-gap:2rem!important;-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xxxl-6{-webkit-column-gap:3rem!important;-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxxl-start{text-align:left!important}.text-xxxl-end{text-align:right!important}.text-xxxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.1875rem!important}.fs-2{font-size:1.75rem!important}.fs-3{font-size:1.53125rem!important}.fs-4{font-size:1.3125rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}.d-print-none{display:none!important}}:root{--bs-blue:#4089e0;--bs-indigo:#9b6ab5;--bs-purple:#b756a8;--bs-pink:#c55d9e;--bs-red:#fd5484;--bs-orange:#fe7e6b;--bs-yellow:#ffd274;--bs-green:#77c688;--bs-teal:#1fb0d5;--bs-cyan:#20a0e7;--bs-black:#000;--bs-white:#fff;--primary-50:#ccbfdf;--primary-100:#beaed7;--primary-200:#b19dce;--primary-300:#a38cc6;--primary-400:#967bbd;--primary-500:#886ab5;--primary-600:#7a59ad;--primary-700:#6e4e9e;--primary-800:#62468d;--primary-900:#563d7c;--success-50:#7aece0;--success-100:#63e9db;--success-200:#4de5d5;--success-300:#37e2d0;--success-400:#21dfcb;--success-500:#1dc9b7;--success-600:#1ab3a3;--success-700:#179c8e;--success-800:#13867a;--success-900:#107066;--info-50:#9acffa;--info-100:#82c4f8;--info-200:#6ab8f7;--info-300:#51adf6;--info-400:#39a1f4;--info-500:#2196F3;--info-600:#0d8aee;--info-700:#0c7cd5;--info-800:#0a6ebd;--info-900:#0960a5;--warning-50:#ffebc1;--warning-100:#ffe3a7;--warning-200:#ffdb8e;--warning-300:#ffd274;--warning-400:#ffca5b;--warning-500:#ffc241;--warning-600:#ffba28;--warning-700:#ffb20e;--warning-800:#f4a500;--warning-900:#da9400;--danger-50:#feb7d9;--danger-100:#fe9ecb;--danger-200:#fe85be;--danger-300:#fe6bb0;--danger-400:#fd52a3;--danger-500:#fd3995;--danger-600:#fd2087;--danger-700:#fc077a;--danger-800:#e7026e;--danger-900:#ce0262;--fusion-50:#909090;--fusion-100:#838383;--fusion-200:#767676;--fusion-300:dimgray;--fusion-400:#5d5d5d;--fusion-500:#505050;--fusion-600:#434343;--fusion-700:#363636;--fusion-800:#2a2a2a;--fusion-900:#1d1d1d;--dark-50:#404040;--dark-100:#333333;--dark-200:#262626;--dark-300:#1a1a1a;--dark-400:#0d0d0d;--dark-500:#000;--dark-600:black;--dark-700:black;--dark-800:black;--dark-900:black;--light-50:white;--light-100:white;--light-200:white;--light-300:white;--light-400:white;--light-500:#fff;--light-600:#f2f2f2;--light-700:#e6e6e6;--light-800:#d9d9d9;--light-900:#cccccc;--secondary-50:#afb5ba;--secondary-100:#a1a8ae;--secondary-200:#939ba2;--secondary-300:#868e96;--secondary-400:#78828a;--secondary-500:#6c757d;--secondary-600:#60686f;--secondary-700:#545b62;--secondary-800:#494f54;--secondary-900:#3d4246;--bs-primary:#886ab5;--bs-primary-rgb:136,106,181;--bs-primary-text-emphasis:#3e2c5a;--bs-primary-bg-subtle:#dad0e8;--bs-primary-border-subtle:#beaed7;--bs-success:#1dc9b7;--bs-success-rgb:29,201,183;--bs-success-text-emphasis:#0a433d;--bs-success-bg-subtle:#90efe5;--bs-success-border-subtle:#63e9db;--bs-info:#2196F3;--bs-info-rgb:33,150,243;--bs-info-text-emphasis:#064475;--bs-info-bg-subtle:#b2dbfb;--bs-info-border-subtle:#82c4f8;--bs-warning:#ffc241;--bs-warning-rgb:255,194,65;--bs-warning-text-emphasis:#a77100;--bs-warning-bg-subtle:#fff3da;--bs-warning-border-subtle:#ffe3a7;--bs-danger:#fd3995;--bs-danger-rgb:253,57,149;--bs-danger-text-emphasis:#9b024a;--bs-danger-bg-subtle:#ffd0e6;--bs-danger-border-subtle:#fe9ecb;--bs-fusion:#505050;--bs-fusion-rgb:80,80,80;--bs-fusion-text-emphasis:#030303;--bs-fusion-bg-subtle:#9c9c9c;--bs-fusion-border-subtle:#838383;--bs-dark:#000;--bs-dark-rgb:0,0,0;--bs-dark-text-emphasis:black;--bs-dark-bg-subtle:#4d4d4d;--bs-dark-border-subtle:#333333;--bs-light:#fff;--bs-light-rgb:255,255,255;--bs-light-text-emphasis:#b3b3b3;--bs-light-bg-subtle:white;--bs-light-border-subtle:white;--bs-secondary:#6c757d;--bs-secondary-rgb:108,117,125;--bs-secondary-text-emphasis:#25282b;--bs-secondary-bg-subtle:#bcc1c6;--bs-secondary-border-subtle:#a1a8ae;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-form-valid-color:$color-success;--bs-form-valid-border-color:$color-success;--bs-form-invalid-color:$color-danger;--bs-form-invalid-border-color:$color-danger;--app-nav-link-color:var(--bs-gray-800);--app-nav-link-hover-color:#7a59ad;--app-nav-link-active-color:#7a59ad;--app-nav-title-color:#666666;--app-nav-border-color:rgba(var(--secondary), 0.3);--app-nav-item-hover-bg:rgba(136, 106, 181, 0.045);--app-nav-item-active-bg:rgba(var(--secondary), 0.07);--app-nav-item-active-indicator:var(--app-nav-link-active-color);--app-nav-collapse-sign-color:var(--bs-body-color);--bs-link-color:#886ab5;--bs-link-color-rgb:136,106,181;--bs-link-hover-color-rgb:110,78,158;--bs-link-decoration:underline;--bs-link-hover-color:darken($color-primary, 10%);--bs-code-color:#e7026e;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--app-header-height:5.5rem;--menu-width:18rem;--right-content-width:20rem;--menu-width-minified:4.4rem;--menu-top-height-minified:4rem;--menu-top-height:6rem;--drawer-width:24rem;--app-header-fixed:0;--app-nav-full:0;--app-header-background:var(--bs-body-bg);--app-nav-background:var(--bs-body-bg);--app-drawer-background:var(--bs-body-bg);--app-content-background:#fdfdfd;--logo-width:11rem;--logo-height:2rem;--app-layout-border-color:rgba(0, 0, 0, 0.07);--bs-border-color-translucent:rgba(0, 0, 0, 0.1);--bs-border-color:#dee2e6;--app-nav-svgicon-size:1.25rem;--collapse-icon-border:rgba(0, 0, 0, 0.3);--collapse-icon-border-hover:rgba(var(--primary), 0.8);--collapse-icon-width:2.5rem;--collapse-icon-height:1.8rem;--primary:136,106,181;--secondary:108,117,125;--success:29,201,183;--warning:255,194,65;--info:33,150,243;--danger:253,57,149;--fusion:80,80,80;--disable:173,181,189;--white:255,255,255;--font-family:"Public Sans",sans-serif;--direction:ltr;--transition:transform 470ms cubic-bezier(.34, 1.25, .3, 1);--z-index-master:999;--z-index-slave:2;--content-padding:1.25rem;--menu-icon-size:1.625rem;--settings-disabled:0.3;--bs-body-color:#505050;--bs-body-font-size:0.925rem;--bs-form-valid-border-color:#1dc9b7;--bs-form-invalid-border-color:#fd3995;--bs-form-valid-color:#1dc9b7;--bs-form-invalid-color:#fd3995;--input-placeholder-color:rgba(112, 112, 112, 0.5);--bs-secondary-color:rgba(70, 79, 87, 0.70);--scrollbar-width:8px;--scrollbar-color:#f1f1f1;--scrollbar-thumb:#888;--scrollbar-thumb-hover:#555;--border-radius-uniform:0.375rem;--border-radius-uniform-sm:0.25rem;--border-radius-uniform-xs:0.125rem}.nav-pills{--bs-nav-pills-link-active-bg:#886ab5}.progress,.progress-stacked{--bs-progress-bar-bg:#886ab5}.list-group{--bs-list-group-active-bg:#886ab5;--bs-list-group-active-border-color:#886ab5}.form-check-input:checked{background-color:#886ab5;border-color:#886ab5}.form-check-input[type=checkbox]:indeterminate{background-color:#886ab5;border-color:#886ab5}.list-group-item.active{background-color:var(--app-nav-item-active-bg);color:var(--bs-body-color)}.list-group-item:hover{color:var(--app-nav-link-hover-color);background-color:var(--app-nav-item-hover-bg)}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes animateFadeInUp{from{opacity:0;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes animateFadeInUp{from{opacity:0;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}20%{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-animation-timing-function:linear;animation-timing-function:linear}60%{-webkit-transform:rotate(270deg);transform:rotate(270deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}80%{-webkit-transform:rotate(360deg);transform:rotate(360deg);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}20%{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}40%{-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-animation-timing-function:linear;animation-timing-function:linear}60%{-webkit-transform:rotate(270deg);transform:rotate(270deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}80%{-webkit-transform:rotate(360deg);transform:rotate(360deg);-webkit-animation-timing-function:linear;animation-timing-function:linear}100%{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes refresh{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes refresh{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@-webkit-keyframes widthAnimation{0%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}10%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}20%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}30%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}40%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}50%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}60%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}70%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}80%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}100%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}}@keyframes widthAnimation{0%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}10%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}20%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}30%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}40%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}50%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}60%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}70%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}80%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}100%{-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0)}}@-webkit-keyframes animateFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes animateFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes animateFadeInUp{from{opacity:0;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes animateFadeInLeft{from{opacity:0;-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes animateFadeInLeft{from{opacity:0;-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes animateFadeInRight{from{opacity:0;-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}@keyframes animateFadeInRight{from{opacity:0;-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{opacity:1;-webkit-transform:none;transform:none}}.fadeinup{animation:animateFadeInUp .5s;-webkit-animation:animateFadeInUp .5s}.fadeindown{animation:animateFadeInDown .5s;-webkit-animation:animateFadeInDown .5s}.fadeinleft{animation:animateFadeInLeft .5s;-webkit-animation:animateFadeInLeft .5s}.fadeinright{animation:animateFadeInRight .5s;-webkit-animation:animateFadeInRight .5s}body,html{height:100%}body{font-family:var(--font-family);--bs-body-font-size:0.875rem}a{text-decoration:none}img{max-width:100%;height:auto}*{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}a:focus:not(.focus-ring),button:focus:not(.focus-ring),input:focus:not(.focus-ring),select:focus:not(.focus-ring),textarea:focus:not(.focus-ring){-webkit-box-shadow:none!important;box-shadow:none!important}p{margin-bottom:1.5rem}.subheader-title{font-size:1rem;font-weight:700;text-transform:uppercase;color:var(--page-subheader-color,var(--bs-body-color));text-shadow:var(--page-subheader-text-shadow,#fff) 0 1px;margin:0}.subheader-title:not(:has(*)){margin-bottom:2rem}.subheader-title .small,.subheader-title small{color:var(--bs-body-color);display:block;margin:.25rem 0 2rem;line-height:2;font-size:1rem;font-weight:300;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.subheader-title .badge-subheader{font-size:.325em;font-weight:400;text-shadow:none;margin-left:.25rem;margin-top:.25rem}.app-debug-mode{position:relative}.app-debug-mode .app-header::before{content:"";position:absolute;top:0;right:0;background:rgba(var(--primary),.7);z-index:1;padding:2px 4px;font-size:.5rem;color:#fff}.content-wrapper>.app-breadcrumb+*{-webkit-animation:animateFadeInUp .3s;animation:animateFadeInUp .3s}.main-content>*{-webkit-animation:animateFadeInUp .7s;animation:animateFadeInUp .7s}.main-content>*+.row{-webkit-animation:animateFadeInUp 1.4s;animation:animateFadeInUp 1.4s}.app-wrap{min-height:100vh;display:grid;grid-template-columns:var(--menu-width) auto;grid-template-rows:var(--app-header-height) auto;grid-template-areas:"header header" "sidebar main" "sidebar main";gap:0;padding:0;padding-top:var(--app-header-fixed);-webkit-transition:grid-template-columns 470ms cubic-bezier(.34,1.25,.3,1);transition:grid-template-columns 470ms cubic-bezier(.34,1.25,.3,1);transition:grid-template-columns 470ms cubic-bezier(.34,1.25,.3,1),-ms-grid-columns 470ms cubic-bezier(.34,1.25,.3,1)}.app-header{grid-area:header;height:var(--app-header-height);padding:0 2rem 0 0;border-bottom:1px solid var(--app-layout-border-color);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.75rem;margin-left:var(--app-nav-full);background-color:var(--app-header-background,silver)}.app-header .app-logo{width:var(--menu-width);border-right:1px solid var(--app-header-background);margin-right:2rem;will-change:width;-webkit-transition:width 470ms cubic-bezier(.34,1.25,.3,1);transition:width 470ms cubic-bezier(.34,1.25,.3,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.app-header .app-search .form-control{max-width:21.875rem;height:2.625rem;line-height:normal;border-radius:4px;background:0 0;border:1px solid transparent;-webkit-box-shadow:none;box-shadow:none;font-size:.9375rem;padding:.38rem;--bs-secondary-color:var(--input-placeholder-color);text-overflow:ellipsis}.app-header .sa-mode-light{display:none}html[data-bs-theme=dark] .app-header .sa-mode-light{display:block}html[data-bs-theme=dark] .app-header .sa-mode-dark{display:none}.app-sidebar{grid-area:sidebar;width:var(--menu-width);padding:0;border-right:1px solid var(--app-layout-border-color);overflow-x:hidden;z-index:10;position:relative;background:var(--app-nav-background,silver);will-change:width;-webkit-transition:width 470ms cubic-bezier(.34,1.25,.3,1);transition:width 470ms cubic-bezier(.34,1.25,.3,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.app-sidebar .app-logo{display:none}.app-sidebar .app-menu-filter-container{width:var(--menu-width);position:relative;padding-top:1rem;padding-bottom:1rem}.app-body{grid-area:main;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;direction:var(--direction);max-width:100%;width:100%;overflow-x:auto}.app-nav{overflow-x:auto;padding:var(--content-padding)}.app-content{-webkit-box-flex:1;-ms-flex:1;flex:1;background-color:var(--app-content-background,#fdfdfd);display:-webkit-box;display:-ms-flexbox;display:flex}.app-content .content-wrapper{padding:1.5rem 2rem;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;position:relative;overflow-x:hidden}.app-content .content-wrapper .main-content{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.app-content .content-wrapper-right{-webkit-box-flex:0;-ms-flex:0 0 var(--right-content-width);flex:0 0 var(--right-content-width);border-left:1px solid var(--app-layout-border-color)}.app-footer,.nav-footer{padding:1rem 2rem;border-top:1px solid var(--app-layout-border-color);display:-webkit-box;display:-ms-flexbox;display:flex;min-height:55px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.app-footer .app-footer-content,.nav-footer .app-footer-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.1875rem;font-weight:500}.app-footer .app-footer-content .logo,.nav-footer .app-footer-content .logo{height:1.25rem}.sa-fullscreen-on{display:none!important}body.fullscreen-active .sa-fullscreen-on{display:block!important}body.fullscreen-active .sa-fullscreen-off{display:none!important}.hide-page-scrollbar{overflow:hidden;padding-right:var(--scrollbar-width,8px)}.app-drawer{position:fixed;top:0;bottom:0;right:0;width:var(--drawer-width);background:var(--app-drawer-background);border-left:1px solid var(--app-layout-border-color);-webkit-transform:translate3d(calc(var(--drawer-width)),0,0);transform:translate3d(calc(var(--drawer-width)),0,0);-webkit-transition:var(--transition);transition:var(--transition);z-index:calc(var(--z-index-master) + 2);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.app-drawer>*{padding:var(--content-padding)}.app-drawer>:not(.app-drawer-header){overflow-x:auto}.app-drawer .app-drawer-header{height:var(--app-header-height);min-height:var(--app-header-height);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--app-header-background);border-bottom:1px solid var(--app-layout-border-color)}.app-drawer.open{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.app-drawer.open+.backdrop:not([data-toggleclass=app-mobile-menu-open]){display:block;opacity:1}.backdrop{display:none;position:fixed;z-index:calc(var(--z-index-master) + 1);background:rgba(0,0,0,.3);top:0;left:0;right:0;bottom:0;opacity:0;-webkit-animation:fadeIn .4s ease-in-out;animation:fadeIn .4s ease-in-out;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.set-header-fixed .app-header{position:fixed;left:0;right:0;top:0;z-index:var(--z-index-master)}.set-header-fixed.set-nav-full.set-nav-fixed:not(.set-nav-top):not(.set-nav-collapsed) .app-header{position:fixed;left:var(--menu-width);right:0;top:0}.set-header-fixed.set-nav-full.set-nav-fixed:not(.set-nav-top):not(.set-nav-collapsed).set-nav-minified .app-header{left:var(--menu-width-minified);padding-left:2rem}.set-header-fixed.set-nav-full.set-nav-fixed:not(.set-nav-top):not(.set-nav-collapsed).set-nav-minified .app-header .app-logo{display:none}.set-header-fixed:not(.set-nav-fixed) [data-class^=set-nav-full]{opacity:var(--settings-disabled)}.set-header-fixed:not(.set-nav-fixed) [data-class^=set-nav-full]~label{opacity:var(--settings-disabled)}@media (min-width:992px){.app-debug-mode .app-header::before{content:"XXL "}.hidden-lg{display:none!important}.set-nav-top .app-wrap{grid-template-columns:auto auto;grid-template-rows:var(--app-header-height) var(--menu-top-height) auto;grid-template-areas:"header header " "sidebar sidebar" "main main"}.set-nav-top .app-sidebar{min-height:var(--menu-top-height);height:var(--menu-top-height);width:auto;border-right:0;border-bottom:2px dashed #333}.set-nav-top .app-body{width:auto}.set-nav-top [data-class^=set-nav-collapsed],.set-nav-top [data-class^=set-nav-full]{opacity:var(--settings-disabled);text-decoration:line-through}.set-nav-top [data-class^=set-nav-collapsed]~label,.set-nav-top [data-class^=set-nav-full]~label{opacity:var(--settings-disabled);text-decoration:line-through}.set-nav-top.set-nav-collapsed [data-class^=set-nav-collapsed],.set-nav-top.set-nav-collapsed [data-class^=set-nav-full],.set-nav-top.set-nav-full [data-class^=set-nav-collapsed],.set-nav-top.set-nav-full [data-class^=set-nav-full]{opacity:var(--settings-disabled);text-decoration:line-through}.set-nav-top.set-nav-collapsed [data-class^=set-nav-collapsed]~label,.set-nav-top.set-nav-collapsed [data-class^=set-nav-full]~label,.set-nav-top.set-nav-full [data-class^=set-nav-collapsed]~label,.set-nav-top.set-nav-full [data-class^=set-nav-full]~label{opacity:var(--settings-disabled);text-decoration:line-through}.set-nav-top:not(.set-header-fixed) [data-class^=set-nav-fixed]{opacity:var(--settings-disabled)}.set-nav-top:not(.set-header-fixed) [data-class^=set-nav-fixed]~label{opacity:var(--settings-disabled)}.set-nav-minified:not(.set-nav-collapsed) .app-header:has(+.app-sidebar:hover) .app-logo{width:calc(var(--menu-width))}.set-nav-minified:not(.set-nav-collapsed) .app-wrap{grid-template-columns:var(--menu-width-minified) auto!important}.set-nav-minified:not(.set-nav-collapsed) .app-header .app-logo{width:var(--menu-width-minified);overflow:hidden;margin-right:calc(2rem + 1px)}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover){width:var(--menu-width-minified)}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .app-menu-filter-container #searchInput{visibility:hidden}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .primary-nav ul li a span{opacity:0;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .primary-nav ul ul{display:none!important}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .collapse-sign{display:none}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .nav-title{visibility:hidden;position:relative}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .nav-title span{display:none}.set-nav-minified:not(.set-nav-collapsed) .app-sidebar:not(:hover) .nav-title::before{content:"...";color:currentColor;font-size:inherit;visibility:visible;display:inline-block;bottom:50%;inset-inline-start:0;-webkit-margin-start:.225rem;margin-inline-start:.225rem;-webkit-transform:translateX(0);transform:translateX(0)}.set-nav-minified:not(.set-nav-collapsed) .collapse-icon svg{-webkit-transform:scaleX(-1);transform:scaleX(-1);margin-left:.75rem}.set-nav-minified:not(.set-nav-collapsed) .collapse-icon::after{width:.5625rem}.set-nav-minified:not(.set-nav-collapsed) .collapse-icon:hover svg{margin-left:1.125rem}.set-nav-minified:not(.set-nav-collapsed) .collapse-icon:hover::after{width:.875rem}.set-nav-fixed.set-nav-top.set-header-fixed .app-sidebar{position:fixed;top:var(--app-header-height);left:0;right:0;z-index:var(--z-index-master);overflow-y:auto;background-color:rgba(var(--danger),.9)}.set-nav-fixed:not(.set-nav-top).set-nav-full:not(.set-header-fixed) .app-sidebar{position:fixed;top:0;bottom:0;z-index:var(--z-index-master)}.set-nav-fixed:not(.set-nav-top).set-header-fixed:not(.set-nav-full) .app-sidebar{position:fixed;top:var(--app-header-height);bottom:0;z-index:var(--z-index-master);overflow-y:auto}.set-nav-fixed:not(.set-nav-top).set-header-fixed.set-nav-full .app-sidebar{position:fixed;top:0;bottom:0;z-index:var(--z-index-master)}.set-nav-fixed:not(.set-nav-top).set-header-fixed.set-nav-full .app-sidebar .app-logo{display:-webkit-box;display:-ms-flexbox;display:flex}.set-nav-fixed:not(.set-nav-top).set-header-fixed.set-nav-full .app-header{padding-left:2rem}.set-nav-fixed:not(.set-nav-top).set-header-fixed.set-nav-full .app-header .app-logo{display:none}.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) [data-class=set-nav-minified],.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) [data-class^=set-nav-minify]{opacity:var(--settings-disabled)}.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) [data-class=set-nav-minified]~label,.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) [data-class^=set-nav-minify]~label{opacity:var(--settings-disabled)}.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified):not(.set-nav-top) .app-wrap{grid-template-columns:0 auto}.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) .app-sidebar{-webkit-transform:translate3d(calc(10px - var(--menu-width)),0,0);transform:translate3d(calc(10px - var(--menu-width)),0,0);-webkit-transition:var(--transition);transition:var(--transition);z-index:var(--z-index-slave);position:relative;background-color:var(--app-nav-background);overflow-x:visible}.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) .app-sidebar:hover{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.set-nav-collapsed.set-nav-full:not(.set-nav-top):not(.set-nav-minified) .app-sidebar::after{content:"";position:absolute;display:block;z-index:-1;top:0;bottom:0;left:-1.25rem;background:0 0;width:calc(var(--menu-width) + 2.5rem)}.set-nav-full:not(.set-nav-top):not(.set-header-fixed) .app-wrap{grid-template-columns:var(--menu-width) auto;grid-template-rows:var(--app-header-height) auto;grid-template-areas:"sidebar header " "sidebar main" "sidebar main"}.set-nav-full:not(.set-nav-top):not(.set-header-fixed) .app-sidebar .app-logo{display:-webkit-box;display:-ms-flexbox;display:flex;width:var(--menu-width)}.set-nav-full:not(.set-nav-top):not(.set-header-fixed) .app-header{padding-left:2rem}.set-nav-full:not(.set-nav-top):not(.set-header-fixed) .app-header .app-logo{display:none}.set-nav-collapsed.set-nav-fixed .app-sidebar{position:fixed!important;-webkit-transition:all 470ms cubic-bezier(.34,1.25,.3,1);transition:all 470ms cubic-bezier(.34,1.25,.3,1)}.set-nav-collapsed:not(.set-nav-full) .app-wrap{grid-template-columns:var(--menu-width) auto;grid-template-rows:var(--app-header-height) auto;grid-template-areas:"sidebar header " "sidebar main" "sidebar main"}.set-nav-collapsed.set-nav-full.set-header-fixed .app-header{z-index:1;padding-left:2rem}.set-nav-collapsed.set-nav-full.set-header-fixed .app-header .app-logo{display:none}.set-nav-collapsed.set-nav-full.set-header-fixed.set-nav-minified .app-header{position:fixed;left:var(--menu-width);right:0;top:0}}@media only screen and (max-width:1280px){.app-debug-mode .app-header::before{content:"XL"}html{font-size:14px;--menu-width:17rem}}@media only screen and (max-width:991.98px){.app-debug-mode{position:relative}.app-debug-mode .app-header::before{content:"LG"}.form-control,input,select,textarea{font-size:1rem!important}.position-on-mobile-absolute{position:absolute!important}.position-on-mobile-absolute{position:absolute!important}.position-on-mobile-relative{position:relative!important}.position-on-mobile-static{position:static!important}.height-mobile-auto{height:auto!important;min-height:auto!important;max-height:auto!important}.width-mobile-auto{width:auto!important;min-width:auto!important;max-width:auto!important}.expand-full-height-on-mobile{height:calc(100vh - var(--app-header-height))!important}.expand-full-width-on-mobile{width:100vw!important;max-width:100vw!important}html{font-size:17px;--menu-width:18rem}.app-mobile-menu-open{overflow:hidden}body{--bs-body-font-size:1rem;--mobile-page-padding:1rem;--menu-width:18rem}.hidden-sm{display:none!important}.app-sidebar{background:var(--bs-body-bg)}.app-wrap{grid-template-columns:0 auto;grid-template-rows:var(--app-header-height) auto;grid-template-areas:"sidebar header " "sidebar main" "sidebar main"}.app-header{padding:0 var(--mobile-page-padding)!important;gap:1rem}.app-header .app-logo{display:none}.app-header .btn-system .profile-image{width:2.8rem;height:2.8rem;max-width:2.8rem;max-height:2.8rem}.app-header .btn-system .sa-icon{width:1.8rem;height:1.8rem;z-index:1}.app-header .btn-system::before{width:3.5rem;height:3.5rem;z-index:0}.app-header .btn-system.show::before,.app-header .btn-system:hover::before{background:rgba(var(--primary),.1)}.app-header>.flex-grow-1{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.app-sidebar{-webkit-transform:translate3d(calc(-1 * var(--menu-width)),0,0);transform:translate3d(calc(-1 * var(--menu-width)),0,0);-webkit-transition:var(--transition);transition:var(--transition);z-index:calc(var(--z-index-master) + 1);top:0;bottom:0;position:fixed;overflow-y:auto}.app-sidebar .app-logo{display:-webkit-box;display:-ms-flexbox;display:flex;border-bottom:1px solid rgba(0,0,0,.05)}.app-sidebar .primary-nav ul li a{padding-top:10px;padding-bottom:10px;font-size:1rem}.app-sidebar .primary-nav .nav-title{font-size:.85rem}.app-sidebar #searchInput{font-size:1rem;line-height:2.5rem}.app-content .content-wrapper{padding:var(--mobile-page-padding)}.app-footer,.nav-footer{padding:1rem var(--mobile-page-padding)}.btn-system[data-bs-toggle=dropdown]+.dropdown-menu{right:var(--mobile-page-padding)!important}[data-toggleclass=app-mobile-menu-open].backdrop{z-index:var(--z-index-master)}.app-mobile-menu-open .app-sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.app-mobile-menu-open [data-toggleclass=app-mobile-menu-open].backdrop{display:block;opacity:1}.set-header-fixed .app-header{left:0!important}.panel-hdr .h2,.panel-hdr h2{font-size:1rem!important}.panel.panel-icon .panel-toolbar [data-action*=panel-]:not(.dropdown-item) .sa-icon{width:1.8rem!important;height:1.8rem!important}}@media only screen and (max-width:768px){.app-debug-mode .app-header::before{content:"MD"}.hidden-tablet{display:none!important}}@media only screen and (max-width:576px){.app-debug-mode .app-header::before{content:"SM"}.hidden-mobile{display:none!important}html{font-size:16px;--menu-width:18rem}:root{--scrollbar-width:0px}.app-header>:first-child~:not(.dropdown-menu){scale:1;opacity:1;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.app-header:has(.app-search>input:focus){overflow-x:hidden}.app-header:has(.app-search>input:focus) .app-search{position:absolute;left:calc(var(--mobile-page-padding) + 4rem + .5rem);right:var(--mobile-page-padding)}.app-header:has(.app-search>input:focus) .app-search .form-control{max-width:unset}.app-header:has(.app-search>input:focus)>:first-child~:not(.dropdown-menu){scale:0;opacity:0}.app-content .breadcrumb .breadcrumb-item{max-width:100px!important}.app-content .breadcrumb .breadcrumb-item.active{max-width:130px!important}}.app-logo{padding:0 1.5rem;position:relative;height:var(--app-header-height);width:var(--menu-width);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.app-logo>img,.app-logo>svg{z-index:2;width:var(--logo-width);height:var(--logo-height);min-width:var(--logo-width)}.app-logo>svg{fill:none;color:currentColor;stroke-width:1px!important;--logo-color:rgba(var(--primary), 0.8);--logo-color-fill:rgba(var(--white), 0.01)}.app-logo[data-prefix]::before{content:attr(data-prefix);position:absolute;display:block;background:#fafafa;padding:.0625rem .25rem;border-radius:.3125rem;left:13.4375rem;font-size:.6rem;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);line-height:1.08375rem}.app-logo:hover>.logo-backdrop{height:4.375rem;top:.625rem;left:.1875rem;opacity:.4;-webkit-transition:all 150ms cubic-bezier(.34,1.25,.3,1);transition:all 150ms cubic-bezier(.34,1.25,.3,1)}.app-logo:active>.logo-backdrop{height:5rem;top:.3125rem;left:-.125rem;opacity:.2;-webkit-transition:all 550ms cubic-bezier(.34,5.25,.3,1);transition:all 550ms cubic-bezier(.34,5.25,.3,1)}.logo-backdrop{--bg-0:var(--bs-body-bg);--bg-1:var(--bs-body-bg);--blob-1:var(--primary-500);--blob-2:var(--primary-200);--blob-3:var(--bs-body-bg);--blob-4:var(--bs-body-bg);width:3.75rem;height:3.5rem;position:absolute;opacity:.6;top:1.0625rem;left:.625rem;-webkit-transition:all 750ms cubic-bezier(.34,1.25,.3,1);transition:all 750ms cubic-bezier(.34,1.25,.3,1);z-index:1}.palette-5{--bg-0:#ffffff;--bg-1:#d3f7ff;--blob-1:#bb74ff;--blob-2:#7c7dff;--blob-3:#a0f8ff;--blob-4:#ffffff}.blobs{width:min(60vw,60vh);height:min(60vw,60vh);max-height:100%;max-width:100%}.blobs svg{position:relative;height:100%;z-index:2}.blobs .blob{-webkit-animation:rotate 25s infinite alternate ease-in-out;animation:rotate 25s infinite alternate ease-in-out;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;opacity:.7}.blobs .blob path{-webkit-animation:blob-anim-1 5s infinite alternate cubic-bezier(.45,.2,.55,.8);animation:blob-anim-1 5s infinite alternate cubic-bezier(.45,.2,.55,.8);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:scale(.8);transform:scale(.8);-webkit-transition:fill .8s ease;transition:fill .8s ease}.blobs .blob.alt{animation-direction:alternate-reverse;opacity:.3}.blobs .blob-1 path{fill:var(--blob-1);-webkit-filter:blur(1rem);filter:blur(1rem)}.blobs .blob-2{-webkit-animation-duration:18s;animation-duration:18s;animation-direction:alternate-reverse}.blobs .blob-2 path{fill:var(--blob-2);-webkit-animation-name:blob-anim-2;animation-name:blob-anim-2;-webkit-animation-duration:7s;animation-duration:7s;-webkit-filter:blur(.75rem);filter:blur(.75rem);-webkit-transform:scale(.78);transform:scale(.78)}.blobs .blob-2.alt{-webkit-animation-direction:alternate;animation-direction:alternate}.blobs .blob-3{-webkit-animation-duration:23s;animation-duration:23s}.blobs .blob-3 path{fill:var(--blob-3);-webkit-animation-name:blob-anim-3;animation-name:blob-anim-3;-webkit-animation-duration:6s;animation-duration:6s;-webkit-filter:blur(.5rem);filter:blur(.5rem);-webkit-transform:scale(.76);transform:scale(.76)}.blobs .blob-4{-webkit-animation-duration:31s;animation-duration:31s;animation-direction:alternate-reverse;opacity:.9}.blobs .blob-4 path{fill:var(--blob-4);-webkit-animation-name:blob-anim-4;animation-name:blob-anim-4;-webkit-animation-duration:10s;animation-duration:10s;-webkit-filter:blur(10rem);filter:blur(10rem);-webkit-transform:scale(.5);transform:scale(.5)}.blobs .blob-4.alt{-webkit-animation-direction:alternate;animation-direction:alternate;opacity:.8}html[dir=rtl] .app-logo{-webkit-transform:scaleX(-1);transform:scaleX(-1)}html[dir=rtl] .app-logo::before{-webkit-transform:scaleX(-1) translate(0,-50%);transform:scaleX(-1) translate(0,-50%)}html[dir=rtl] .app-logo{background-image:linear-gradient(270deg,rgba(var(--bs-info-rgb),.18),transparent)} html[dir=rtl] .app-logo .custom-logo{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.primary-nav{padding:.5rem 1.5rem;width:var(--menu-width)}.primary-nav .badge{--bs-badge-font-size:0.55rem;font-weight:600;margin-left:-.25rem;border-radius:3px;height:1rem;-ms-flex-item-align:center!important;align-self:center!important}.primary-nav .badge.badge-end{margin-left:auto!important;margin-right:1.5rem!important}.primary-nav .nav-title{text-transform:uppercase;margin:0;color:var(--app-nav-title-color);padding:1rem 0;margin-top:.5rem;font-size:.7rem;letter-spacing:1px;font-weight:600}.primary-nav .nav-title:first-of-type{margin-top:0}.primary-nav .nav-menu{display:-webkit-box;display:-ms-flexbox;display:flex;height:auto}.primary-nav ul{list-style:none;margin:0;padding:0;display:none;position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.125rem}.primary-nav ul ul::before{content:"";position:absolute;border-left:1px dashed var(--app-nav-border-color);display:block;top:0;bottom:0;left:.55rem;z-index:1}.primary-nav ul ul>li>ul::before{content:"";left:2.1rem}.primary-nav ul ul li a{line-height:1.5rem;padding-left:calc(1.9rem + 2px);border-radius:.625rem;font-size:.85rem;font-weight:400}.primary-nav ul ul li a:only-child:not(.nav-more-link):hover{background-color:var(--app-nav-item-hover-bg)}.primary-nav ul ul li.active>a{color:var(--app-nav-link-color)}.primary-nav ul ul li.active>a .badge{margin-left:.75rem}.primary-nav ul ul li.active:not(.open):not(.has-ul) a:only-child{color:var(--app-nav-link-active-color);background-color:var(--app-nav-item-active-bg)}.primary-nav ul ul li.active:not(.open):not(.has-ul)::before{content:"";border-radius:100%;width:.4375rem;height:.4375rem;background:var(--app-nav-item-active-indicator);position:absolute;left:.375rem;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);z-index:1}.primary-nav ul ul ul::before{left:1rem}.primary-nav ul li{position:relative}.primary-nav ul li.active:not(.open).has-ul>a .nav-link-text{position:relative}.primary-nav ul li.active:not(.open).has-ul>a .nav-link-text::before{content:"";width:5px;height:5px;background:var(--danger-500);position:absolute;border-radius:100%;right:-1rem;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.primary-nav ul li.active>a:only-child .nav-link-text{position:relative}.primary-nav ul li.active>a:only-child .nav-link-text::before{content:"";width:5px;height:5px;background:var(--app-nav-active-indicator,var(--danger-500));position:absolute;border-radius:100%;right:-1rem;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.primary-nav ul li.active:not(.open):not(.has-ul) a:only-child{color:var(--app-nav-link-active-color)}.primary-nav ul li:last-child{border-bottom:none}.primary-nav ul li a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.75rem;padding:.5rem 0;line-height:2;color:var(--app-nav-link-color);font-size:.9375rem;position:relative;text-decoration:none;width:100%;font-weight:var(--app-nav-parent-fw,600)}.primary-nav ul li a .sa-icon{width:var(--app-nav-svgicon-size);height:var(--app-nav-svgicon-size)}.primary-nav ul li a:hover{color:var(--app-nav-link-hover-color)}.primary-nav ul li a:hover .sa-icon{fill:var(--app-nav-item-hover-bg);stroke:var(--app-nav-link-hover-color)}.primary-nav ul li a>i{font-size:1rem;width:1.5rem}.primary-nav ul li a>i::after{color:rgba(var(--info),.9)}.primary-nav ul li a>i::before{color:rgba(var(--primary),.9)}.primary-nav ul.nav-menu ul.active{display:-webkit-box;display:-ms-flexbox;display:flex}.primary-nav ul>li>ul{padding-left:0;gap:.25rem}.primary-nav ul>li>ul ul{padding-left:1.55rem}.primary-nav ul>li>ul ul li a{padding-left:1.4rem;border-radius:.625rem;-webkit-transition:none;transition:none;line-height:1.5rem;font-weight:400}.primary-nav ul>li>ul ul li a:not(.nav-more-link):hover{background-color:var(--app-nav-item-hover-bg)}.primary-nav ul>li>ul ul li.active:not(.open)>a{background-color:var(--app-nav-item-active-bg);color:var(--app-nav-link-active-color)}.collapse-sign{position:absolute;right:.3125rem;font-family:monospace;color:var(--app-nav-collapse-sign-color);font-size:1rem;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);font-weight:400}.collapse-sign::before{-ms-flex-negative:0;flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);-webkit-transition:var(--bs-accordion-btn-icon-transition);transition:var(--bs-accordion-btn-icon-transition)}.nav-hidden{display:none!important}.nav-hidden-container{-webkit-transition:height .2s ease-in-out;transition:height .2s ease-in-out;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.25rem}.nav-show-more{padding:2px 0}.nav-show-more .nav-more-link{color:rgba(var(--bs-body-color-rgb),.85);font-size:.9em;text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;width:100%;font-weight:400;opacity:.6}.nav-show-more .nav-more-link>a:hover{background-color:none!important}.nav-show-more .nav-more-link:hover{color:var(--app-nav-link-hover-color)!important;opacity:.9}.nav-show-more .nav-more-link.showing-more{color:var(--bs-body-color);opacity:.7}.nav-show-more .nav-more-link.showing-more:hover{opacity:.9}.nav-show-more .nav-more-link .collapse-sign{right:.3125rem}.nav-footer{padding-left:calc(1.5rem + 2px);padding-right:calc(1.5rem + 2px)}.set-nav-fixed:where(.set-nav-full,.set-header-fixed) .primary-nav::after,.set-nav-fixed:where(.set-nav-full,.set-header-fixed) .primary-nav::before{content:"";position:absolute;left:0;right:0;height:4px;background:var(--primary-500);z-index:10}.set-nav-fixed:where(.set-nav-full,.set-header-fixed) .primary-nav::before{top:0;background:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,0)),to(rgba(0,0,0,.03)));background:linear-gradient(0deg,rgba(0,0,0,0) 0,rgba(0,0,0,.03) 100%)}.set-nav-fixed:where(.set-nav-full,.set-header-fixed) .primary-nav::after{bottom:0;background:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.03)),to(rgba(0,0,0,0)));background:linear-gradient(0deg,rgba(0,0,0,.03) 0,rgba(0,0,0,0) 100%)}.set-nav-fixed:where(.set-nav-full,.set-header-fixed) .nav-footer{border-top:0}.info-card{position:relative;width:100%;height:9.53rem;color:#fff;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 2rem;-webkit-transition:all .7s cubic-bezier(.34,1.25,.3,1);transition:all .7s cubic-bezier(.34,1.25,.3,1)}.info-card img.cover{opacity:.5;top:0;left:0;bottom:0;right:0;position:absolute;height:auto}.info-card .profile-image{width:3.125rem;height:auto;display:inline-block;z-index:2;position:relative}.info-card .info-card-text{margin-left:1rem;color:inherit;text-shadow:#000 0 1px;z-index:1;position:relative;line-height:normal}.info-card .info-card-text>span{font-weight:300}@media (min-width:1399px){.info-card:hover{-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;will-change:opacity}.info-card:hover img.cover{opacity:.7;-webkit-backface-visibility:hidden;backface-visibility:hidden}}.info-card-text{font-size:.875rem;display:inline-block;vertical-align:middle;font-weight:500;line-height:1.35}.info-card-text>span{font-size:.875rem;display:block;font-weight:300}.primary-nav .js-filter-hide{display:none!important}.primary-nav .js-filter-show{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;padding-bottom:0}.primary-nav .js-list-active ul{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.primary-nav .js-list-active ul .nav-hidden-container{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;height:unset!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.primary-nav .js-list-active ul .nav-show-more{display:none!important}.primary-nav .js-list-active ul ul{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;height:unset!important}.primary-nav .js-list-active .collapse-sign{display:none}.primary-nav .js-list-active .nav-title{color:var(--bs-link-color);font-weight:600}.nav-filter-msg{position:absolute;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%);right:2rem;color:var(--bs-white)!important}.nav-filter-msg:hover{background:var(--bs-danger)!important}.nav-filter-msg:hover i{width:.84375rem}#searchInput{border-style:dashed;font-size:.875rem;line-height:1.5rem;position:relative;-webkit-box-shadow:inset 0 2px 5px rgba(0,0,0,.07);box-shadow:inset 0 2px 5px rgba(0,0,0,.07);--bs-secondary-color:var(--input-placeholder-color)}#searchInput:focus{background-color:rgba(var(--bs-primary-rgb),.03)}#js-nav-menu:has(li:not(.js-filter-hide))+.no-results-msg{display:none}.set-nav-dark:not([data-bs-theme=dark]){--app-nav-bg:var(--primary-900);--app-nav-active-indicator:var(--warning-500);--app-nav-collapse-sign-color:rgba(255, 255, 255, 0.5);--app-nav-item-active-indicator:rgba(255, 255, 255, 0.5);--app-nav-background:var(--app-nav-bg);--app-content-background:rgba(var(--bs-primary-rgb), 0.04);--app-nav-parent-fw:500}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar{--app-nav-item-hover-bg:rgba(245, 245, 245, 0.045);--app-nav-item-active-bg:rgba(255, 255, 255, 0.09);--app-nav-link-active-color:rgba(255, 255, 255, 1);--app-nav-border-color:rgba(255, 255, 255, 0.2)}.set-nav-dark:not([data-bs-theme=dark]) .app-header .app-logo,.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .app-logo{--app-header-background:var(--app-nav-bg)}.set-nav-dark:not([data-bs-theme=dark]) .app-header .app-logo .custom-logo,.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .app-logo .custom-logo{--logo-color:rgba(var(--white), 1);--logo-color-fill:none;color:#fff}.set-nav-dark:not([data-bs-theme=dark]) .app-header .app-logo .logo-backdrop,.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .app-logo .logo-backdrop{--bg-0:var(--app-nav-bg);--bg-1:var(--app-nav-bg);--blob-1:var(--info-500);--blob-2:#f882e6;--blob-3:var(--app-nav-bg);--blob-4:var(--app-nav-bg);opacity:.7}.set-nav-dark:not([data-bs-theme=dark]) .app-header .app-logo::before,.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .app-logo::before{background:#2b3362;color:#fff}.set-nav-dark:not([data-bs-theme=dark]) .app-header .app-logo{background-image:-webkit-gradient(linear,right top,left top,from(rgba(var(--bs-info-rgb),.18)),to(transparent));background-image:linear-gradient(270deg,rgba(var(--bs-info-rgb),.18),transparent);background-color:var(--app-nav-bg);background-repeat:repeat-y;background-size:auto;background-position:left top}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar{background-image:-webkit-gradient(linear,right top,left top,from(rgba(var(--bs-info-rgb),.18)),to(transparent));background-image:linear-gradient(270deg,rgba(var(--bs-info-rgb),.18),transparent);background-color:var(--app-nav-bg);background-repeat:repeat-y;background-size:auto;background-position:left top}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar #searchInput{background-color:rgba(255,255,255,.05);color:rgba(255,255,255,.9);border-color:rgba(255,255,255,.3);--bs-secondary-color:rgb(255 255 255 / 40%)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar #searchInput:focus{background-color:rgba(255,255,255,.08);border-color:rgba(255,255,255,.5);outline:4px solid rgba(255,255,255,.1)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .info-container{--bs-info-border-color:rgba(255, 255, 255, 0.3);--bs-info-bg:rgba(255, 255, 255, 0.05);--bs-info-color:rgba(255, 255, 255, 0.9)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav .nav-title{color:rgba(255,255,255,.6)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav ul li a{color:rgba(255,255,255,.6)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav ul li a .sa-icon{fill:rgba(255,255,255,.2);stroke:rgba(255,255,255,.4);-ms-flex-negative:0;flex-shrink:0}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav ul li a:hover{color:rgba(255,255,255,.9)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav ul li a:hover .sa-icon{fill:rgba(255,255,255,.3);stroke:#e5e8fc}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav li.active.has-ul:not(.open)>a{color:rgba(255,255,255,.9)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav .nav-show-more .nav-more-link,.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav .nav-show-more .nav-more-link.showing-more{color:rgba(255,255,255,.65)}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav .nav-show-more .nav-more-link.showing-more:hover,.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .primary-nav .nav-show-more .nav-more-link:hover{color:rgba(255,255,255,.9)!important}.set-nav-dark:not([data-bs-theme=dark]) .app-sidebar .slimScrollBar{--scrollbar-color:rgba(255, 255, 255, 0.8);--scrollbar-hover-color:rgba(255, 255, 255, 1)}.js-filter-hide{display:none}.js-filter-show{display:block}.suggestions-container{font-size:.9rem;color:#666}.suggest-title{color:#999;margin-right:.5rem}.suggestion{color:rgba(var(--bs-link-color-rgb));cursor:pointer;border-radius:3px;-webkit-transition:background-color .2s;transition:background-color .2s}.suggestion:hover{background-color:rgba(33,150,243,.1);color:rgba(var(--bs-link-hover-color-rgb))}.did-you-mean{font-size:.9rem;color:#666;margin-top:.25rem}.did-you-mean a{color:#2196f3;text-decoration:none}.did-you-mean a:hover{text-decoration:underline}.bg-primary-50{background-color:var(--primary-50)!important;color:#212121!important}.bg-primary-100{background-color:var(--primary-100)!important;color:#212121!important}.bg-primary-150{background-color:var(--primary-150)!important;color:#212121!important}.bg-primary-200{background-color:var(--primary-200)!important;color:#212121!important}.bg-primary-250{background-color:var(--primary-250)!important;color:#212121!important}.bg-primary-300{background-color:var(--primary-300)!important;color:#212121!important}.bg-primary-350{background-color:var(--primary-350)!important;color:#212121!important}.bg-primary-400{background-color:var(--primary-400)!important;color:#fff!important}.bg-primary-450{background-color:var(--primary-450)!important;color:#fff!important}.bg-primary-500{background-color:var(--primary-500)!important;color:#fff!important}.bg-primary-550{background-color:var(--primary-550)!important;color:#fff!important}.bg-primary-600{background-color:var(--primary-600)!important;color:#fff!important}.bg-primary-650{background-color:var(--primary-650)!important;color:#fff!important}.bg-primary-700{background-color:var(--primary-700)!important;color:#fff!important}.bg-primary-750{background-color:var(--primary-750)!important;color:#fff!important}.bg-primary-800{background-color:var(--primary-800)!important;color:#fff!important}.bg-primary-850{background-color:var(--primary-850)!important;color:#fff!important}.bg-primary-900{background-color:var(--primary-900)!important;color:#fff!important}.bg-success-50{background-color:var(--success-50)!important;color:#212121!important}.bg-success-100{background-color:var(--success-100)!important;color:#212121!important}.bg-success-150{background-color:var(--success-150)!important;color:#212121!important}.bg-success-200{background-color:var(--success-200)!important;color:#212121!important}.bg-success-250{background-color:var(--success-250)!important;color:#212121!important}.bg-success-300{background-color:var(--success-300)!important;color:#212121!important}.bg-success-350{background-color:var(--success-350)!important;color:#212121!important}.bg-success-400{background-color:var(--success-400)!important;color:#212121!important}.bg-success-450{background-color:var(--success-450)!important;color:#212121!important}.bg-success-500{background-color:var(--success-500)!important;color:#fff!important}.bg-success-550{background-color:var(--success-550)!important;color:#fff!important}.bg-success-600{background-color:var(--success-600)!important;color:#fff!important}.bg-success-650{background-color:var(--success-650)!important;color:#fff!important}.bg-success-700{background-color:var(--success-700)!important;color:#fff!important}.bg-success-750{background-color:var(--success-750)!important;color:#fff!important}.bg-success-800{background-color:var(--success-800)!important;color:#fff!important}.bg-success-850{background-color:var(--success-850)!important;color:#fff!important}.bg-success-900{background-color:var(--success-900)!important;color:#fff!important}.bg-info-50{background-color:var(--info-50)!important;color:#212121!important}.bg-info-100{background-color:var(--info-100)!important;color:#212121!important}.bg-info-150{background-color:var(--info-150)!important;color:#212121!important}.bg-info-200{background-color:var(--info-200)!important;color:#212121!important}.bg-info-250{background-color:var(--info-250)!important;color:#212121!important}.bg-info-300{background-color:var(--info-300)!important;color:#212121!important}.bg-info-350{background-color:var(--info-350)!important;color:#212121!important}.bg-info-400{background-color:var(--info-400)!important;color:#fff!important}.bg-info-450{background-color:var(--info-450)!important;color:#fff!important}.bg-info-500{background-color:var(--info-500)!important;color:#fff!important}.bg-info-550{background-color:var(--info-550)!important;color:#fff!important}.bg-info-600{background-color:var(--info-600)!important;color:#fff!important}.bg-info-650{background-color:var(--info-650)!important;color:#fff!important}.bg-info-700{background-color:var(--info-700)!important;color:#fff!important}.bg-info-750{background-color:var(--info-750)!important;color:#fff!important}.bg-info-800{background-color:var(--info-800)!important;color:#fff!important}.bg-info-850{background-color:var(--info-850)!important;color:#fff!important}.bg-info-900{background-color:var(--info-900)!important;color:#fff!important}.bg-warning-50{background-color:var(--warning-50)!important;color:#212121!important}.bg-warning-100{background-color:var(--warning-100)!important;color:#212121!important}.bg-warning-150{background-color:var(--warning-150)!important;color:#212121!important}.bg-warning-200{background-color:var(--warning-200)!important;color:#212121!important}.bg-warning-250{background-color:var(--warning-250)!important;color:#212121!important}.bg-warning-300{background-color:var(--warning-300)!important;color:#212121!important}.bg-warning-350{background-color:var(--warning-350)!important;color:#212121!important}.bg-warning-400{background-color:var(--warning-400)!important;color:#212121!important}.bg-warning-450{background-color:var(--warning-450)!important;color:#212121!important}.bg-warning-500{background-color:var(--warning-500)!important;color:#212121!important}.bg-warning-550{background-color:var(--warning-550)!important;color:#fff!important}.bg-warning-600{background-color:var(--warning-600)!important;color:#fff!important}.bg-warning-650{background-color:var(--warning-650)!important;color:#fff!important}.bg-warning-700{background-color:var(--warning-700)!important;color:#fff!important}.bg-warning-750{background-color:var(--warning-750)!important;color:#fff!important}.bg-warning-800{background-color:var(--warning-800)!important;color:#fff!important}.bg-warning-850{background-color:var(--warning-850)!important;color:#fff!important}.bg-warning-900{background-color:var(--warning-900)!important;color:#fff!important}.bg-danger-50{background-color:var(--danger-50)!important;color:#212121!important}.bg-danger-100{background-color:var(--danger-100)!important;color:#212121!important}.bg-danger-150{background-color:var(--danger-150)!important;color:#212121!important}.bg-danger-200{background-color:var(--danger-200)!important;color:#212121!important}.bg-danger-250{background-color:var(--danger-250)!important;color:#212121!important}.bg-danger-300{background-color:var(--danger-300)!important;color:#212121!important}.bg-danger-350{background-color:var(--danger-350)!important;color:#212121!important}.bg-danger-400{background-color:var(--danger-400)!important;color:#fff!important}.bg-danger-450{background-color:var(--danger-450)!important;color:#fff!important}.bg-danger-500{background-color:var(--danger-500)!important;color:#fff!important}.bg-danger-550{background-color:var(--danger-550)!important;color:#fff!important}.bg-danger-600{background-color:var(--danger-600)!important;color:#fff!important}.bg-danger-650{background-color:var(--danger-650)!important;color:#fff!important}.bg-danger-700{background-color:var(--danger-700)!important;color:#fff!important}.bg-danger-750{background-color:var(--danger-750)!important;color:#fff!important}.bg-danger-800{background-color:var(--danger-800)!important;color:#fff!important}.bg-danger-850{background-color:var(--danger-850)!important;color:#fff!important}.bg-danger-900{background-color:var(--danger-900)!important;color:#fff!important}.bg-fusion-50{background-color:var(--fusion-50)!important;color:#212121!important}.bg-fusion-100{background-color:var(--fusion-100)!important;color:#212121!important}.bg-fusion-150{background-color:var(--fusion-150)!important;color:#212121!important}.bg-fusion-200{background-color:var(--fusion-200)!important;color:#212121!important}.bg-fusion-250{background-color:var(--fusion-250)!important;color:#212121!important}.bg-fusion-300{background-color:var(--fusion-300)!important;color:#fff!important}.bg-fusion-350{background-color:var(--fusion-350)!important;color:#fff!important}.bg-fusion-400{background-color:var(--fusion-400)!important;color:#fff!important}.bg-fusion-450{background-color:var(--fusion-450)!important;color:#fff!important}.bg-fusion-500{background-color:var(--fusion-500)!important;color:#fff!important}.bg-fusion-550{background-color:var(--fusion-550)!important;color:#fff!important}.bg-fusion-600{background-color:var(--fusion-600)!important;color:#fff!important}.bg-fusion-650{background-color:var(--fusion-650)!important;color:#fff!important}.bg-fusion-700{background-color:var(--fusion-700)!important;color:#fff!important}.bg-fusion-750{background-color:var(--fusion-750)!important;color:#fff!important}.bg-fusion-800{background-color:var(--fusion-800)!important;color:#fff!important}.bg-fusion-850{background-color:var(--fusion-850)!important;color:#fff!important}.bg-fusion-900{background-color:var(--fusion-900)!important;color:#fff!important}.bg-dark-50{background-color:var(--dark-50)!important;color:#212121!important}.bg-dark-100{background-color:var(--dark-100)!important;color:#212121!important}.bg-dark-150{background-color:var(--dark-150)!important;color:#fff!important}.bg-dark-200{background-color:var(--dark-200)!important;color:#fff!important}.bg-dark-250{background-color:var(--dark-250)!important;color:#fff!important}.bg-dark-300{background-color:var(--dark-300)!important;color:#fff!important}.bg-dark-350{background-color:var(--dark-350)!important;color:#fff!important}.bg-dark-400{background-color:var(--dark-400)!important;color:#fff!important}.bg-dark-450{background-color:var(--dark-450)!important;color:#fff!important}.bg-dark-500{background-color:var(--dark-500)!important;color:#fff!important}.bg-dark-550{background-color:var(--dark-550)!important;color:#fff!important}.bg-dark-600{background-color:var(--dark-600)!important;color:#fff!important}.bg-dark-650{background-color:var(--dark-650)!important;color:#fff!important}.bg-dark-700{background-color:var(--dark-700)!important;color:#fff!important}.bg-dark-750{background-color:var(--dark-750)!important;color:#fff!important}.bg-dark-800{background-color:var(--dark-800)!important;color:#fff!important}.bg-dark-850{background-color:var(--dark-850)!important;color:#fff!important}.bg-dark-900{background-color:var(--dark-900)!important;color:#fff!important}.bg-light-50{background-color:var(--light-50)!important;color:#212121!important}.bg-light-100{background-color:var(--light-100)!important;color:#212121!important}.bg-light-150{background-color:var(--light-150)!important;color:#212121!important}.bg-light-200{background-color:var(--light-200)!important;color:#212121!important}.bg-light-250{background-color:var(--light-250)!important;color:#212121!important}.bg-light-300{background-color:var(--light-300)!important;color:#212121!important}.bg-light-350{background-color:var(--light-350)!important;color:#212121!important}.bg-light-400{background-color:var(--light-400)!important;color:#212121!important}.bg-light-450{background-color:var(--light-450)!important;color:#212121!important}.bg-light-500{background-color:var(--light-500)!important;color:#212121!important}.bg-light-550{background-color:var(--light-550)!important;color:#212121!important}.bg-light-600{background-color:var(--light-600)!important;color:#212121!important}.bg-light-650{background-color:var(--light-650)!important;color:#fff!important}.bg-light-700{background-color:var(--light-700)!important;color:#fff!important}.bg-light-750{background-color:var(--light-750)!important;color:#fff!important}.bg-light-800{background-color:var(--light-800)!important;color:#fff!important}.bg-light-850{background-color:var(--light-850)!important;color:#fff!important}.bg-light-900{background-color:var(--light-900)!important;color:#fff!important}.bg-secondary-50{background-color:var(--secondary-50)!important;color:#212121!important}.bg-secondary-100{background-color:var(--secondary-100)!important;color:#212121!important}.bg-secondary-150{background-color:var(--secondary-150)!important;color:#212121!important}.bg-secondary-200{background-color:var(--secondary-200)!important;color:#212121!important}.bg-secondary-250{background-color:var(--secondary-250)!important;color:#212121!important}.bg-secondary-300{background-color:var(--secondary-300)!important;color:#212121!important}.bg-secondary-350{background-color:var(--secondary-350)!important;color:#fff!important}.bg-secondary-400{background-color:var(--secondary-400)!important;color:#fff!important}.bg-secondary-450{background-color:var(--secondary-450)!important;color:#fff!important}.bg-secondary-500{background-color:var(--secondary-500)!important;color:#fff!important}.bg-secondary-550{background-color:var(--secondary-550)!important;color:#fff!important}.bg-secondary-600{background-color:var(--secondary-600)!important;color:#fff!important}.bg-secondary-650{background-color:var(--secondary-650)!important;color:#fff!important}.bg-secondary-700{background-color:var(--secondary-700)!important;color:#fff!important}.bg-secondary-750{background-color:var(--secondary-750)!important;color:#fff!important}.bg-secondary-800{background-color:var(--secondary-800)!important;color:#fff!important}.bg-secondary-850{background-color:var(--secondary-850)!important;color:#fff!important}.bg-secondary-900{background-color:var(--secondary-900)!important;color:#fff!important}.bg-placeholder{--body-bg:var(--success-500);--gp-color-1:var(--primary-900);background-color:var(--body-bg);background-image:radial-gradient(ellipse at bottom,var(--body-bg) 5%,transparent 60%),linear-gradient(136deg,transparent,var(--gp-color-1) 290%),linear-gradient(115deg,var(--gp-color-1),transparent 40%),linear-gradient(180deg,transparent 0,var(--body-bg) 70%),radial-gradient(ellipse at -70% -180%,transparent 80%,var(--gp-color-1) 0),radial-gradient(ellipse at bottom,var(--body-bg) 40%,transparent 80%),radial-gradient(ellipse at 5% 340%,transparent 80%,var(--gp-color-1) 0);background-repeat:no-repeat}.bg-subtlelight-fade{background-color:var(--bs-body-bg);background-image:-webkit-gradient(linear,left bottom,left top,from(var(--bs-body-bg)),to(rgba(var(--bs-primary-rgb),.04)));background-image:linear-gradient(to top,var(--bs-body-bg),rgba(var(--bs-primary-rgb),.04))}.body-bg{background-color:var(--bs-body-bg)}.content-wrapper:has(>.layout-trimmed){padding:0!important}.content-wrapper:has(>.layout-trimmed)>:not(.main-content){display:none!important}.show-child-on-hover .show-on-hover-parent{display:none}.show-child-on-hover:hover .show-on-hover-parent{display:block}.hide-child-on-hover .hide-on-hover-parent{display:block}.hide-child-on-hover:hover .hide-on-hover-parent{display:none}.translucent-dark,.translucent-light{background:rgba(0,0,0,.25);-webkit-box-shadow:0 8px 32px 0 rgba(31,38,135,.37);box-shadow:0 8px 32px 0 rgba(31,38,135,.37);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:.625rem;border:1px solid rgba(0,0,0,.18)}.translucent-light{background:rgba(255,255,255,.25);-webkit-box-shadow:0 8px 32px 0 rgba(31,38,135,.37);box-shadow:0 8px 32px 0 rgba(31,38,135,.37);border:1px solid rgba(255,255,255,.18)}.fw-500,.fw-bold,b,strong{font-weight:500!important}.fw-300,.fw-light{font-weight:300!important}.fw-600{font-weight:600!important}.fw-700{font-weight:700!important}code{--code-background:var(--bs-body-bg);background:var(--code-background);padding:.125rem .25rem;border-radius:.125rem}.h2-title{font-size:1.75rem;font-weight:500;text-shadow:var(--bs-emphasis-color) 0 1px;margin:3.5rem 0 0 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.3125rem}.h2-title:not(:has(*)){margin-bottom:2.3rem}.h3-title{font-size:1.125rem;font-weight:700;margin:2rem 0 0 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.3125rem}.h3-title:not(:has(*)){margin-bottom:.7rem}.hover-effect-dot{position:relative}.hover-effect-dot:before{content:"";background:rgba(0,0,0,.2);width:0%;height:0%;display:block;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:100%;-webkit-transition:all .1s ease-in;transition:all .1s ease-in}.hover-effect-dot:hover:before{width:75%;height:75%}.h-auto{height:auto!important}.w-auto{width:auto!important}.min-height-reset{min-height:initial!important}.max-width-reset{max-width:none!important}.max-height-reset{max-height:none!important}.min-width-0{min-width:0}.width-0{width:0}.width-1{width:1.5rem}.width-2{width:2rem}.width-3{width:2.5rem}.width-4{width:2.75rem}.width-5{width:3rem}.width-6{width:3.25rem}.width-7{width:3.5rem}.width-8{width:3.75rem}.width-9{width:4rem}.width-10{width:4.25rem}.width-xs{min-width:5rem}.width-max-xs{max-width:5rem}.width-sm{min-width:10rem}.width-max-sm{max-width:10rem}.width-lg{min-width:15rem}.width-max-lg{max-width:15rem}.width-xl{min-width:20rem}.width-max-xl{max-width:20rem}.width-max-100{max-width:100%}.height-0{height:0}.height-1{height:1.5rem}.height-2{height:2rem}.height-3{height:2.5rem}.height-4{height:2.75rem}.height-5{height:3rem}.height-6{height:3.25rem}.height-7{height:3.5rem}.height-8{height:3.75rem}.height-9{height:4rem}.height-10{height:4.25rem}.height-xs{min-height:5rem}.height-sm{min-height:10rem}.height-lg{min-height:15rem}.height-xl{min-height:20rem}.l-h-n{line-height:normal}.if-empty-display-none:empty{display:none!important}[data-hasmore]{position:relative;color:#fff}[data-hasmore]:before{content:attr(data-hasmore);border-radius:inherit;background:rgba(0,0,0,.4);height:inherit;width:100%;position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-weight:500;font-size:inherit}.time-stamp{font-size:.78125rem;margin:.25rem 0 0 0;color:#767676;font-weight:300}.border-faded{border:1px solid rgba(var(--bs-body-color-rgb),var(--row-grid-opacity,.07))}.border-transparent{border:1px solid transparent!important}.border-top-left-radius-0{border-top-left-radius:0!important}.border-bottom-left-radius-0{border-bottom-left-radius:0!important}.border-top-right-radius-0{border-top-right-radius:0!important}.border-bottom-right-radius-0{border-bottom-right-radius:0!important}.rounded-plus{border-radius:.625rem}.rounded-bottom{border-radius:0 0 .25rem .25rem}.rounded-top{border-radius:.25rem .25rem 0 0}a[target]:not(.btn){font-weight:500;-webkit-text-decoration-skip:ink;text-decoration:underline!important}.profile-image{width:3.125rem;height:3.125rem;max-width:3.125rem;max-height:3.125rem;-o-object-fit:cover;object-fit:cover}.profile-image-md{width:2rem;height:2rem;max-width:2rem;max-height:2rem;-o-object-fit:cover;object-fit:cover}.profile-image-sm{width:1.5625rem;height:1.5625rem;max-width:1.5625rem;max-height:1.5625rem;-o-object-fit:cover;object-fit:cover}.text-inverse{color:#000}.bg-inverse{background-color:#000}[data-bs-theme=dark] .text-inverse{color:#fff}[data-bs-theme=dark] .bg-inverse{background-color:#fff}.status{position:relative}.status:before{content:" ";position:absolute;width:15px;height:15px;display:block;top:-2px;right:-2px;background:#505050;border-radius:50%;border:2px solid var(--bs-body-bg)}.status.status-sm:before{width:10px;height:10px;border-width:1px;top:0;right:0}.status.status-xs:before{width:8px;height:8px;border-width:1px;top:0;right:0}.status.status-success:before{background:var(--success-500)}.status.status-danger:before{background:var(--danger-500)}.status.status-warning:before{background:var(--warning-500)}.bg-trans-gradient{background:linear-gradient(250deg,#886ab5,#2196f3)}.bg-primary-gradient{background-image:linear-gradient(250deg,rgba(var(--bs-primary-rgb),.5),transparent)}.bg-danger-gradient{background-image:linear-gradient(250deg,rgba(206,2,98,.7),transparent)}.bg-info-gradient{background-image:linear-gradient(250deg,rgba(9,96,165,.7),transparent)}.bg-warning-gradient{background-image:linear-gradient(250deg,rgba(218,148,0,.7),transparent)}.bg-success-gradient{background-image:linear-gradient(250deg,rgba(16,112,102,.7),transparent)}.bg-fusion-gradient{background-image:linear-gradient(250deg,rgba(29,29,29,.7),transparent)}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-double{border-style:double!important}.border-groove{border-style:groove!important}.border-ridge{border-style:ridge!important}.border-inset{border-style:inset!important}.border-outset{border-style:outset!important}.cursor-auto{cursor:auto!important}.cursor-crosshair{cursor:crosshair!important}.cursor-default{cursor:default!important}.cursor-e-resize{cursor:e-resize!important}.cursor-help{cursor:help!important}.cursor-move{cursor:move!important}.cursor-n-resize{cursor:n-resize!important}.cursor-ne-resize{cursor:ne-resize!important}.cursor-nw-resize{cursor:nw-resize!important}.cursor-pointer{cursor:pointer!important}.cursor-progress{cursor:progress!important}.cursor-s-resize{cursor:s-resize!important}.cursor-se-resize{cursor:se-resize!important}.cursor-sw-resize{cursor:sw-resize!important}.cursor-text{cursor:text!important}.cursor-w-resize{cursor:w-resize!important}.cursor-wait{cursor:wait!important}.cursor-inherit{cursor:inherit!important}.row-grid{overflow:hidden}.row-grid>.col,.row-grid>[class$=" col"],.row-grid>[class*=" col "],.row-grid>[class*=" col-"],.row-grid>[class=col],.row-grid>[class^="col "],.row-grid>[class^=col-]{position:relative}.row-grid>.col:after,.row-grid>[class$=" col"]:after,.row-grid>[class*=" col "]:after,.row-grid>[class*=" col-"]:after,.row-grid>[class=col]:after,.row-grid>[class^="col "]:after,.row-grid>[class^=col-]:after{--row-grid:var(--row-grid-line-rgb, var(--bs-body-color-rgb));content:"";position:absolute;top:0;bottom:0;left:-1px;display:block;width:0;border-left:1px solid rgba(var(--row-grid),var(--row-grid-opacity,.07))}.row-grid>.col:before,.row-grid>[class$=" col"]:before,.row-grid>[class*=" col "]:before,.row-grid>[class*=" col-"]:before,.row-grid>[class=col]:before,.row-grid>[class^="col "]:before,.row-grid>[class^=col-]:before{--row-grid:var(--row-grid-line-rgb, var(--bs-body-color-rgb));content:"";position:absolute;right:0;bottom:-1px;left:0;display:block;height:0;border-top:1px solid rgba(var(--row-grid),var(--row-grid-opacity,.07))}.text-gradient{background:-webkit-gradient(linear,left top,left bottom,color-stop(10%,var(--info-50)),color-stop(35%,var(--info-300)),color-stop(60%,var(--primary-500)),to(var(--primary-600)));background:linear-gradient(180deg,var(--info-50) 10%,var(--info-300) 35%,var(--primary-500) 60%,var(--primary-600) 100%);color:var(--info-500);background-clip:text;text-fill-color:transparent;-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:none}.text-truncate-header{max-width:6.0625rem}.text-truncate-xs{max-width:4.5625rem}.text-truncate-sm{max-width:117px}.text-truncate-md{max-width:160px}.text-truncate-default{max-width:180px}.text-truncate-lg{max-width:200px}.p-g{padding:1.5rem}.m-g{margin:1.5rem}.mb-g{margin-bottom:1.5rem!important}.mb-gb{margin-bottom:3rem}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:300;display:block;font-size:.9375rem;line-height:1.5;margin:2px 0 1.5rem}.h2 .small,.h2 small,.h3 .small,.h3 small,h2 .small,h2 small,h3 .small,h3 small{font-size:.9375rem}.h4 .small,.h4 small,h4 .small,h4 small{font-size:.875rem}.h5 .small,.h5 small,.h6 .small,.h6 small,h5 .small,h5 small,h6 .small,h6 small{font-size:.8125rem}.bg-faded{background-color:rgba(var(--bs-emphasis-color-rgb),.025)}.fs-nano{font-size:.6875rem!important}.fs-xs{font-size:.75rem!important}.fs-sm{font-size:.78125rem!important}.fs-b{font-size:.8125rem!important}.fs-md{font-size:.875rem!important}.fs-lg{font-size:.9375rem!important}.fs-xl{font-size:1rem!important}.fs-xxl{font-size:1.75rem!important}.opacity-5{opacity:.05}.opacity-10{opacity:.1}.opacity-15{opacity:.15}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}[aria-expanded=false]~.collapsed-reveal{display:none}[aria-expanded=false] .collapsed-reveal{display:none}[aria-expanded=false]~.collapsed-hidden{display:block}[aria-expanded=false] .collapsed-hidden{display:block}[aria-expanded=true]~.collapsed-reveal{display:block}[aria-expanded=true] .collapsed-reveal{display:block}[aria-expanded=true]~.collapsed-hidden{display:none}[aria-expanded=true] .collapsed-hidden{display:none}.pos-top{top:0}.pos-left{left:0}.pos-right{right:0}.pos-bottom{bottom:0}hr{border:none;border-bottom:1px dashed rgba(0,0,0,.3)}.disabled:not(.btn),.disabled:not(.btn)>*{-webkit-filter:grayscale(80%);filter:grayscale(80%);opacity:.8;cursor:not-allowed}.hover-bg{background:var(--bs-body-bg);-webkit-transition:all .1s ease-in;transition:all .1s ease-in;color:inherit}.hover-bg:hover{background:inherit;color:inherit}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.shadow-0{-webkit-box-shadow:none!important;box-shadow:none!important}.shadow-1,.shadow-hover-1:hover{-webkit-box-shadow:0 2px 3px rgba(0,0,0,.02),0 1px 2px rgba(0,0,0,.1);box-shadow:0 2px 3px rgba(0,0,0,.02),0 1px 2px rgba(0,0,0,.1)}.shadow-2,.shadow-hover-2:hover{-webkit-box-shadow:0 .1rem .15rem rgba(0,0,0,.1);box-shadow:0 .1rem .15rem rgba(0,0,0,.1)}.shadow-3,.shadow-hover-3:hover{-webkit-box-shadow:0 .1rem .15rem rgba(0,0,0,.125);box-shadow:0 .1rem .15rem rgba(0,0,0,.125)}.shadow-4,.shadow-hover-4:hover{-webkit-box-shadow:0 .1rem .25rem rgba(0,0,0,.125);box-shadow:0 .1rem .25rem rgba(0,0,0,.125)}.shadow-5,.shadow-hover-5:hover{-webkit-box-shadow:0 .125rem .325rem rgba(0,0,0,.175);box-shadow:0 .125rem .325rem rgba(0,0,0,.175)}.shadow-hover-inset-1:hover,.shadow-inset-1{-webkit-box-shadow:inset 0 .25rem .125rem 0 rgba(33,37,41,.025);box-shadow:inset 0 .25rem .125rem 0 rgba(33,37,41,.025)}.shadow-hover-inset-2:hover,.shadow-inset-2{-webkit-box-shadow:inset 0 .2rem .325rem rgba(0,0,0,.04);box-shadow:inset 0 .2rem .325rem rgba(0,0,0,.04)}.shadow-hover-inset-3:hover,.shadow-inset-3{-webkit-box-shadow:inset 0 .2rem .325rem rgba(0,0,0,.05);box-shadow:inset 0 .2rem .325rem rgba(0,0,0,.05)}.shadow-hover-inset-4:hover,.shadow-inset-4{-webkit-box-shadow:inset 0 .25rem .5rem rgba(0,0,0,.06);box-shadow:inset 0 .25rem .5rem rgba(0,0,0,.06)}.shadow-hover-inset-5:hover,.shadow-inset-5{-webkit-box-shadow:inset 0 .35rem .5rem rgba(0,0,0,.07);box-shadow:inset 0 .35rem .5rem rgba(0,0,0,.07)}.shadow-sm-hover:hover{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-hover:hover{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg-hover:hover{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.info-card-text{font-size:.875rem;display:inline-block;vertical-align:middle;font-weight:500;line-height:1.35}.info-card-text>span{font-size:.875rem;display:block;font-weight:300}.scrolling-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch}.alpha-1{opacity:.1}.alpha-2{opacity:.2}.alpha-3{opacity:.3}.alpha-4{opacity:.4}.alpha-5{opacity:.5}.alpha-6{opacity:.6}.alpha-7{opacity:.7}.alpha-8{opacity:.8}.alpha-9{opacity:.9}.alpha-10{opacity:1}.rotate-0{-webkit-transform:rotate(0);transform:rotate(0)}.rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.rotate-360{-webkit-transform:rotate(360deg);transform:rotate(360deg)}.kbd-key{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(-225deg,#d5dbe4,#f8f8f8);border:0;border-radius:3px;-webkit-box-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);box-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;-webkit-transition-duration:.1s;transition-duration:.1s;-webkit-transition-property:all;transition-property:all;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);height:18px;width:20px}.badge.badge-icon{position:absolute;display:inline-block;background-color:var(--danger-500);color:#fff;-webkit-box-shadow:0 0 0 1px var(--bs-body-bg);box-shadow:0 0 0 1px var(--bs-body-bg);cursor:default;border:1px solid transparent;font-size:.625rem;min-width:1.25rem;max-width:2rem;padding:0 .3125rem;border-radius:1.25rem;font-weight:600;line-height:1rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;vertical-align:middle;-webkit-transform:translate(10%,-10%);transform:translate(10%,-10%)}.nav-link{font-size:.875rem}.saving-indicator{position:fixed;top:6.5625rem;right:.9375rem;font-size:.75rem;width:1.5rem;height:1.5rem;color:inherit;opacity:0;-webkit-transition:all .3s ease-out;transition:all .3s ease-out;z-index:calc(var(--z-index-master) + 3)}.saving-indicator.show{opacity:1}.saving-indicator.success{color:var(--success-500)}.hide-page-scrollbar .saving-indicator{right:calc(var(--drawer-width) + 1.5rem)}.carousel-indicators{list-style:none}.slide-on-mobile{--sidepanel-width:15rem;--sidepanel-z-index:10;width:var(--sidepanel-width,15rem)}@media only screen and (max-width:991.98px){.slide-on-mobile{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:var(--sidepanel-z-index,10);position:absolute!important;top:0;bottom:0;background-color:var(--bs-body-bg,#f8f9fa);-webkit-transition:all 470ms cubic-bezier(.34,1.25,.3,1);transition:all 470ms cubic-bezier(.34,1.25,.3,1)}.slide-backdrop{background:0 0;-webkit-transition:background .3s;transition:background .3s}.slide-on-mobile-left{border-right:1px solid rgba(0,0,0,.09);left:calc(-1 * var(--sidepanel-width,15rem))}.slide-on-mobile-left-show{left:0}.slide-on-mobile-right{border-left:1px solid rgba(0,0,0,.09);right:calc(-1 * var(--sidepanel-width,15rem))}.slide-on-mobile-right-show{right:0}.slide-on-mobile-left-show+.slide-backdrop,.slide-on-mobile-right-show+.slide-backdrop{background:rgba(var(--bs-body-color-rgb),.09);position:absolute;z-index:9;left:0;right:0;bottom:0;top:0}}.app-content:has(>.content-wrapper-right){position:relative}.content-wrapper-right{background-color:var(--bs-body-bg)}@media only screen and (max-width:1440px){.content-wrapper-right{position:absolute;right:calc(-1 * var(--right-content-width));width:var(--right-content-width);height:100%;top:0;z-index:1000;display:none}.content-wrapper-right.show{display:block;right:0}}.form-control:focus{border-color:var(--primary-500)}.form-control:focus+.input-group-text{background-color:var(--primary-500);color:var(--bs-white);border-color:var(--primary-500)}.form-control:focus+.input-group-text .form-check-input:checked{background-color:var(--primary-700);border-color:var(--primary-900)}.form-control+.input-group-text{-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.input-group:focus-within .input-group-text{background-color:var(--primary-500);color:var(--bs-white)!important;border-color:var(--primary-500)}.input-group:focus-within .input-group-text .form-check-input:checked{background-color:var(--primary-700);border-color:var(--primary-900)}.input-group:focus-within .form-select{border-color:var(--primary-500)}.input-group:focus-within .input-group-text+.input-group-text{border-left:1px solid var(--primary-700)}.form-check-input{-webkit-transition:all .3s ease;transition:all .3s ease}.input-group-text{-webkit-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.input-group.input-group-multi-transition input[type=text]{-webkit-transition:width 470ms cubic-bezier(.34,1.25,.3,1);transition:width 470ms cubic-bezier(.34,1.25,.3,1)}.input-group.input-group-multi-transition input[type=text]:focus{width:50%}.input-group:has(>.form-control.is-invalid) .input-group-text,.was-validated .input-group.has-validation:has(>.form-control:invalid) .input-group-text,.was-validated .input-group:has(>.form-control:invalid) .input-group-text{background-color:var(--bs-form-invalid-color);border-color:var(--bs-form-invalid-border-color);color:#fff}.input-group:has(>.form-control.is-valid) .input-group-text,.was-validated .input-group.has-validation:has(>.form-control:valid) .input-group-text,.was-validated .input-group:has(>.form-control:valid) .input-group-text{background-color:var(--bs-form-valid-color);border-color:var(--bs-form-valid-border-color);color:#fff}.form-check-hitbox{position:relative}.form-check-hitbox .form-check-input{position:relative;z-index:2}.form-check-hitbox .form-check-input:focus+.form-check-label{background:rgba(var(--bs-body-color-rgb),.03)}.form-check-hitbox:hover:has(.form-check-input):hover .form-check-label{background:rgba(var(--bs-body-color-rgb),.05)}.form-check-hitbox .form-check-label{position:absolute;padding:1.53em;background:0 0;border-radius:100%;-webkit-transform:translate(-86%,-23%);transform:translate(-86%,-23%);z-index:1;-webkit-transition:background .3s ease;transition:background .3s ease}.form-check-hitbox .form-check-label:hover{background:rgba(var(--bs-body-color-rgb),.05)}.offer-card:hover{background-color:var(--bs-body-bg);border-color:var(--primary-500);cursor:pointer}.channel-card:hover{background-color:var(--bs-body-bg);cursor:pointer}.channel-card .form-check-input,.offer-card .form-check-input{display:none}.offer-card:has(.form-check-input:checked){border-color:var(--primary-500);background-color:rgba(var(--bs-primary-rgb),.1)}.channel-card:has(.form-check-input:checked){border-color:var(--primary-500);background-color:rgba(var(--bs-primary-rgb),.1)}.toast:not(:last-child){margin-bottom:.75rem}.list-spaced li{margin-top:7px;margin-bottom:7px}.list-spaced li:first-child{margin-top:0}.list-spaced li:last-child{margin-bottom:0}.list-spaced>li{padding:0 0 .2rem}.img-share{width:auto;height:2.8125rem}span.img-share{width:4.1259375rem;height:2.8125rem}.notes{padding:5px;background:#f9f4b5}.disclaimer{padding-left:.625rem;font-size:.5rem;color:#a2a2a2;letter-spacing:1px;text-transform:uppercase;font-style:italic}.nav-tabs-clean .nav-item .nav-link{border-radius:0;border:0;height:2.8125rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid transparent!important}.nav-tabs .nav-item .nav-link:not(:hover){color:inherit}.notification li>:first-child>span>span{display:block}.modal-content{-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.2);box-shadow:0 0 20px 0 rgba(0,0,0,.2)}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-alert{padding:0!important}.modal-alert .modal-dialog{max-width:100%!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 3.5rem);-webkit-transform:none!important;transform:none!important}.modal-alert .modal-content{background-color:rgba(0,0,0,.8);border-radius:0;padding:1.5rem 1rem 1rem}.modal-alert .modal-title{font-size:1.5rem;font-weight:300;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.modal-alert .modal-body,.modal-alert .modal-footer,.modal-alert .modal-header{width:100%;max-width:992px;margin:0 auto;padding:0;color:#fff;position:relative}.modal-alert .close{color:#fff;text-shadow:0 1px 0 #000}.modal-backdrop-transparent{background:0 0}.modal-dialog-bottom,.modal-dialog-top{position:absolute;top:0;margin:0;min-width:100%}.modal-dialog-bottom .modal-dialog,.modal-dialog-top .modal-dialog{width:100%;max-width:100%;margin:0}.modal-dialog-bottom .modal-content,.modal-dialog-top .modal-content{border-radius:0;border:0}.modal-dialog-bottom{top:auto;bottom:0}.modal.fade .modal-dialog-bottom{-webkit-transform:translate(0,25%);transform:translate(0,25%)}.modal-dialog-start{position:absolute;top:0;left:0;width:100%;height:100%;margin:0!important}.modal-dialog-start .modal-content{min-height:100%;border-width:0;border-radius:0}.modal.fade .modal-dialog-start{-webkit-transform:translate(-25%,0);transform:translate(-25%,0)}.modal-dialog-end{position:absolute;top:0;right:0;width:100%;height:100%;margin:0!important;border-width:0}.modal-dialog-end .modal-content{min-height:100%;border-width:0;border-radius:0}.modal.fade .modal-dialog-end{-webkit-transform:translate(25%,0);transform:translate(25%,0)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-md{max-width:21.875rem}.modal-backdrop{--bs-backdrop-opacity:0.4}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02)!important;transform:scale(1.02)!important}.app-breadcrumb .breadcrumb{padding:0;background:0 0;margin:0 0 1.5rem;position:relative;--bs-breadcrumb-item-active-color:rgba(var(--bs-body-color-rgb), 0.75);font-size:.875rem}.app-breadcrumb .breadcrumb .breadcrumb-item{max-width:10.625rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.app-breadcrumb .breadcrumb .breadcrumb-item:hover{max-width:12.5rem!important;cursor:default}.app-breadcrumb .breadcrumb-item+.breadcrumb-item::before{color:rgba(var(--bs-body-color-rgb),.3);text-shadow:none}.breadcrumb{margin:0;--bs-breadcrumb-divider-color:rgba(var(--bs-dark-rgb), 0.2)}.breadcrumb[class*=" bg-"] .breadcrumb-item+.breadcrumb-item::before,.breadcrumb[class^=bg-] .breadcrumb-item+.breadcrumb-item::before{color:currentColor;opacity:.7}.breadcrumb>li.breadcrumb-item{max-width:130px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block}.breadcrumb>li.breadcrumb-item:hover{max-width:200px!important;cursor:default}[data-breadcrumb-seperator]+[data-breadcrumb-seperator]::before{content:attr(data-breadcrumb-seperator);color:currentColor}.dropdown-menu{--bs-dropdown-link-active-bg:rgba(var(--primary), 0.9);--bs-dropdown-link-hover-bg:var(--app-nav-item-hover-bg);--bs-dropdown-link-hover-color:var(--primary-500);--bs-dropdown-divider-bg:var(--bs-border-color-translucent);min-width:10rem;padding:.3125rem 0;margin:.125rem 0 0;color:var(--bs-body-color);background-color:var(--bs-body-bg);background-clip:padding-box;border:0 solid var(--bs-border-color-translucent);-webkit-box-shadow:0 0 15px 1px rgba(var(--bs-dark-rgb),.15);box-shadow:0 0 15px 1px rgba(var(--bs-dark-rgb),.15)}.dropdown-item{display:block;width:100%;clear:both;font-weight:400;color:var(--bs-body-color);text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}.btn-system[data-bs-toggle=dropdown]+.dropdown-menu{position:absolute;top:var(--app-header-height)!important;right:2rem!important;left:auto!important;padding:0;margin:0}.dropdown-menu-animated{-webkit-transform:scale(.8)!important;transform:scale(.8)!important;-webkit-transition:all 270ms cubic-bezier(.34,1.25,.3,1);transition:all 270ms cubic-bezier(.34,1.25,.3,1);opacity:0;visibility:hidden;display:block;z-index:1000}.show+.dropdown-menu-animated{-webkit-transform:scale(1)!important;transform:scale(1)!important;-webkit-transform-origin:-21px;transform-origin:-21px;opacity:1;visibility:visible}@media (min-width:576px){.dropdown-menu-sm-start{right:auto;left:0}.dropdown-menu-sm-end{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{right:auto;left:0}.dropdown-menu-md-end{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{right:auto;left:0}.dropdown-menu-lg-end{right:0;left:auto}}@media (min-width:1399px){.dropdown-menu-xl-start{right:auto;left:0}.dropdown-menu-xl-end{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-item:focus,.dropdown-item:hover{text-decoration:none;background-color:var(--app-nav-item-hover-bg)}.dropdown-item.active,.dropdown-item.selected,.dropdown-item:active{text-decoration:none;font-weight:500;color:var(--app-nav-link-active-color);background-color:rgba(var(--secondary),.05)}.dropdown-item:active{text-decoration:none;font-weight:400;background-color:rgba(33,150,243,.09)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-gray-500);pointer-events:none;background-color:transparent}.dropdown-header{display:block;padding:.3125rem 1.5rem;margin-bottom:0;font-size:.725rem;color:var(--bs-body-color);white-space:nowrap;font-weight:300}.dropdown-item-text{display:block;padding:.75rem 1.5rem;color:var(--bs-body-color)}.dropdown-menu.dropdown-sm{width:8rem;height:auto}.dropdown-menu.dropdown-md{width:14rem;height:auto}.dropdown-menu.dropdown-lg{width:17.5rem;height:auto}.dropdown-menu.dropdown-xl{width:21.875rem;height:auto}.dropdown-menu .dropdown-item:first-child,.dropdown-menu .dropdown-item:last-child{border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle::after{display:inline-block;margin-left:.255em;margin-bottom:.2em;vertical-align:middle;width:.8em;height:.8em;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 9L12 17L20 9' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 9L12 17L20 9' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;background-color:currentColor;border:0!important;content:""!important}.dropdown-toggle.disabled::after,.dropdown-toggle:disabled::after{opacity:.65}.dropdown-toggle:has(.visually-hidden)::after{margin-left:0}.dropup .dropdown-toggle::after{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 17L12 9L20 17' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4 17L12 9L20 17' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;margin-bottom:0;vertical-align:0}.dropend .dropdown-toggle::after{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 4L17 12L9 20' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9 4L17 12L9 20' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;margin-bottom:0}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:middle;width:.8em;height:.8em;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17 4L9 12L17 20' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M17 4L9 12L17 20' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round' fill='none'/%3E%3C/svg%3E") no-repeat 50% 50%;background-color:currentColor;border:0!important;content:""!important}.dropstart .dropdown-toggle::after{display:none}.nav-item .dropdown-toggle:after{font-size:.9em}.dropdown-toggle.no-arrow::after,.dropdown-toggle.no-arrow:not([data-bs-toggle=dropdown])::before{display:none!important}.dropdown-menu .dropdown-menu{display:none}.dropdown-menu .dropdown-menu::after{content:"";display:block;width:130%;height:130%;background-color:transparent;position:absolute;z-index:-1;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.dropdown-multilevel{position:relative}.dropdown-multilevel .dropdown-item{cursor:pointer}.dropdown-multilevel:hover>.dropdown-menu{top:-2px;left:100%;display:block}.dropdown-multilevel.dropdown-multilevel-left .dropdown-menu{right:100%;left:auto}.dropdown-menu .dropdown-multilevel:hover>.dropdown-item:not(.disabled){background:var(--bs-dropdown-link-hover-bg);color:var(--bs-dropdown-link-hover-color)}.dropdown-menu .dropdown-menu .dropdown-item{padding-top:.45rem!important;padding-bottom:.45rem!important;font-size:.825rem}.card,.card-group{-webkit-box-shadow:0 0 13px 0 rgba(var(--bs-primary-rgb),.08);box-shadow:0 0 13px 0 rgba(var(--bs-primary-rgb),.08)}.card{--bs-card-cap-padding-y:1rem;--bs-card-cap-padding-x:1rem;--bs-card-title-spacer-y:0rem}.card-group>.card{-webkit-box-shadow:none;box-shadow:none}.list-group-item{--bs-list-group-item-padding-x:1.25rem;--bs-list-group-item-padding-y:0.75rem}.pagination{--bs-pagination-active-bg:var(--primary-900);--bs-pagination-active-bg:var(--primary-500);--bs-pagination-active-border-color:var(--primary-700);--bs-pagination-color:var(--bs-body-color);--bs-pagination-focus-color:var(--bs-body-color);--bs-pagination-hover-color:var(--primary-500);--bs-pagination-disabled-border-color:rgba(var(--bs-emphasis-color-rgb), 0.2);--bs-pagination-font-size:0.875rem;display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:var(--bs-border-radius)}.pagination .page-item:not(:first-child){margin-left:.25rem}.page-link{position:relative;display:block;margin-left:-1px;background-color:var(--bs-body-bg);border:1px solid var(--bs-border-color);border-radius:.25rem}.page-link:hover{z-index:2;text-decoration:none;background-color:var(--primary-500)!important;color:#fff;border-color:var(--primary-700)}.page-link:focus{z-index:3;outline:0;-webkit-box-shadow:0 0 0 .2rem transparent;box-shadow:0 0 0 .2rem transparent}.page-item .page-link{height:100%}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:3;color:#fff}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:.75rem;--bs-pagination-font-size:1rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:var(--bs-border-radius-sm)}.pagination-sm .page-link{padding:.25rem .6rem;font-size:.75rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-border-radius-sm)}.pagination-xs .page-link{padding:.2rem .5rem;font-size:.75rem}.popover{--bs-popover-header-padding-y:1rem;--bs-popover-header-padding-x:1rem;--bs-popover-bg:rgba(0, 0, 0, .1);--bs-popover-arrow-border:rgba(0, 0, 0, .1);background:var(--bs-body-bg);-webkit-box-shadow:0 0 15px 1px rgba(90,80,105,.2);box-shadow:0 0 15px 1px rgba(90,80,105,.2);margin:12px;border:3px solid rgba(0,0,0,.2);border-radius:.5rem}.popover .arrow{border-color:inherit}.popover .popover-header{--bs-popover-header-font-size:1rem;--bs-popover-header-font-weight:500;border-radius:.5rem .5rem 0 0;border-bottom-width:0;border-radius:5px;--bs-popover-header-bg:transparent}.popover-header+.popover-body{padding-top:0}.primary-popover{--bs-popover-border-color:var(--primary-500);--bs-popover-header-bg:var(--primary-500);--bs-popover-header-color:var(--bs-light);--bs-popover-body-color:var(--bs-light);--bs-popover-bg:var(--primary-700);--bs-popover-arrow-border:var(--primary-800);background:var(--primary-500)}.secondary-popover{--bs-popover-border-color:var(--bs-secondary);--bs-popover-header-bg:var(--bs-secondary);--bs-popover-header-color:var(--bs-light);--bs-popover-body-color:var(--bs-light);--bs-popover-bg:var(--bs-secondary);--bs-popover-arrow-border:var(--bs-secondary);background:var(--bs-secondary)}.success-popover{--bs-popover-border-color:var(--success-600);--bs-popover-header-bg:var(--success-600);--bs-popover-header-color:var(--bs-light);--bs-popover-body-color:var(--bs-light);--bs-popover-bg:var(--success-800);--bs-popover-arrow-border:var(--success-800);background:var(--success-600)}.danger-popover{--bs-popover-border-color:var(--danger-700);--bs-popover-header-bg:var(--danger-700);--bs-popover-header-color:var(--bs-light);--bs-popover-body-color:var(--bs-light);--bs-popover-bg:var(--danger-900);--bs-popover-arrow-border:var(--danger-800);background:var(--danger-700)}.warning-popover{--bs-popover-border-color:var(--warning-500);--bs-popover-header-bg:var(--warning-500);--bs-popover-header-color:var(--bs-dark);--bs-popover-body-color:var(--bs-dark);--bs-popover-bg:var(--warning-900);--bs-popover-arrow-border:var(--warning-900);background:var(--warning-500)}.info-popover{--bs-popover-border-color:var(--info-500);--bs-popover-header-bg:var(--info-500);--bs-popover-header-color:var(--bs-light);--bs-popover-body-color:var(--bs-light);--bs-popover-bg:var(--info-700);--bs-popover-arrow-border:var(--info-800);background:var(--info-500)}.dark-popover{--bs-popover-border-color:var(--bs-dark);--bs-popover-header-bg:var(--bs-dark);--bs-popover-header-color:var(--bs-light);--bs-popover-body-color:var(--bs-light);--bs-popover-bg:var(--bs-dark);--bs-popover-arrow-border:var(--bs-dark);background:var(--bs-dark)}.light-popover{--bs-popover-border-color:var(--bs-light);--bs-popover-header-bg:var(--bs-light);--bs-popover-header-color:var(--bs-dark);--bs-popover-body-color:var(--bs-dark);--bs-popover-bg:rgba(255, 255, 255, 1);--bs-popover-arrow-border:rgba(43, 43, 43, 0.3);background:var(--bs-light)}.progress-xs{height:5px}.progress-sm{height:8px}.progress-md{height:14px}.progress-lg{height:20px}.progress-xl{height:30px}.progress,.progress-stacked{--bs-progress-bg:rgba(var(--bs-body-color-rgb), 0.07)}th{font-weight:500}.table{--bs-table-hover-bg:rgba(var(--bs-primary-rgb), 0.14);font-weight:300;font-size:.875rem}.table.table-sm{font-size:.825rem}.table.table-nano{font-size:.75rem}.table.table-nano>:not(caption)>*>*{padding:.25rem .25rem}.table thead td,.table thead th{border-bottom-width:2px}.table-hover>tbody>tr:hover{outline:1px solid var(--primary-500);z-index:1;position:relative}.table-border-0 td,.table-border-0 th{border:0!important}.table-calendar{table-layout:fixed}.table-calendar th{border:0!important;font-weight:500}.table-calendar tr td:first-child{border-left:0}.table-calendar tr td:last-child{border-right:0;padding-right:10px}.table-calendar td,.table-calendar th{text-align:right;vertical-align:top;padding:5px 8px;position:relative;border:1px solid var(--bs-border-color)}.table-calendar-appointment-date{font-size:2.2rem!important;vertical-align:top;line-height:1.15;margin-right:.25rem}.st-expand-btn{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;height:20px;width:20px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:20px!important;font-size:1.4em!important}.st-wrapper{width:100%}.st-wrapper .st-table{border:1px solid var(--bs-border-color)}.st-wrapper .pagination{--bs-pagination-active-bg:var(--primary-500);--bs-pagination-active-border-color:var(--primary-700);--bs-pagination-focus-color:var(--bs-emphasis-color);--bs-pagination-hover-color:var(--primary-500);--bs-pagination-color:var(--bs-emphasis-color)}.st-wrapper .st-search-wrapper{position:relative}.st-wrapper .st-search-wrapper .sa-icon{--sa-icon-size:1.1rem;--sa-icon-color:rgb(155 155 155);--sa-fill-opacity:0.7;--sa-icon-fill:rgb(255 255 255 / var(--sa-fill-opacity));margin:0 .25rem}.st-wrapper .st-search-wrapper .input-group:focus-within .input-group-text .sa-icon{--sa-icon-color:rgb(255, 255, 255);--sa-fill-opacity:0.3}.st-wrapper .table{width:100%}.st-wrapper .table td,.st-wrapper .table th{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.st-sort-asc,.st-sort-desc,.st-sort-neutral{position:relative;padding-right:1.5em!important}.st-sort-asc,.st-sort-desc,.st-sort-neutral{position:relative}.st-sort-asc,.st-sort-desc{background-color:rgba(var(--primary),.05)!important;border-bottom-color:var(--primary-500)}.st-sort-asc::before,.st-sort-desc::before,.st-sort-neutral::before{content:"";position:absolute;width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:7px solid #ccc;top:55%;right:7px}.st-sort-asc::after,.st-sort-desc::after,.st-sort-neutral::after{content:"";position:absolute;width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:7px solid #ccc;bottom:55%;right:7px}.st-sort-asc::after{border-bottom-color:var(--primary-500)}.st-sort-desc::before{border-top-color:var(--primary-500)}.st-sort-column{background-color:rgba(var(--primary),.05)!important}.table-striped>tbody>tr:nth-of-type(odd) .st-sort-column{background-color:rgba(var(--primary),.09)!important}.st-loading-overlay{position:absolute;top:0;left:0;right:0;height:100%;background-color:var(--app-content-background);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:1000;-webkit-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.st-wrapper{position:relative;width:100%}.st-wrapper.st-loading{min-height:550px;max-height:550px;overflow:hidden;pointer-events:none}.st-wrapper.st-loading::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:var(--app-content-background);z-index:1000}.st-wrapper.st-loading::before{content:"Initializing table, just a second...";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:1001;font-size:.875rem;color:var(--bs-body-color);white-space:nowrap;padding-top:40px}.st-wrapper.st-loading .st-loading-spinner{content:"";position:absolute;top:calc(50% - 30px);left:50%;width:30px;height:30px;border:3px solid var(--primary-500);border-top-color:transparent;border-radius:50%;z-index:1001;-webkit-animation:st-spin .6s linear infinite;animation:st-spin .6s linear infinite}.st-wrapper.st-loading.st-ajax-loading{max-height:unset;pointer-events:unset}.st-wrapper.st-loading.st-ajax-loading .st-loading-spinner{width:30px;height:30px;top:50%;left:50%}.st-wrapper.st-loading.st-ajax-loading::before{content:none;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:1001;font-size:.875rem;color:var(--bs-body-color);white-space:nowrap;width:200px;height:100px;padding-top:40px;background:rgba(255,255,255,.5);border:1px solid #333;border-radius:.25rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.st-wrapper.st-loading.st-ajax-loading::after{content:none}.st-wrapper.st-loading .table{opacity:.3}.st-wrapper .table{-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.st-spinner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1rem;padding:1.5rem;background:#fff;border-radius:8px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.1);box-shadow:0 2px 8px rgba(0,0,0,.1)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes st-spin{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes st-spin{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.st-no-results{text-align:center;padding:2rem;background-color:rgba(var(--info),.1);border:none;border-radius:.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;gap:5px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.st-no-results b{color:var(--info-400);font-weight:600!important;word-wrap:break-word;word-break:break-word}.st-table{width:100%;border-collapse:collapse}.st-table td,.st-table th{padding:.5rem .75rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.st-table th{position:relative;font-weight:600}.st-table td:first-child{position:relative}.st-table td:first-child:has(.st-expand){cursor:pointer}.st-table td:first-child.st-expand-active::before,.st-table td:first-child.st-expand::before{content:"+";font-weight:300;font-size:12px;position:absolute;color:var(--bs-body-color);background-color:var(--bs-body-bg);border:1px solid var(--bs-border-color);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;top:6px;left:.5rem;bottom:6px;width:1rem;border-radius:.25rem;-webkit-box-shadow:0 1px 2px 0 rgba(var(--bs-body-color-rgb),.1);box-shadow:0 1px 2px 0 rgba(var(--bs-body-color-rgb),.1)}.st-table td:first-child.st-expand-active::before{content:"-";background:var(--primary-500);border-color:var(--primary-700);color:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(var(--bs-primary-rgb),.1);box-shadow:0 1px 2px 0 rgba(var(--bs-primary-rgb),.1)}.st-expand{padding-left:2.25rem!important}.st-child-row{background-color:rgba(0,0,0,.02)}.st-child-content{padding:0!important}.st-hidden-columns{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.25rem;padding:.5rem .5rem .5rem 2.25rem;position:relative}.st-hidden-columns::before{content:"";position:absolute;border-left:1px dashed var(--primary-700);display:block;top:0;bottom:0;left:1rem;z-index:1}.table-hover tr.expanded:hover+.st-child-row{--bs-table-bg-state:var(--bs-table-hover-bg)}.table-hover tr.expanded:has(+.st-child-row:hover){--bs-table-bg-state:var(--bs-table-hover-bg)}.st-hidden-column-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.st-hidden-column-label{font-weight:600;min-width:140px;display:inline-block}.st-hidden-column-value{-webkit-box-flex:1;-ms-flex:1;flex:1}.st-loading{position:relative;min-height:200px}.st-loading-spinner{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:40px;height:40px;border:4px solid rgba(0,0,0,.1);border-radius:50%;border-top-color:var(--primary-500);-webkit-animation:st-spin 1s linear infinite;animation:st-spin 1s linear infinite;z-index:1000}@keyframes st-spin{to{-webkit-transform:translate(-50%,-50%) rotate(360deg);transform:translate(-50%,-50%) rotate(360deg)}}.st-table.st-compact td,.st-table.st-compact th{padding:.35rem .5rem;font-size:.9rem}.st-table .st-truncate{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.popover-body-p-0 .popover-body{padding:0}.popover-body-p-0 .popover-body img{border-radius:var(--border-radius-uniform)}.st-wrapper tr.editing td{font-weight:700}.st-wrapper tr.deleting{background-color:var(--danger-900)!important;opacity:.6;-webkit-transition:background-color .3s ease,opacity .3s ease;transition:background-color .3s ease,opacity .3s ease}.st-wrapper tr.deleting td{background:0 0!important;color:#fff}.st-wrapper tr.saved{background-image:linear-gradient(250deg,rgba(121,250,237,.7),transparent);background-color:var(--success-50)!important}.st-wrapper tr.saved td{background:0 0!important}.st-wrapper tr.new-record{-webkit-animation:highlightNewRow 3s ease-in-out;animation:highlightNewRow 3s ease-in-out}.st-wrapper tr.new-record td{background:0 0!important}@-webkit-keyframes highlightNewRow{0%,100%{background-color:transparent}30%{background-color:rgba(221,233,63,.2)}}@keyframes highlightNewRow{0%,100%{background-color:transparent}30%{background-color:rgba(221,233,63,.2)}}@-webkit-keyframes highlightSaved{0%,100%{background-color:transparent}30%{background-color:rgba(221,233,63,.2)}}@keyframes highlightSaved{0%,100%{background-color:transparent}30%{background-color:rgba(221,233,63,.2)}}.btn-primary{-webkit-box-shadow:0 2px 6px 0 rgba(136,106,181,.5);box-shadow:0 2px 6px 0 rgba(136,106,181,.5)}.btn-success{-webkit-box-shadow:0 2px 6px 0 rgba(29,201,183,.5);box-shadow:0 2px 6px 0 rgba(29,201,183,.5)}.btn-info{-webkit-box-shadow:0 2px 6px 0 rgba(33,150,243,.5);box-shadow:0 2px 6px 0 rgba(33,150,243,.5)}.btn-warning{-webkit-box-shadow:0 2px 6px 0 rgba(255,194,65,.5);box-shadow:0 2px 6px 0 rgba(255,194,65,.5)}.btn-danger{-webkit-box-shadow:0 2px 6px 0 rgba(253,57,149,.5);box-shadow:0 2px 6px 0 rgba(253,57,149,.5)}.btn-fusion{-webkit-box-shadow:0 2px 6px 0 rgba(80,80,80,.5);box-shadow:0 2px 6px 0 rgba(80,80,80,.5)}.btn-dark{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.5);box-shadow:0 2px 6px 0 rgba(0,0,0,.5)}.btn-light{-webkit-box-shadow:0 2px 6px 0 rgba(255,255,255,.5);box-shadow:0 2px 6px 0 rgba(255,255,255,.5)}.btn-secondary{-webkit-box-shadow:0 2px 6px 0 rgba(108,117,125,.5);box-shadow:0 2px 6px 0 rgba(108,117,125,.5)}.btn-icon .badge{top:auto}.btn-icon .badge.pos-top{margin-top:-.25rem}.btn-icon .badge.pos-bottom{margin-bottom:-.25rem}.btn-icon .badge.pos-left{margin-left:-.25rem}.btn-icon .badge.pos-right{margin-right:-.25rem}.btn-default{--btn-background-color:var(--bs-gray-100);--btn-default-bg-top:var(--bs-gray-100);--btn-default-bg-bottom:var(--bs-gray-200);--btn-border-color:rgba(var(--bs-body-color-rgb), 0.1);--btn-hover-border-color:rgba(var(--bs-body-color-rgb), 0.3);--btn-color:rgba(var(--bs-body-color-rgb), 0.85);--btn-hover-color:rgba(var(--bs-body-color-rgb), 1);--btn-focus-color:rgba(var(--bs-body-color-rgb), 1);--bs-btn-disabled-border-color:#dddddd;--bs-btn-active-border-color:var(--primary-500);background-color:var(--btn-background-color);background-image:-webkit-gradient(linear,left bottom,left top,from(var(--btn-default-bg-top)),to(var(--btn-default-bg-bottom)));background-image:linear-gradient(to top,var(--btn-default-bg-top),var(--btn-default-bg-bottom));color:var(--btn-color);border:1px solid var(--btn-border-color);-webkit-box-shadow:none;box-shadow:none}.btn-default:hover{-webkit-box-shadow:none;box-shadow:none;border-color:var(--btn-hover-border-color);color:var(--btn-hover-color)}.btn-default:focus{border-color:rgba(var(--bs-body-color-rgb),.5)!important;color:var(--btn-focus-color)}.ben-default.active,.btn-default:active{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.15) inset!important;box-shadow:0 2px 5px rgba(0,0,0,.15) inset!important;background:inherit;border-color:inherit}.btn:not(.btn-system):active{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.15) inset!important;box-shadow:0 2px 5px rgba(0,0,0,.15) inset!important}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color)!important;background-color:var(--bs-btn-active-bg)!important;border-color:var(--bs-btn-active-border-color)!important}.btn-primary{--bs-btn-color:var(--bs-white);--bs-btn-bg:#886ab5;--bs-btn-border-color:#886ab5;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#6e4e9e;--bs-btn-hover-border-color:#62468d;--bs-btn-focus-shadow-rgb:136,106,181;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#62468d;--bs-btn-active-border-color:#563d7c;--bs-btn-disabled-color:var(--bs-white);--bs-btn-disabled-bg:#886ab5;--bs-btn-disabled-border-color:#886ab5}.btn-success{--bs-btn-color:var(--bs-white);--bs-btn-bg:#1dc9b7;--bs-btn-border-color:#1dc9b7;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#179c8e;--bs-btn-hover-border-color:#13867a;--bs-btn-focus-shadow-rgb:29,201,183;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#13867a;--bs-btn-active-border-color:#107066;--bs-btn-disabled-color:var(--bs-white);--bs-btn-disabled-bg:#1dc9b7;--bs-btn-disabled-border-color:#1dc9b7}.btn-info{--bs-btn-color:var(--bs-white);--bs-btn-bg:#2196F3;--bs-btn-border-color:#2196F3;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#0c7cd5;--bs-btn-hover-border-color:#0a6ebd;--bs-btn-focus-shadow-rgb:33,150,243;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#0a6ebd;--bs-btn-active-border-color:#0960a5;--bs-btn-disabled-color:var(--bs-white);--bs-btn-disabled-bg:#2196F3;--bs-btn-disabled-border-color:#2196F3}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc241;--bs-btn-border-color:#ffc241;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffb20e;--bs-btn-hover-border-color:#f4a500;--bs-btn-focus-shadow-rgb:255,194,65;--bs-btn-active-color:#000;--bs-btn-active-bg:#f4a500;--bs-btn-active-border-color:#da9400;--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc241;--bs-btn-disabled-border-color:#ffc241}.btn-danger{--bs-btn-color:var(--bs-white);--bs-btn-bg:#fd3995;--bs-btn-border-color:#fd3995;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#fc077a;--bs-btn-hover-border-color:#e7026e;--bs-btn-focus-shadow-rgb:253,57,149;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#e7026e;--bs-btn-active-border-color:#ce0262;--bs-btn-disabled-color:var(--bs-white);--bs-btn-disabled-bg:#fd3995;--bs-btn-disabled-border-color:#fd3995}.btn-fusion{--bs-btn-color:var(--bs-white);--bs-btn-bg:#505050;--bs-btn-border-color:#505050;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#363636;--bs-btn-hover-border-color:#2a2a2a;--bs-btn-focus-shadow-rgb:80,80,80;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#2a2a2a;--bs-btn-active-border-color:#1d1d1d;--bs-btn-disabled-color:var(--bs-white);--bs-btn-disabled-bg:#505050;--bs-btn-disabled-border-color:#505050}.btn-outline-primary{--bs-btn-color:#886ab5;--bs-btn-border-color:#886ab5;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#886ab5;--bs-btn-hover-border-color:#886ab5;--bs-btn-focus-shadow-rgb:136,106,181;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#886ab5;--bs-btn-active-border-color:#886ab5;--bs-btn-disabled-color:#886ab5;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#886ab5}.btn-outline-success{--bs-btn-color:#1dc9b7;--bs-btn-border-color:#1dc9b7;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#1dc9b7;--bs-btn-hover-border-color:#1dc9b7;--bs-btn-focus-shadow-rgb:29,201,183;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#1dc9b7;--bs-btn-active-border-color:#1dc9b7;--bs-btn-disabled-color:#1dc9b7;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#1dc9b7}.btn-outline-info{--bs-btn-color:#2196F3;--bs-btn-border-color:#2196F3;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#2196F3;--bs-btn-hover-border-color:#2196F3;--bs-btn-focus-shadow-rgb:33,150,243;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#2196F3;--bs-btn-active-border-color:#2196F3;--bs-btn-disabled-color:#2196F3;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#2196F3}.btn-outline-warning{--bs-btn-color:#ffc241;--bs-btn-border-color:#ffc241;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc241;--bs-btn-hover-border-color:#ffc241;--bs-btn-focus-shadow-rgb:255,194,65;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc241;--bs-btn-active-border-color:#ffc241;--bs-btn-disabled-color:#ffc241;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc241}.btn-outline-danger{--bs-btn-color:#fd3995;--bs-btn-border-color:#fd3995;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#fd3995;--bs-btn-hover-border-color:#fd3995;--bs-btn-focus-shadow-rgb:253,57,149;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#fd3995;--bs-btn-active-border-color:#fd3995;--bs-btn-disabled-color:#fd3995;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#fd3995}.btn-outline-fusion{--bs-btn-color:#505050;--bs-btn-border-color:#505050;--bs-btn-hover-color:var(--bs-white);--bs-btn-hover-bg:#505050;--bs-btn-hover-border-color:#505050;--bs-btn-focus-shadow-rgb:80,80,80;--bs-btn-active-color:var(--bs-white);--bs-btn-active-bg:#505050;--bs-btn-active-border-color:#505050;--bs-btn-disabled-color:#505050;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#505050}.btn-system{font-size:1.5rem;padding:.3125rem;line-height:var(--app-header-height);border:none;outline:0;cursor:default;position:relative}.btn-system i{width:2rem;height:2rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-system i::after{color:rgba(var(--info),.9);opacity:.4}.btn-system i::before{color:rgba(var(--primary),.9)}.btn-system::before{content:"";position:absolute;width:2.875rem;height:2.875rem;border-radius:50%;background:0 0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.btn-system:focus{border:none;outline:0}.btn-system.show,.btn-system:hover{border:none;outline:0}.btn-system.show .sa-icon,.btn-system:hover .sa-icon{fill:rgba(var(--primary),var(--sa-fill-opacity));stroke:rgba(var(--primary),.8)}.btn-system.show::before,.btn-system:hover::before{background:rgba(var(--bs-emphasis-color-rgb),var(--btn-system-bg-opacity,.03))}.btn-system.btn-system-light.show,.btn-system.btn-system-light:hover{border:none;outline:0}.btn-system.btn-system-light.show .sa-icon,.btn-system.btn-system-light:hover .sa-icon{fill:rgba(var(--white),var(--sa-fill-opacity));stroke:rgba(var(--white),.8)}.btn-system.btn-system-light.show::before,.btn-system.btn-system-light:hover::before{background:rgba(var(--white),var(--sa-fill-opacity))}.btn-system:active{scale:.9}.btn[data-action=playsound]:not(.btn-has-sound){padding:0 2px;position:relative}.btn[data-action=playsound]:not(.btn-has-sound) .sa-icon{width:1rem;height:1rem;stroke:#222426;stroke-width:1px}.btn[data-action=playsound]:not(.btn-has-sound):hover .sa-icon{stroke-width:2px;stroke:#fff}.btn[data-action=playsound]:not(.btn-has-sound)[data-audio-playing]{border-color:rgba(var(--danger),.9);background:rgba(var(--danger),.1)}.btn[data-action=playsound]:not(.btn-has-sound)[data-audio-playing] .sa-icon{stroke-width:2px;stroke:rgba(var(--danger),.9)}.btn[data-action=playsound]:not(.btn-has-sound)::before{content:"";position:absolute;width:3.125rem;height:3.125rem;border-radius:50%;background:0 0;top:-1rem;left:-.875rem}.btn-icon{width:calc(2.1rem + 2px);height:calc(2.1rem + 2px);padding:0;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-icon:not([class*=-primary]):not([class*=-secondary]):not([class*=-default]):not([class*=-success]):not([class*=-info]):not([class*=-warning]):not([class*=-danger]):not([class*=-dark]):not([class*=-light]):not(.nav-item):hover{background-color:rgba(var(--bs-body-color-rgb),.05);border-color:transparent}.btn-icon:not([class*=-primary]):not([class*=-secondary]):not([class*=-default]):not([class*=-success]):not([class*=-info]):not([class*=-warning]):not([class*=-danger]):not([class*=-dark]):not([class*=-light]):not(.nav-item):not(.active):not(:active):not(:hover):not(:focus){background:0 0;color:var(--bs-body-color)}.btn-icon:not([class*=-primary]):not([class*=-secondary]):not([class*=-default]):not([class*=-success]):not([class*=-info]):not([class*=-warning]):not([class*=-danger]):not([class*=-dark]):not([class*=-light]):not(.nav-item):focus{border-color:rgba(var(--bs-body-color-rgb),.1)!important}.btn-icon.btn-xs{width:calc(1.15rem + 2px);height:calc(1.15rem + 2px);padding:0}.btn-group-sm>.btn-icon.btn,.btn-icon.btn-sm{width:calc(1.5rem + 2px);height:calc(1.5rem + 2px)}.btn-group-lg>.btn-icon.btn,.btn-icon.btn-lg{width:calc(3rem + 2px);height:calc(3rem + 2px)}.btn-group-xs>.btn,.btn-xs{padding:.25rem .5rem;font-size:.7rem;line-height:1.5;border-radius:.25rem}.btn-pills{border-radius:.9375rem}.btn-outline-default{background-color:transparent;color:var(--bs-body-color);border-color:var(--bs-border-color);--bs-btn-active-border-color:var(--primary-500);--bs-btn-disabled-border-color:#dddddd}.btn-outline-default:hover,.btn-outline-default:not(:disabled):not(.disabled).active,.btn-outline-default:not(:disabled):not(.disabled):active,.show>.btn-outline-default.dropdown-toggle{color:var(--bs-body-color);background-color:var(--bs-body-bg);border-color:var(--bs-border-color)}.btn-group .btn:not([class*=btn-outline-]):not(.btn-icon):not(.btn-light){border-right:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1)}.input-group-prepend .btn:not([class*=btn-outline-]):not(.btn-icon):not(:first-child){border-left:1px solid rgba(0,0,0,.1)}.input-group-append .btn:not([class*=btn-outline-]):not(.btn-icon):not(:first-child){border-left:1px solid rgba(0,0,0,.1)}.btn-group-vertical .btn-group,.btn-group-vertical .btn:not([class*=btn-outline-]):not(:first-child){border-top:1px solid rgba(0,0,0,.1)}.input-group .btn:not(.btn-outline-default)+.btn:not(.btn-outline-default){border-left-color:rgba(0,0,0,.1)}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}.tooltip{--bs-tooltip-padding-x:0.6rem;--bs-tooltip-padding-y:0.3rem;--bs-tooltip-font-size:0.8125rem;--bs-tooltip-bg:rgba(14, 14, 14, 0.9);--bs-tooltip-border-radius:5px;--bs-tooltip-opacity:0.95;--bs-tooltip-arrow-width:0.75rem;--bs-tooltip-arrow-height:0.4rem}.tooltip-inner{font-family:var(--font-family);font-weight:300;-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075);box-shadow:0 .125rem .25rem rgba(0,0,0,.075)}.tooltip-danger{--bs-tooltip-bg:var(--danger-500);--bs-tooltip-color:var(--bs-white)}.tooltip-warning{--bs-tooltip-bg:var(--warning-500);--bs-tooltip-color:var(--bs-dark)}.tooltip-success{--bs-tooltip-bg:var(--success-500);--bs-tooltip-color:var(--bs-white)}.tooltip-info{--bs-tooltip-bg:var(--info-500);--bs-tooltip-color:var(--bs-white)}.tooltip-primary{--bs-tooltip-bg:var(--primary-500);--bs-tooltip-color:var(--bs-white)}.tooltip-secondary{--bs-tooltip-bg:var(--secondary-500);--bs-tooltip-color:var(--bs-white)}.tooltip-dark{--bs-tooltip-bg:var(--dark-500);--bs-tooltip-color:var(--bs-white)}.tooltip-light{--bs-tooltip-bg:var(--light-500);--bs-tooltip-color:var(--bs-dark)}.tooltip-fusion{--bs-tooltip-bg:var(--fusion-500);--bs-tooltip-color:var(--bs-white)}.sa-icon{--sa-icon-color:rgb(155 155 155);--sa-fill-opacity:0.3;--sa-icon-fill:rgb(219 219 219 / var(--sa-fill-opacity));--sa-icon-size:1.25rem;width:var(--sa-icon-size);height:var(--sa-icon-size);stroke:var(--sa-icon-color);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;fill:var(--sa-icon-fill);display:block}.sa-icon.sa-nofill{fill:none!important}.sa-icon.sa-thin{stroke-width:.5px!important}.sa-icon.sa-regular{stroke-width:.8px!important}.sa-icon.sa-medium{stroke-width:1.2px!important}.sa-icon.sa-bold{stroke-width:1.5px!important}.sa-icon.sa-icon-1x{width:1.125rem;height:1.125rem}.sa-icon.sa-icon-2x{width:1.5rem;height:1.5rem}.sa-icon.sa-icon-3x{width:2.1875rem;height:2.1875rem}.sa-icon.sa-icon-4x{width:2.8125rem;height:2.8125rem}.sa-icon.sa-icon-5x{width:3.4375rem;height:3.4375rem;stroke-width:.5px}.sa-icon.sa-icon-6x{width:4.0625rem;height:4.0625rem}.sa-icon.sa-icon-7x{width:4.6875rem;height:4.6875rem}.sa-icon.sa-icon-8x{width:5.3125rem;height:5.3125rem}.sa-icon.sa-icon-9x{width:5.9375rem;height:5.9375rem}.sa-icon.sa-icon-10x{width:6.5625rem;height:6.5625rem}.sa-icon.sa-icon-primary{--sa-fill-opacity:0.1;fill:rgba(var(--primary),var(--sa-fill-opacity));stroke:rgba(var(--primary),.8)}.sa-icon.sa-icon-success{--sa-fill-opacity:0.1;fill:rgba(var(--success),var(--sa-fill-opacity));stroke:rgba(var(--success),.8)}.sa-icon.sa-icon-warning{--sa-fill-opacity:0.1;fill:rgba(var(--warning),var(--sa-fill-opacity));stroke:rgba(var(--warning),.8)}.sa-icon.sa-icon-danger{--sa-fill-opacity:0.1;fill:rgba(var(--danger),var(--sa-fill-opacity));stroke:rgba(var(--danger),.8)}.sa-icon.sa-icon-info{--sa-fill-opacity:0.1;fill:rgba(var(--info),var(--sa-fill-opacity));stroke:rgba(var(--info),.8)}.sa-icon.sa-icon-light{--sa-fill-opacity:0.1;fill:rgba(var(--bs-light-rgb),var(--sa-fill-opacity))!important;stroke:rgba(var(--bs-light-rgb),1)!important}.sa-icon.sa-icon-dark{--sa-fill-opacity:0.1;fill:rgba(var(--bs-dark-rgb),var(--sa-fill-opacity))!important;stroke:rgba(var(--bs-dark-rgb),1)!important}.sa-icon.sa-icon-subtlelight{--sa-fill-opacity:0.1;fill:rgba(var(--bs-body-color-rgb),var(--sa-fill-opacity))!important;stroke:rgba(var(--bs-body-color-rgb),1)!important}.collapse-icon{border-radius:var(--border-radius-uniform);border:1px solid var(--collapse-icon-border);height:var(--collapse-icon-height);width:var(--collapse-icon-width);position:relative;overflow:hidden;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--app-header-background);cursor:pointer}.collapse-icon>svg{height:.6875rem;margin-left:.5625rem;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.collapse-icon>svg polygon{fill:var(--collapse-icon-border)}.collapse-icon::after{content:"";position:absolute;border-right:1px solid var(--collapse-icon-border);width:1.25rem;height:var(--collapse-icon-height);left:0;top:0;background:rgba(var(--bs-emphasis-color-rgb),.05);border-radius:0;-webkit-transition:all .2s cubic-bezier(.34,1.25,.3,1);transition:all .2s cubic-bezier(.34,1.25,.3,1)}.collapse-icon:hover{border-color:var(--collapse-icon-border-hover);background:var(--bs-body-bg)}.collapse-icon:hover>svg{margin-left:.75rem}.collapse-icon:hover>svg polygon{fill:var(--collapse-icon-border-hover)}.collapse-icon:hover::after{border-right-color:var(--collapse-icon-border-hover);background:rgba(var(--primary),.1);width:.5625rem}.collapse-icon:active{scale:.95}.ellipsis-icon{--ellipsis-icon-color:currentColor;--ellipsis-icon-width:0.25rem;--ellipsis-icon-height:0.25rem;--ellipsis-icon-spacing:0.5rem;--ellipsis-icon-border-radius:50%;width:var(--ellipsis-icon-width);height:var(--ellipsis-icon-height);background-color:var(--ellipsis-icon-color);border-radius:var(--ellipsis-icon-border-radius);overflow:visible;position:relative;display:inline-block;scale:.8;-webkit-transition:all .2s cubic-bezier(.34,1.25,.3,1);transition:all .2s cubic-bezier(.34,1.25,.3,1)}.ellipsis-icon::after,.ellipsis-icon::before{content:"";position:absolute;width:var(--ellipsis-icon-width);height:var(--ellipsis-icon-height);background-color:var(--ellipsis-icon-color);display:block;border-radius:var(--ellipsis-icon-border-radius)}.ellipsis-icon::before{top:calc(var(--ellipsis-icon-spacing) * -1);-webkit-transition:all .1s cubic-bezier(.34,1.25,.3,1);transition:all .1s cubic-bezier(.34,1.25,.3,1);-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ellipsis-icon::after{bottom:calc(var(--ellipsis-icon-spacing) * -1);-webkit-transition:all .3s cubic-bezier(.34,1.25,.3,1);transition:all .3s cubic-bezier(.34,1.25,.3,1);-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.btn-toolbar-master.show .ellipsis-icon{--ellipsis-icon-spacing:0px;--ellipsis-icon-border-radius:0px;--ellipsis-icon-width:0.9375rem;--ellipsis-icon-height:0.125rem;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:0 0}.mobile-menu-icon{--mobile-menu-icon-width:4rem;--mobile-menu-icon-height:2.5rem;width:var(--mobile-menu-icon-width);height:var(--mobile-menu-icon-height);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:var(--border-radius-uniform);background:rgba(var(--danger),.9);border:1px solid var(--bs-body-bg)}.mobile-menu-icon .sa-icon{width:1.8rem;height:1.8rem;stroke-width:1.5px;fill:rgba(var(--bs-light-rgb),.1);stroke:rgba(var(--bs-light-rgb),1)}.mobile-menu-icon:active{background:rgba(var(--primary),.9);scale:.95}.mobile-menu-icon::before{content:"";position:absolute;width:100%}.icon-stack{position:relative;display:inline-block;width:1em;height:1em;line-height:1em;vertical-align:middle;text-align:center}.icon-stack-1x,.icon-stack-2x,.icon-stack-3x{position:absolute!important;left:0;bottom:0;width:100%;text-align:center;line-height:inherit!important}.icon-stack-1x{font-size:.5em}.icon-stack-2x{font-size:.7em;margin-left:1px}.icon-stack-3x{font-size:1em}.icon-stack-xl{font-size:3.125rem}.icon-stack-lg{font-size:2.5rem}.icon-stack-md{font-size:2.125rem}.icon-stack-sm{font-size:1.875rem}#my-icon,.stack-icon{position:relative;display:inline-block;width:1.1em;height:1.1em;font-size:1.25em;vertical-align:middle;text-align:center;overflow:hidden}#my-icon .icon-layers,.stack-icon .icon-layers{position:absolute;left:0;bottom:0;top:0;right:0;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#my-icon .icon-layers .stack-3x,.stack-icon .icon-layers .stack-3x{font-size:100%}#my-icon .icon-layers .stack-3x.sa-icon,.stack-icon .icon-layers .stack-3x.sa-icon{width:100%;height:100%}#my-icon .icon-layers .stack-2x,.stack-icon .icon-layers .stack-2x{font-size:80%}#my-icon .icon-layers .stack-2x.sa-icon,.stack-icon .icon-layers .stack-2x.sa-icon{width:75%;height:75%}#my-icon .icon-layers .stack-1x,.stack-icon .icon-layers .stack-1x{font-size:60%}#my-icon .icon-layers .stack-1x.sa-icon,.stack-icon .icon-layers .stack-1x.sa-icon{width:57%;height:57%}#my-icon .icon-layers .stack-0x,.stack-icon .icon-layers .stack-0x{font-size:50%}#my-icon .icon-layers .stack-0x.sa-icon,.stack-icon .icon-layers .stack-0x.sa-icon{width:45%;height:45%}::-webkit-scrollbar{width:var(--scrollbar-width,8px)}::-webkit-scrollbar-track{background:var(--scrollbar-color,var(--bs-body-bg))}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb,rgba(var(--bs-body-color-rgb),.8))}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover,rgba(var(--bs-body-color-rgb),1))}.slimScrollBar{--scrollbar-color:rgba(var(--bs-body-color-rgb), 0.8);--scrollbar-hover-color:rgba(var(--bs-body-color-rgb), 1);background:var(--scrollbar-color)!important;cursor:default!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:.5px solid transparent;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.slimScrollBar:hover{outline-color:var(--scrollbar-color)}.slimScrollBar.dragging{background:var(--scrollbar-hover-color)!important;outline-color:var(--scrollbar-hover-color)}.slimScrollBar::after{content:"";position:absolute;top:0;bottom:0;width:calc(100% + 10px);height:calc(100% + 2px);left:-5px;opacity:0}.slimScrollRail{background:var(--bs-body-bg)!important;cursor:default!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:1px solid rgba(var(--bs-body-bg-rgb),.3)}.slimScrollRail:hover{opacity:.5!important}.slimScrollRail::after{content:"";position:absolute;top:0;bottom:0;width:calc(100% + 8px);height:calc(100% + 2px);left:-3px;opacity:0}.slimScrollDiv{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.app-sidebar .slimScrollDiv{width:var(--menu-width)!important}body:not(.no-slimscroll) .custom-scroll{overflow:hidden}.custom-scroll,.custom-scrollbar{overflow:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch}.custom-scroll::-webkit-scrollbar,.custom-scrollbar::-webkit-scrollbar{height:4px;width:4px}.custom-scroll::-webkit-scrollbar:hover,.custom-scrollbar::-webkit-scrollbar:hover{background-color:rgba(var(--bs-body-color-rgb),.8)}.custom-scroll::-webkit-scrollbar-track-piece,.custom-scrollbar::-webkit-scrollbar-track-piece{background-color:var(--bs-body-bg)}.custom-scroll::-webkit-scrollbar-track-piece:hover,.custom-scrollbar::-webkit-scrollbar-track-piece:hover{background-color:var(--bs-body-bg)}.custom-scroll::-webkit-scrollbar-thumb:vertical,.custom-scrollbar::-webkit-scrollbar-thumb:vertical{background-color:rgba(var(--bs-body-color-rgb),.5)}.custom-scroll::-webkit-scrollbar-thumb:vertical:hover,.custom-scrollbar::-webkit-scrollbar-thumb:vertical:hover{background-color:rgba(var(--bs-body-color-rgb),.8)}.primary-nav::-webkit-scrollbar-track-piece{background-color:var(--bs-body-bg)}.primary-nav::-webkit-scrollbar-thumb:vertical{background-color:rgba(var(--bs-body-color-rgb),.8)}.primary-nav::-webkit-scrollbar-thumb:vertical:hover{background-color:rgba(var(--bs-body-color-rgb),.5)}.primary-nav::-webkit-scrollbar{height:4px;width:4px}.primary-nav:hover::-webkit-scrollbar-corner{width:40px}.accordion-button{--bs-accordion-active-color:var(--app-nav-link-active-color);--bs-accordion-active-bg:rgba(var(--fusion), 0.04);background-color:var(--bs-accordion-active-bg);font-size:var(--bs-body-font-size);font-weight:500}.accordion.accordion-clean .accordion-item{border-left:0;border-right:0;background:0 0}.accordion.accordion-clean .accordion-item:first-child{border-top:0}.accordion.accordion-clean .accordion-item:last-child{border-bottom:0}.accordion.accordion-clean:not(.accordion-outline):not(.accordion-hover) .accordion-body,.accordion.accordion-clean:not(.accordion-outline):not(.accordion-hover) .accordion-button{padding-left:0;padding-right:0}.accordion.accordion-clean:not(.accordion-outline):not(.accordion-hover) .accordion-body{padding-top:0}.accordion.accordion-clean .accordion-button{background:0 0}.accordion.accordion-clean .accordion-button:not(.collapsed){color:rgba(var(--bs-body-color-rgb),1)}.accordion.accordion-clean .accordion-button.collapsed{color:rgba(var(--bs-body-color-rgb),.75)}.accordion.accordion-outline .accordion-item{margin-bottom:1rem;border:2px solid var(--bs-border-color)!important;border-radius:var(--bs-border-radius)}.accordion.accordion-outline .accordion-item .accordion-button{background:0 0}.accordion.accordion-outline .accordion-item .accordion-button:focus{-webkit-box-shadow:none;box-shadow:none}.accordion.accordion-hover{--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23FFFFFF' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e")}.accordion.accordion-hover .accordion-item{background:0 0}.accordion.accordion-hover .accordion-button{-webkit-transition:all .5s ease;transition:all .5s ease;background:0 0}.accordion.accordion-hover .accordion-button:hover.collapsed{color:var(--bs-white);background-color:var(--primary-400)}.accordion.accordion-hover .accordion-button:hover.collapsed::after{background-image:var(--bs-accordion-btn-active-icon)}.accordion.accordion-hover .accordion-button:not(.collapsed){color:var(--bs-white);background-color:var(--primary-700)}.accordion.accordion-hover .accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon)}.accordion-button:not(.collapsed){-webkit-box-shadow:none;box-shadow:none}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon)}[aria-expanded=false]~.collapsed-reveal{display:none}[aria-expanded=false] .collapsed-reveal{display:none}[aria-expanded=false]~.collapsed-hidden{display:block}[aria-expanded=false] .collapsed-hidden{display:block}[aria-expanded=true]~.collapsed-reveal{display:block}[aria-expanded=true] .collapsed-reveal{display:block}[aria-expanded=true]~.collapsed-hidden{display:none}[aria-expanded=true] .collapsed-hidden{display:none}.accordion-button.custom-collapse::after{content:none}.panel-fullscreen{overflow:hidden;max-width:100%}.sortable-active .panel:not(.panel-locked):not(.panel-fullscreen) .panel-hdr>.h2,.sortable-active .panel:not(.panel-locked):not(.panel-fullscreen) .panel-hdr>h2{cursor:move}.panel{--border-radius:0.375rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:relative;background-color:var(--app-panel-bg,#fff);-webkit-box-shadow:0 0 13px 0 rgba(0,0,0,.05);box-shadow:0 0 13px 0 rgba(0,0,0,.05);margin-bottom:1.5rem;border:1px solid var(--app-panel-border-color,rgba(0,0,0,.09));border-bottom:1px solid var(--app-panel-border-bottom,#e0e0e0);border-radius:var(--border-radius)}.panel.panel-selected{position:relative}.panel.panel-selected::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;border-radius:inherit;z-index:10;background:repeating-linear-gradient(-55deg,rgba(0,0,0,.05),rgba(0,0,0,.05) 5px,rgba(0,0,0,0) 5px,rgba(0,0,0,0) 9px);background-color:var(--panel-drag-bg,#f9f9f9);opacity:.5;border:2px solid rgba(var(--success),.9)}.panel.panel-icon .panel-toolbar .btn-panel{margin-left:0;position:relative;--sa-icon-hover-fill-opacity:0.2}.panel.panel-icon .panel-toolbar .btn-panel[data-action=panel-collapse] .sa-icon{stroke:var(--bs-success)}.panel.panel-icon .panel-toolbar .btn-panel[data-action=panel-collapse]:hover .sa-icon{fill:rgba(var(--success),var(--sa-icon-hover-fill-opacity))}.panel.panel-icon .panel-toolbar .btn-panel[data-action=panel-fullscreen] .sa-icon{stroke:var(--bs-warning)}.panel.panel-icon .panel-toolbar .btn-panel[data-action=panel-fullscreen]:hover .sa-icon{fill:rgba(var(--warning),var(--sa-icon-hover-fill-opacity))}.panel.panel-icon .panel-toolbar .btn-panel[data-action=panel-close] .sa-icon{stroke:var(--bs-danger)}.panel.panel-icon .panel-toolbar .btn-panel[data-action=panel-close]:hover .sa-icon{fill:rgba(var(--danger),var(--sa-icon-hover-fill-opacity))}.panel.panel-icon .panel-toolbar .btn-panel::after{content:"";width:1.875rem;height:1.875rem;position:absolute;border-radius:100%;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.panel.panel-icon .panel-toolbar [data-action*=panel-]:not(.dropdown-item) .sa-icon{width:1.5rem;height:1.5rem;stroke-width:1px;fill:none}.panel:not(.panel-icon) .btn-panel{width:1rem;height:1rem;opacity:.8}.panel:not(.panel-icon) .btn-panel:hover{opacity:1}.panel:not(.panel-icon) .btn-panel .sa-icon{display:none}.panel:not(.panel-icon) .btn-panel.js-panel-collapse,.panel:not(.panel-icon) .btn-panel[data-action=panel-collapse]{background:var(--bs-success)}.panel:not(.panel-icon) .btn-panel.js-panel-fullscreen,.panel:not(.panel-icon) .btn-panel[data-action=panel-fullscreen]{background:var(--bs-warning)}.panel:not(.panel-icon) .btn-panel.js-panel-close,.panel:not(.panel-icon) .btn-panel[data-action=panel-close]{background:var(--bs-danger)}.panel .panel-container{position:relative;border-radius:0 0 var(--border-radius) var(--border-radius)}.panel .panel-container .panel-content{padding:1rem}.panel .panel-container .panel-content:last-child,.panel .panel-container .panel-content:only-child{border-radius:0 0 var(--border-radius) var(--border-radius)}.panel.panel-refreshing [data-action=panel-refresh]{color:var(--bs-gray-500);pointer-events:none;background-color:rgba(0,0,0,.07);-webkit-box-shadow:none;box-shadow:none;border-color:rgba(0,0,0,.05);cursor:wait}.panel.panel-refreshing [data-action=panel-refresh].dropdown-item{background:0 0}.panel.panel-refreshing .panel-container .panel-content{opacity:.5;-webkit-transition:all 470ms cubic-bezier(.34,1.25,.3,1);transition:all 470ms cubic-bezier(.34,1.25,.3,1)}.panel.panel-refreshing .panel-container::before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(255,255,255,.3);border-radius:inherit;z-index:10}.panel.panel-refreshing .panel-container::after{content:"\e098";position:absolute;font-family:smartadmin-icons;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;z-index:11;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:2rem;color:var(--bs-gray-500);color:currentColor;-webkit-animation:refresh 2s linear infinite;animation:refresh 2s linear infinite}.panel.panel-fullscreen{position:fixed!important;z-index:2055;top:0;left:0;right:0;height:100vh!important;max-height:100vh!important;width:100vw!important;max-width:100vw!important;border-radius:0;border:0}.panel.panel-fullscreen [data-action=panel-collapse] [data-action=panel-close]{display:none!important}.panel.panel-fullscreen .panel-hdr{height:4.125rem;border-radius:0;-webkit-box-shadow:0 .125rem .125rem -.0625rem rgba(45,71,120,.1);box-shadow:0 .125rem .125rem -.0625rem rgba(45,71,120,.1)}.panel.panel-fullscreen .panel-hdr .h2,.panel.panel-fullscreen .panel-hdr h2{font-size:14px;font-weight:400}.panel.panel-fullscreen .panel-hdr .panel-toolbar .btn-panel[data-action=panel-fullscreen] .sa-icon{width:2rem;height:2rem}.panel.panel-fullscreen .panel-hdr .panel-toolbar [data-action=panel-close],.panel.panel-fullscreen .panel-hdr .panel-toolbar [data-action=panel-collapse]{display:none}.panel.panel-fullscreen .panel-container{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;border-radius:0;display:block!important}.panel.panel-locked [data-panel-toggle=panel-locked].dropdown-item{font-weight:500;color:var(--primary-500)}.panel.panel-locked .panel-hdr .h2::before,.panel.panel-locked .panel-hdr h2::before{font-family:smartadmin-icons;content:"\f2ae";position:absolute;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:1rem;color:currentColor;height:24px;width:24px;right:0;background:var(--bs-body-bg);border-radius:24px;border:1px solid #ededed;padding-bottom:2px;padding-right:1px;top:50%;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.panel.panel-locked .panel-hdr .h2:active::before,.panel.panel-locked .panel-hdr h2:active::before{color:#fff;background:var(--danger-500);border-color:var(--danger-600)}.panel.panel-locked .panel-hdr .h2:only-child::before,.panel.panel-locked .panel-hdr h2:only-child::before{right:1rem}.panel.panel-locked .panel-locked-text{display:block}.panel.panel-locked .panel-unlock-text{display:none}.panel:not(.panel-locked) .panel-locked-text{display:none}.panel:not(.panel-locked) .panel-unlock-text{display:block}.panel.ui-sortable-helper{-webkit-box-shadow:0 5px 16px 0 rgba(0,0,0,.05),0 5px 20px 0 rgba(0,0,0,.09);box-shadow:0 5px 16px 0 rgba(0,0,0,.05),0 5px 20px 0 rgba(0,0,0,.09)}.panel-tag{padding:1rem 1rem;margin-bottom:2rem;border-left:.1875rem solid var(--success-500);background:var(--panel-tag-background,#f2fdfc);font-weight:400;font-size:.875rem;border-radius:0 .25rem .25rem 0}.panel-tag>:last-child,.panel-tag>:only-child{margin-bottom:0}.panel-tag:only-child{margin-bottom:0}.panel-container{-webkit-transition:height .35s ease;transition:height .35s ease}.panel-collapsed .panel-container{height:0;overflow:hidden}.panel-hdr{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:3rem;border-radius:var(--border-radius) var(--border-radius) 0 0}.panel-collapsed .panel-hdr{border-radius:var(--border-radius) var(--border-radius) 0 0}.panel-hdr>:first-child{padding-left:1rem}.panel-hdr>:last-child{padding-right:1rem}.panel-hdr .h2,.panel-hdr h2{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:1rem;margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:3rem;color:inherit;color:var(--bs-body-color);position:relative;font-weight:600}.panel-hdr .h2:not(:only-child),.panel-hdr h2:not(:only-child){margin-right:.667rem}.panel-hdr .h2>[class*=fw-],.panel-hdr h2>[class*=fw-]{margin-left:.25rem}.panel-hdr .h2 .small,.panel-hdr .h2 small,.panel-hdr h2 .small,.panel-hdr h2 small{display:inline-block;margin:0;opacity:.8;font-weight:400;font-size:.875rem;margin-left:.5rem}.panel-hdr .h2 .panel-icon,.panel-hdr h2 .panel-icon{margin-right:.5rem}.panel-hdr[class*=" bg-"] .h2,.panel-hdr[class*=" bg-"] h2,.panel-hdr[class^=bg-] .h2,.panel-hdr[class^=bg-] h2{color:inherit}.panel:not(.panel-collapsed).panel-icon .panel-expand-icon{display:none}.panel-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative}.panel-toolbar .btn-panel{margin-left:.3rem;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%}.panel-toolbar .btn-toolbar-master{height:3rem;width:1.826875rem;border-radius:0;margin-right:-1rem;border-top-right-radius:.25rem;margin-left:.5rem;padding:0 .8125rem;background:0 0;border:0;font-size:1.5625rem;color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.panel-toolbar .btn-toolbar-master.show{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.15) inset!important;box-shadow:0 2px 5px rgba(0,0,0,.15) inset!important}.panel-toolbar .btn-toolbar-master+.dropdown-menu{right:0!important;top:3rem;left:auto!important;margin:0;border-radius:0;top:100%!important}.panel-toolbar .btn-panel-flat:last-child{border-top-right-radius:.1875rem}.mod-panel-clean .panel-hdr{background:var(--bs-body-bg);background-image:-webkit-gradient(linear,left top,left bottom,from(#f7f7f7),to(var(--bs-body-bg)));background-image:linear-gradient(to bottom,#f7f7f7,var(--bs-body-bg));-webkit-box-shadow:none;box-shadow:none}.mod-panel-clean .panel-hdr .h2,.mod-panel-clean .panel-hdr h2{color:var(--bs-body-color);font-weight:500}.nav-tabs-clean .nav-item .nav-link{border:0}.nav-tabs-clean .nav-item .nav-link.active{border-bottom:1px solid var(--primary-500)!important;color:var(--primary-500);font-weight:500;border-width:2px!important}.nav-tabs-clean .nav-item .nav-link:hover{color:var(--primary-500)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--primary-500)}@media only screen and (max-width:420px){.panel .panel-hdr{font-size:.875rem;min-height:2.75rem}.panel .panel-hdr>:first-child{padding-left:.625rem}.panel .panel-hdr>:last-child{padding-right:.625rem}.panel .panel-hdr .panel-toolbar .btn-toolbar-master{margin-right:-.625rem}.panel .panel-container .panel-content:first-child{padding:.625rem}}@media print{.panel-fullscreen .page-breadcrumb,.panel-fullscreen .page-content .panel:not(.panel-fullscreen),.panel-fullscreen .subheader{display:none}.panel-fullscreen .h2,.panel-fullscreen .panel-container,.panel-fullscreen .panel-content,.panel-fullscreen .panel-hdr,.panel-fullscreen h2{border:none;padding:0!important}.panel-fullscreen .panel{margin:0}}.sortable-ghost{opacity:.4}.sortable-drag{cursor:move}[data-toggle=dropdown] .profile-image{width:2rem;height:auto}.notification-header{padding:1.5rem 1.5rem .5rem;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background:var(--bs-body-bg);font-size:.75rem;white-space:nowrap;margin-bottom:0}.notification-header .h4,.notification-header h4{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;font-size:1.25rem}.notification-header .h4 .small,.notification-header .h4 small,.notification-header h4 .small,.notification-header h4 small{font-size:.825rem;font-weight:300;margin-top:.25rem}.tab-notification{height:22.6875rem}.tab-notification .tab-pane{height:100%}.notification{padding:0;margin:0;list-style:none;position:relative}.notification li{position:relative;background:var(--bs-body-bg);padding:0;margin:0;border:0;border-radius:0}.notification li [data-bs-dismiss=alert]{position:absolute;right:0;top:0;padding:15px;background:transparent var(--bs-btn-close-bg) center/.7em auto no-repeat;visibility:hidden}.notification li:hover [data-bs-dismiss=alert]{visibility:visible}.notification li.unread{background:rgba(var(--bs-primary-rgb),.05)}.notification li.unread .name{font-weight:600}.notification li>:first-child{padding:.75rem 1.5rem;border-bottom:1px solid rgba(0,0,0,.06)}.notification li:hover>:first-child{text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(29,33,41,.03)),to(rgba(29,33,41,.04)));background-image:linear-gradient(rgba(29,33,41,.03),rgba(29,33,41,.04))}.notification li>:first-child:focus{text-decoration:none}.notification li>:first-child>span{position:relative}.notification li>:first-child>span>span{display:block}.notification li:last-child>a{border:0}.notification .name{color:var(--bs-body-color);font-weight:400;font-size:.825rem}.notification .msg-a,.notification .msg-b{color:var(--bs-body-color);text-overflow:ellipsis;overflow:hidden;white-space:nowrap;max-width:300px}.notification:has(*)+.notification-empty-msg{display:none}.notification:not(:has(*))+.notification-empty-msg{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:1.25rem;font-weight:300}.pattern-0,.set-colorblind-mode .alert-danger,.set-colorblind-mode .bg-danger,.set-colorblind-mode .btn-danger,.set-colorblind-mode .btn-outline-danger,.set-colorblind-mode [class*=bg-danger-]{background-size:10px 10px;background-image:linear-gradient(45deg,rgba(255,255,255,.07) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.07) 50%,rgba(255,255,255,.05) 75%,transparent 75%,transparent)}.pattern-1{background-size:5px 5px;background-image:linear-gradient(45deg,rgba(255,255,255,.04) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.04) 50%,rgba(255,255,255,.04) 75%,transparent 75%,transparent)}.pattern-2,.set-colorblind-mode .alert-primary,.set-colorblind-mode .bg-primary,.set-colorblind-mode .btn-outline-primary,.set-colorblind-mode .btn-primary,.set-colorblind-mode [class*=bg-primary-]{background-size:15px 15px;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,rgba(255,255,255,.2)),color-stop(50%,transparent),to(transparent));background-image:linear-gradient(rgba(255,255,255,.2) 50%,transparent 50%,transparent)}.pattern-3,.set-colorblind-mode .alert-success,.set-colorblind-mode .bg-success,.set-colorblind-mode .btn-outline-success,.set-colorblind-mode .btn-success,.set-colorblind-mode [class*=bg-success-]{background-size:15px 15px;background-image:-webkit-gradient(linear,left top,right top,color-stop(50%,rgba(255,255,255,.2)),color-stop(50%,transparent),to(transparent));background-image:linear-gradient(90deg,rgba(255,255,255,.2) 50%,transparent 50%,transparent)}.pattern-4,.set-colorblind-mode .alert-info,.set-colorblind-mode .bg-info,.set-colorblind-mode .btn-info,.set-colorblind-mode .btn-outline-info,.set-colorblind-mode [class*=bg-info-]{background-size:37px 37px;background-position:0 0,18.5px 18.5px;background-image:linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.2) 75%,rgba(255,255,255,.2)),linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.2) 75%,rgba(255,255,255,.2))}.pattern-5,.set-colorblind-mode .alert-warning,.set-colorblind-mode .bg-warning,.set-colorblind-mode .btn-outline-warning,.set-colorblind-mode .btn-warning,.set-colorblind-mode [class*=bg-warning-]{background-size:37px 37px;background-image:linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.2) 75%,rgba(255,255,255,.2)),linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.2) 75%,rgba(255,255,255,.2))}.set-high-contrast-mode[data-bs-theme=light]{--bs-body-color:#000;--input-placeholder-color:#000;--app-nav-link-color:#000;--app-nav-link-hover-color:#000;--app-nav-border-color:#000;--bs-primary-text-emphasis:#000;--bs-success-text-emphasis:#000;--bs-danger-text-emphasis:#000;--bs-warning-text-emphasis:#000;--bs-info-text-emphasis:#000;--bs-light-text-emphasis:#fff;--bs-dark-text-emphasis:#000;--bs-border-color:#b1b1b1;--app-layout-border-color:rgba(0, 0, 0, 0.17);--app-panel-border-color:#b1b1b1;--app-panel-border-bottom:#b1b1b1;--bs-info-border-color:#b1b1b1;--collapse-icon-border:#000;--row-grid-line-rgb:0,0,0;--row-grid-opacity:0.17}.set-high-contrast-mode[data-bs-theme=light] .panel.panel-icon .panel-toolbar .btn-panel .sa-icon{stroke:#000!important}.set-high-contrast-mode[data-bs-theme=light] .panel.panel-icon .panel-toolbar .btn-panel{--sa-icon-hover-fill-opacity:1}.set-high-contrast-mode[data-bs-theme=light] .primary-nav{--app-nav-link-active-color:#fff;--app-nav-item-active-indicator:#fff;--app-nav-item-active-bg:#000}.set-high-contrast-mode[data-bs-theme=light] .list-group{--bs-list-group-border-color:#b1b1b1}.set-high-contrast-mode[data-bs-theme=light] .chat-segment-get .chat-message{background:#000!important;color:#fff}.set-high-contrast-mode[data-bs-theme=light] table{--bs-table-border-color:#000}.set-high-contrast-mode[data-bs-theme=light] .sa-icon{--sa-icon-color:#000}.set-high-contrast-mode[data-bs-theme=light] .frame-heading,.set-high-contrast-mode[data-bs-theme=light] .text-muted{color:#000!important}.set-high-contrast-mode[data-bs-theme=light] .btn-default{--btn-color:#000;--btn-border-color:#000;--btn-hover-border-color:#000}.set-high-contrast-mode[data-bs-theme=light] [class*=" bg-opacity-"],.set-high-contrast-mode[data-bs-theme=light] [class^=bg-opacity-]{--bs-bg-opacity:1}.app-fob-lg{height:16.25rem;width:100%;border-radius:.625rem;border:1px dashed rgba(var(--info),1);background:rgba(var(--info),.1);position:relative}.app-fob-lg:not(.active){border-color:var(--bs-body-color);background:var(--bs-body-bg)}.app-fob-lg>div{-webkit-transition:all .5s ease-in-out;transition:all .5s ease-in-out}.app-fob-lg>:nth-child(1){position:absolute;height:20%;top:0;right:0;left:0;border-radius:.625rem .625rem 0 0;background:rgba(var(--bs-body-color-rgb),.15);display:block}.app-fob-lg>:nth-child(2){width:25%;background:rgba(var(--bs-body-color-rgb),.15);left:0;bottom:0;top:25%;position:absolute;border-radius:0 0 0 .625rem}.app-fob-lg>:nth-child(3){background:repeating-linear-gradient(-55deg,rgba(var(--bs-body-color-rgb),.05),rgba(var(--bs-body-color-rgb),.05) 2px,rgba(var(--bs-body-color-rgb),0) 2px,rgba(var(--bs-body-color-rgb),0) 6px);background-color:rgba(var(--bs-body-color-rgb),.15);width:70%;top:25%;right:0;bottom:0;position:absolute}.app-fob-lg[data-class^=set-header-fixed]>:nth-child(1){background:#f68bec}.app-fob-lg[data-class^=set-nav-full]>:nth-child(1){left:35%;border-radius:0 .625rem 0 0}.app-fob-lg[data-class^=set-nav-full]>:nth-child(2){border-radius:.625rem 0 0 .625rem;top:5%}.app-fob-lg[data-class^=set-nav-fixed]>:nth-child(2){background:#f68bec}.app-fob-lg[data-class^=set-nav-collapse]>:nth-child(1){background:rgba(0,0,0,.1)}.app-fob-lg[data-class^=set-nav-collapse]>:nth-child(2){top:14%;height:auto;bottom:14%;z-index:1;border-radius:0 .625rem .625rem 0;width:7%;background:rgba(var(--warning),.6)}.app-fob-lg[data-class^=set-nav-collapse]>:nth-child(3){width:auto;left:5%;border-radius:0 0 .625rem .625rem}.app-fob-lg[data-class^=set-nav-minified]>:nth-child(2){width:13%}.app-fob-lg[data-class^=set-nav-minified]>:nth-child(3){width:73%}.app-fob-showcase{overflow:hidden;border:none}.app-fob-showcase-text{margin-bottom:2rem;position:relative;padding:1.1rem 1rem 1rem;border:1px dashed var(--bs-border-color);border-radius:.625rem}.app-fob-showcase-text:after{content:attr(data-prefix);position:absolute;padding:.3125rem;border-radius:.3125rem;background:var(--bs-border-color);top:-.875rem;right:.625rem;color:var(--bs-body-color);font-size:.8125rem;line-height:.8125rem}.app-themes .clickable-boxes input[type=radio]{display:none}.app-themes .clickable-boxes{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-line-pack:start;align-content:flex-start;gap:.8125rem;padding:.5rem 0}.app-themes .clickable-boxes label{-webkit-box-flex:1;-ms-flex:1 1 calc(25% - .625rem);flex:1 1 calc(25% - .625rem);max-width:calc(25% - .625rem);text-align:center;background-color:#ddd;color:#333;line-height:4.04375rem;height:4.04375rem;border-radius:.25rem;cursor:pointer;-webkit-transition:background-color .3s,-webkit-transform .2s;transition:background-color .3s,-webkit-transform .2s;transition:background-color .3s,transform .2s;transition:background-color .3s,transform .2s,-webkit-transform .2s;font-size:.825rem;position:relative}.app-themes .clickable-boxes label::after{content:attr(data-prefix);position:absolute;padding:.25rem;border-radius:.25rem;background:#e9e9e9;bottom:.25rem;left:.25rem;color:#333;font-size:.66rem;line-height:.66rem}.app-themes .clickable-boxes input[type=radio]:checked+label{background-color:#4caf50;color:#fff;-webkit-transform:scale(1.05);transform:scale(1.05);outline:3px solid #156be1}.app-themes .clickable-boxes input[type=radio]:checked+label::after{background:#333;color:#e9e9e9}.set-header-fixed .app-fob-showcase :nth-child(1){background-color:rgba(var(--danger),.9)}.set-nav-full:not(.set-header-fixed) .app-fob-showcase :nth-child(1){left:30%;border-radius:0 .625rem 0 0}.set-nav-full:not(.set-header-fixed) .app-fob-showcase :nth-child(2){top:0;border-radius:.625rem 0 0 .625rem}.set-nav-full.set-nav-collapsed:not(.set-header-fixed) .app-fob-showcase :nth-child(1){left:0;border-radius:.625rem .625rem 0 0}.set-nav-full.set-nav-collapsed:not(.set-header-fixed) .app-fob-showcase :nth-child(2){top:0;background-color:rgba(var(--warning),.9);border-radius:0}.set-nav-full.set-nav-collapsed:not(.set-header-fixed) .app-fob-showcase :nth-child(3){left:0;right:0;width:auto}.set-nav-full.set-nav-fixed:not(.set-header-fixed) .app-fob-showcase :nth-child(2){background-color:rgba(var(--danger),.9)}.set-nav-fixed.set-header-fixed .app-fob-showcase :nth-child(2){background-color:rgba(var(--danger),.9)}.set-nav-full.set-nav-fixed.set-header-fixed .app-fob-showcase :nth-child(1){left:30%;border-radius:0 .625rem 0 0;background-color:rgba(var(--danger),.9)}.set-nav-full.set-nav-fixed.set-header-fixed .app-fob-showcase :nth-child(2){top:0;background-color:rgba(var(--danger),.9);border-radius:.625rem 0 0 .625rem}.set-header-fixed.set-nav-collapsed .app-fob-showcase :nth-child(1),.set-header-fixed.set-nav-full.set-nav-fixed.set-nav-collapsed .app-fob-showcase :nth-child(1),.set-nav-full.set-nav-collapsed .app-fob-showcase :nth-child(1){left:0}.set-header-fixed.set-nav-collapsed .app-fob-showcase :nth-child(2),.set-header-fixed.set-nav-full.set-nav-fixed.set-nav-collapsed .app-fob-showcase :nth-child(2),.set-nav-full.set-nav-collapsed .app-fob-showcase :nth-child(2){-webkit-transform:translate3d(-90%,0,0);transform:translate3d(-90%,0,0);-webkit-box-shadow:rgba(0,0,0,.1) 7px 0 6px 2px;box-shadow:rgba(0,0,0,.1) 7px 0 6px 2px;-webkit-animation:widthAnimation 4s ease-in-out 2 alternate;animation:widthAnimation 4s ease-in-out 2 alternate;z-index:1}.set-header-fixed.set-nav-collapsed .app-fob-showcase :nth-child(3),.set-header-fixed.set-nav-full.set-nav-fixed.set-nav-collapsed .app-fob-showcase :nth-child(3),.set-nav-full.set-nav-collapsed .app-fob-showcase :nth-child(3){left:0;right:0;width:auto;border-radius:0 0 .625rem .625rem}.set-header-fixed.set-nav-collapsed .app-fob-showcase :nth-child(2){background-color:rgba(var(--warning),.9)}@media only screen and (max-width:991.98px){.app-fob-showcase-text:after{content:"Mobile Preview"}.app-fob-lg>:nth-child(1)::before{content:"";position:absolute;top:calc(50% - .6rem);left:.5rem;width:1.7rem;height:1.2rem;background-color:rgba(var(--bs-body-color-rgb),.15);z-index:1;display:block;border-radius:.25rem}.app-fob-lg>:nth-child(2){display:none}.app-fob-lg>:nth-child(3){width:100%}.app-fob-showcase-text{width:60%!important;margin:0 auto 2rem}}.set-nav-fixed:not(.set-nav-full):not(.set-header-fixed) .primary-mod{border-color:rgba(var(--danger),.9);color:rgba(var(--danger),.9)}.set-nav-fixed:not(.set-nav-full):not(.set-header-fixed) .primary-mod:after{content:"Select an option";color:var(--bs-white);background:rgba(var(--danger),.9)}.mod-status{padding:.8rem 1rem .5rem;border:1px dashed var(--bs-border-color);position:relative;border-radius:.5rem;margin-bottom:2.5rem}.mod-status:first-of-type{margin-top:2rem}.mod-status:after{content:attr(data-prefix);position:absolute;padding:.3125rem;border-radius:.3125rem;background:var(--bs-border-color);top:-.875rem;right:.625rem;color:var(--bs-body-color);font-size:.8125rem;line-height:.8125rem}.reset-button{opacity:.75;-webkit-filter:grayscale(50%);filter:grayscale(50%)}.theme-active .reset-button,[class*=set-] .reset-button,[data-bs-theme=dark] .reset-button{opacity:1;-webkit-filter:grayscale(0);filter:grayscale(0)}.color-disp-demo tr:first-child td{height:100px;-webkit-box-shadow:inset 0 -5px 0 rgba(255,255,255,.8);box-shadow:inset 0 -5px 0 rgba(255,255,255,.8)}.color-disp-demo tr td{border:none;padding-top:.4375rem;padding-bottom:.4375rem}.color-disp-demo tr td:hover{-webkit-transform:scale(1.1);transform:scale(1.1);font-weight:500}.cr-c{width:1.3125rem;height:1.3125rem;display:block;border-radius:50%}.icon-demo{list-style:none;padding:0}.icon-demo li{border:1px solid #7f8995;padding:.625rem;display:inline-block;font-size:1.25rem;width:3.75rem;height:3.75rem;overflow:hidden;margin:0 .375rem 0 0;text-align:center;background:var(--bs-body-bg)}.icon-demo li:hover{-webkit-transform:scale(1.4);transform:scale(1.4)}pre code.hljs{border-radius:1rem}.show-codes code[class*=language-],.show-codes pre[class*=language-]{display:block!important}.container-demo{max-width:100%;width:100%}.bd-example{position:relative;padding:1rem 0}.bd-example-row-flex-cols .row{min-height:10rem;background-color:rgba(255,0,0,.1)}.bd-example-row .row>.col,.bd-example-row .row>[class^=col-]{padding-top:.75rem;padding-bottom:.75rem;background-color:rgba(86,61,124,.15);border:1px solid rgba(86,61,124,.2)}.bd-example-row .row+.row{margin-top:1rem}.bd-highlight{background-color:rgba(86,61,124,.2);border:1px solid rgba(86,61,124,.2)}.demo{margin:0}.demo>*{margin:0 .375rem 1rem 0!important}.demo.demo-no-mb>*{margin-bottom:0!important}.demo-v-spacing-lg>*+*,.demo-v-spacing-sm>*+*,.demo-v-spacing>*+*{margin-top:.875rem!important;margin-bottom:0!important}.demo-v-spacing-lg>*,.demo-v-spacing-sm>*,.demo-v-spacing>*{margin-bottom:0!important}.demo-v-spacing>*+*{margin-top:1rem!important}.demo-v-spacing-lg>*+*{margin-top:1.5rem!important}.demo-h-spacing>:not(last-child):not(only-child){margin-right:1rem!important}.frame-heading{font-size:.8125rem;margin-bottom:1rem;color:#a1a1a1;font-weight:500}.frame-heading .small,.frame-heading small{font-size:.8125rem;margin-bottom:.5rem}.frame-wrap{background:inherit;padding:0;margin-bottom:1.5rem}*>.frame-wrap:last-child{margin-bottom:0!important}.demo-window{position:relative;z-index:1;overflow:hidden;padding-top:1.4375rem;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.12);box-shadow:0 2px 10px rgba(0,0,0,.12);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.demo-window:before{content:"";position:absolute;top:0;right:0;left:0;z-index:3;height:1.4375rem;background:#e5e5e5}.demo-window:after{content:"";position:absolute;left:.625rem;background:#ccc;top:.375rem;z-index:4;width:.6875rem;height:.6875rem;border-radius:50%}.demo-window .demo-window-content{width:100%;background:rgba(255,255,255,.15)}.demo-window .demo-window-content img{display:block;width:100%}.demo-window .demo-window-content:before{content:"";position:absolute;left:1.625rem;background:#ccc;top:.375rem;z-index:4;width:.6875rem;height:.6875rem;border-radius:50%}.demo-window .demo-window-content:after{content:"";position:absolute;left:2.6875rem;background:#ccc;top:.375rem;z-index:4;width:.6875rem;height:.6875rem;border-radius:50%}.form-section{margin-bottom:1rem}.output-section{padding:1.5rem;background-color:var(--bs-body-bg);border-radius:8px;border:1px solid var(--bs-border-color)}.class-list{font-weight:700;color:var(--primary);padding:.75rem;background-color:var(--light-50);border-radius:4px;border-left:4px solid var(--primary-500)}.css-output{white-space:pre-wrap;background-color:var(--light-50);color:var(--bs-body-color);padding:.75rem;border-radius:4px;font-family:"Courier New",monospace;margin-top:10px;font-size:14px;opacity:.85}#displayTypeSection{display:none}#testDiv{padding:20px;color:#fff;border-radius:5px;text-align:center;min-height:60px;background-color:var(--info-500);font-weight:500;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-transition:all .3s ease;transition:all .3s ease}.breakpoint-indicator{display:inline-block;padding:2px 8px;border-radius:4px;margin-right:5px;font-size:12px;background:var(--dark-100);color:#fff}.breakpoint-indicator.active{background:var(--success-500)}.visual-breakpoint{font-size:13px;padding:2px 8px;border-radius:4px;background:var(--primary-500);color:#fff;margin-bottom:10px;display:inline-block}.option-card{border:1px solid var(--bs-border-color);border-radius:8px;padding:1.25rem;margin-bottom:1rem;background-color:var(--bs-body-bg)}.option-title{margin-bottom:.75rem;color:var(--dark);font-weight:500}.copy-button{position:absolute;top:10px;right:10px;background:var(--primary-100);border:none;border-radius:4px;padding:4px 10px;font-size:12px;color:var(--primary);cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.copy-button:hover{background:var(--primary-200)}.demo-container{margin-top:1rem;border:1px dashed var(--bs-border-color);padding:15px;border-radius:8px;position:relative;background:var(--bs-body-bg)}.demo-container::before{content:"Preview";position:absolute;top:-10px;left:10px;background:var(--bs-body-bg);padding:0 8px;font-size:12px;color:var(--secondary)}.current-breakpoint{background:var(--success-100);color:var(--success-700);padding:4px 10px;border-radius:4px;margin-bottom:10px;display:inline-block;font-size:14px;font-weight:500}.bp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}@media (max-width:576px){.bp-grid{grid-template-columns:repeat(2,1fr)}}.button{background-color:rgba(var(--primary),1);border:none;color:#fff;padding:.9375rem 1.25rem;text-align:center;text-decoration:none;display:inline-block;font-size:1rem;cursor:pointer;width:100%;font-weight:500;border-radius:.625rem}.button:hover{background-color:rgba(var(--primary),.9)}.button:active{scale:.98}.info-container{padding:1rem;border:1px dashed var(--bs-info-border-color,rgba(0,0,0,.1));border-radius:.625rem;margin-bottom:2rem;font-size:.875rem;background:var(--bs-info-bg,rgba(var(--warning),.1));color:var(--bs-info-color,var(--bs-body-color))}ol{margin:0;padding:0;margin-left:2.5rem}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#b8a6d3;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#77dfd4;--bs-info-text-emphasis:#7ac0f8;--bs-warning-text-emphasis:#ffda8d;--bs-danger-text-emphasis:#fe88bf;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#1b1524;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#062825;--bs-info-bg-subtle:#071e31;--bs-warning-bg-subtle:#33270d;--bs-danger-bg-subtle:#330b1e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#52406d;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#11796e;--bs-info-border-subtle:#145a92;--bs-warning-border-subtle:#997427;--bs-danger-border-subtle:#982259;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-headings-color:inherit;--bs-link-color:#b8a6d3;--bs-link-hover-color:#c6b8dc;--bs-code-color:#a7acb1;--bs-mark-color:#dee2e6;--bs-mark-bg:#ffda6a;--bs-form-select-indicator-color:#dee2e6;--bs-form-select-indicator:url("data:image/svg+xml,");--bs-form-switch-color:rgba(255, 255, 255, 0.25);--bs-form-switch-bg-image:url("data:image/svg+xml,");--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f;--bs-accordion-icon-color:#b8a6d3;--bs-accordion-icon-active-color:#b8a6d3;--bs-accordion-button-icon:url("data:image/svg+xml,");--bs-accordion-button-active-icon:url("data:image/svg+xml,");--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--app-nav-link-color:#adb5bd;--app-nav-link-hover-color:#59adff;--app-nav-link-active-color:#fff;--app-nav-title-color:#6c757d;--app-nav-border-color:#495057;--app-nav-item-hover-bg:rgba(255, 255, 255, 0.05);--app-nav-item-active-bg:rgba(255, 255, 255, 0.05);--app-nav-item-active-indicator:rgba(255, 255, 255, 0.9);--app-nav-collapse-sign-color:var(--app-nav-link-color);--app-header-background:#272b30;--app-nav-background:var(--app-header-background);--app-drawer-background:var(--app-header-background);--app-layout-border-color:var(--bs-border-color);--app-content-background:#363c41;--app-panel-bg:var(--app-header-background);--app-panel-border-color:var(--bs-border-color);--app-panel-border-bottom:var(--bs-border-color);--panel-tag-background:rgb(43 68 62);--panel-drag-bg:var(--app-content-background);--bs-input-bg:#2b3035;--bs-input-border-color:#495057;--bs-input-color:var(--bs-body-color);--bs-input-focus-bg:#2b3035;--bs-input-focus-border-color:#86b7fe;--bs-input-focus-color:var(--bs-emphasis-color);--app-scrollbar-bg:var(--bs-tertiary-bg);--app-scrollbar-thumb:var(--bs-secondary-bg);--app-scrollbar-thumb-hover:var(--bs-border-color);--app-card-bg:var(--bs-tertiary-bg);--app-dropdown-bg:var(--bs-tertiary-bg);--app-dropdown-border-color:var(--bs-border-color);--app-dropdown-link-color:var(--bs-body-color);--app-dropdown-link-hover-bg:var(--bs-secondary-bg);--app-dropdown-link-hover-color:var(--bs-emphasis-color);--app-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.25);--app-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.3);--app-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.35);--page-breadcrumbs-text-shadow:#000;--page-subheader-text-shadow:#000;--page-subheader-color:var(--bs-emphasis-color);--bs-info-bg:rgb(69 59 31);--bs-info-border-color:rgb(147 126 70);--btn-system-bg-opacity:0.07;--collapse-icon-border:rgba(255, 255, 255, 0.3);--collapse-icon-border-hover:rgba(var(--primary), 0.8);--collapse-icon-width:2.5rem;--collapse-icon-height:1.8rem;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254}[data-bs-theme=dark] .dropdown-menu{--bs-dropdown-link-hover-color:var(--app-nav-link-hover-color)}[data-bs-theme=dark] #panelDeleteModal .modal-content{border-color:var(--bs-border-color)}[data-bs-theme=dark] .grid-background{--background-color:#333333;--background-image-color:255,255,255}[data-bs-theme=dark] .grid-background-dark{--background-color:#ffffff;--background-image-color:0,0,0}[data-bs-theme=dark] .form-check-input{--bs-form-check-bg:#727374}[data-bs-theme=dark] .pagination{--bs-pagination-focus-color:var(--bs-emphasis-color);--bs-pagination-color:var(--bs-emphasis-color)}[data-bs-theme=dark] .app-logo::before{background-color:var(--bs-body-bg)}[data-bs-theme=dark] .app-logo>svg{--logo-color:var(--primary-500);color:#e1e3e5}[data-bs-theme=dark] .card{--bs-card-bg:var(--app-panel-bg)}[data-bs-theme=dark] .dropdown-menu{--bs-dropdown-bg:#373b3f;border:1px solid var(--bs-border-color)}[data-bs-theme=dark] .accordion-button{--bs-accordion-active-bg:rgba(var(--white), 0.04)}[data-bs-theme=dark] .accordion-button::after{-webkit-filter:invert(90%) hue-rotate(180deg) brightness(1.2);filter:invert(90%) hue-rotate(180deg) brightness(1.2)}[data-bs-theme=dark] .nav-tabs{--bs-nav-tabs-link-active-bg:var(--app-panel-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) transparent}[data-bs-theme=dark] .tooltip{--bs-tooltip-color:#fff}[data-bs-theme=dark] .modal-content{--bs-modal-bg:#373b3f;--bs-modal-border-color:var(--bs-border-color);--bs-modal-header-color:#fff}[data-bs-theme=dark] .inverse-color{-webkit-filter:invert(90%) hue-rotate(180deg) brightness(1.2);filter:invert(90%) hue-rotate(180deg) brightness(1.2)}[data-bs-theme=dark] .popover:not([class*=primary-],[class*=secondary-],[class*=success-],[class*=danger-],[class*=warning-],[class*=info-],[class*=dark-],[class*=light-]){--bs-popover-border-color:rgba(0, 0, 0, 0.5);--bs-popover-header-color:var(--bs-light);--bs-popover-bg:rgba(0, 0, 0, 0.5);--bs-popover-arrow-border:rgba(0, 0, 0, 0.5)}[data-bs-theme=dark] .btn-outline-secondary{--bs-btn-color:var(--bs-body-color)}[data-bs-theme=dark] .btn-default{--btn-background-color:var(--bs-gray-300);--btn-default-bg-top:rgba(var(--bs-body-bg-rgb), 0.85);--btn-default-bg-bottom:rgba(var(--bs-body-bg-rgb), 1);--btn-border-color:var(--fusion-700);--btn-hover-border-color:var(--fusion-900);--btn-color:rgba(var(--bs-light-rgb), 0.85);--btn-hover-color:rgba(var(--bs-light-rgb), 1);--btn-focus-color:rgba(var(--bs-light-rgb), 1)}.set-rtl{--direction:rtl;direction:var(--direction)}[dir=rtl]{--direction:rtl;direction:var(--direction)}@-webkit-keyframes opaque{0%{opacity:0}to{opacity:1}}@keyframes opaque{0%{opacity:0}to{opacity:1}}@-webkit-keyframes resizeanim{0%,to{opacity:0}}@keyframes resizeanim{0%,to{opacity:0}}.apexcharts-canvas{position:relative;direction:ltr!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.apexcharts-canvas ::-webkit-scrollbar{-webkit-appearance:none;width:6px}.apexcharts-canvas ::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(0,0,0,.5);-webkit-box-shadow:0 0 1px rgba(255,255,255,.5);box-shadow:0 0 1px rgba(255,255,255,.5)}.apexcharts-inner{position:relative}.apexcharts-text tspan{font-family:inherit}.legend-mouseover-inactive circle,.legend-mouseover-inactive line,.legend-mouseover-inactive path,.legend-mouseover-inactive rect,.legend-mouseover-inactive text.apexcharts-yaxis-label,.legend-mouseover-inactive text.apexcharts-yaxis-title-text,rect.legend-mouseover-inactive{-webkit-transition:.15s ease all;transition:.15s ease all;opacity:.2}.apexcharts-legend-text{padding-left:15px;margin-left:-15px}.apexcharts-series-collapsed{opacity:0}.apexcharts-tooltip{border-radius:5px;-webkit-box-shadow:2px 2px 6px -4px #999;box-shadow:2px 2px 6px -4px #999;cursor:default;font-size:14px;inset-block-start:62px;opacity:0;pointer-events:none;position:absolute;top:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden;white-space:nowrap;z-index:12;-webkit-transition:.15s ease all;transition:.15s ease all}.apexcharts-tooltip.apexcharts-active{opacity:1;-webkit-transition:.15s ease all;transition:.15s ease all}[data-bs-theme=light] .apexcharts-tooltip{border:1px solid #e3e3e3;background:rgba(255,255,255,.96)}[data-bs-theme=dark] .apexcharts-tooltip{color:#fff;background:rgba(30,30,30,.9);-webkit-box-shadow:2px 2px 6px -4px #000;box-shadow:2px 2px 6px -4px #000}.apexcharts-tooltip *{font-family:inherit}.apexcharts-tooltip-title{padding:6px;font-size:15px;margin-bottom:4px}[data-bs-theme=light] .apexcharts-tooltip .apexcharts-tooltip-title{background:#eceff1;border-bottom:1px solid #ddd}[data-bs-theme=dark] .apexcharts-tooltip .apexcharts-tooltip-title{background:rgba(0,0,0,.7)!important;border-bottom:1px solid #000!important}.apexcharts-tooltip-text-goals-value,.apexcharts-tooltip-text-y-value,.apexcharts-tooltip-text-z-value{display:inline-block;margin-left:5px;font-weight:600}.apexcharts-tooltip-text-goals-label:empty,.apexcharts-tooltip-text-goals-value:empty,.apexcharts-tooltip-text-y-label:empty,.apexcharts-tooltip-text-y-value:empty,.apexcharts-tooltip-text-z-value:empty,.apexcharts-tooltip-title:empty{display:none}.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value{padding:6px 0 5px}.apexcharts-tooltip-goals-group,.apexcharts-tooltip-text-goals-label,.apexcharts-tooltip-text-goals-value{display:-webkit-box;display:-ms-flexbox;display:flex}.apexcharts-tooltip-text-goals-label:not(:empty),.apexcharts-tooltip-text-goals-value:not(:empty){margin-top:-6px}.apexcharts-tooltip-marker{width:12px;height:12px;position:relative;background-color:currentColor;margin-right:10px;border-radius:50%}.apexcharts-tooltip-series-group{padding:0 10px;display:none;text-align:left;-webkit-box-pack:left;-ms-flex-pack:left;justify-content:left;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker{opacity:1}.apexcharts-tooltip-series-group.apexcharts-active,.apexcharts-tooltip-series-group:last-child{padding-bottom:4px}.apexcharts-tooltip-y-group{padding:6px 0 5px}.apexcharts-custom-tooltip,.apexcharts-tooltip-box{padding:4px 8px}.apexcharts-tooltip-boxPlot{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.apexcharts-tooltip-box>div{margin:4px 0}.apexcharts-tooltip-box span.value{font-weight:700}.apexcharts-tooltip-rangebar{padding:5px 8px}.apexcharts-tooltip-rangebar .category{font-weight:600;color:#777}.apexcharts-tooltip-rangebar .series-name{font-weight:700;display:block;margin-bottom:5px}.apexcharts-xaxistooltip,.apexcharts-yaxistooltip{opacity:0;pointer-events:none;color:#373d3f;font-size:13px;text-align:center;border-radius:2px;position:absolute;z-index:10;background:#eceff1;border:1px solid #90a4ae}.apexcharts-xaxistooltip{padding:9px 10px;-webkit-transition:.15s ease all;transition:.15s ease all}[data-bs-theme=dark] .apexcharts-xaxistooltip{background:rgba(0,0,0,.7)!important;border:1px solid rgba(0,0,0,.5)!important;color:#fff!important}.apexcharts-xaxistooltip:after,.apexcharts-xaxistooltip:before{left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.apexcharts-xaxistooltip:after{border-color:transparent;border-width:6px;margin-left:-6px}.apexcharts-xaxistooltip:before{border-color:transparent;border-width:7px;margin-left:-7px}.apexcharts-xaxistooltip-bottom:after,.apexcharts-xaxistooltip-bottom:before{bottom:100%}.apexcharts-xaxistooltip-top:after,.apexcharts-xaxistooltip-top:before{top:100%}.apexcharts-xaxistooltip-bottom:after{border-bottom-color:#eceff1}.apexcharts-xaxistooltip-bottom:before{border-bottom-color:#90a4ae}[data-bs-theme=dark] .apexcharts-xaxistooltip-bottom:after,[data-bs-theme=dark] .apexcharts-xaxistooltip-bottom:before{border-bottom-color:rgba(0,0,0,.5)}.apexcharts-xaxistooltip-top:after{border-top-color:#eceff1}.apexcharts-xaxistooltip-top:before{border-top-color:#90a4ae}[data-bs-theme=dark] .apexcharts-xaxistooltip-top:after,[data-bs-theme=dark] .apexcharts-xaxistooltip-top:before{border-top-color:rgba(0,0,0,.5)}.apexcharts-xaxistooltip.apexcharts-active{opacity:1;-webkit-transition:.15s ease all;transition:.15s ease all}.apexcharts-yaxistooltip{padding:4px 10px}[data-bs-theme=dark] .apexcharts-yaxistooltip{background:rgba(0,0,0,.7)!important;border:1px solid rgba(0,0,0,.5)!important;color:#fff!important}.apexcharts-yaxistooltip:after,.apexcharts-yaxistooltip:before{top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.apexcharts-yaxistooltip:after{border-color:transparent;border-width:6px;margin-top:-6px}.apexcharts-yaxistooltip:before{border-color:transparent;border-width:7px;margin-top:-7px}.apexcharts-yaxistooltip-left:after,.apexcharts-yaxistooltip-left:before{left:100%}.apexcharts-yaxistooltip-right:after,.apexcharts-yaxistooltip-right:before{right:100%}.apexcharts-yaxistooltip-left:after{border-left-color:#eceff1}.apexcharts-yaxistooltip-left:before{border-left-color:#90a4ae}[data-bs-theme=dark] .apexcharts-yaxistooltip-left:after,[data-bs-theme=dark] .apexcharts-yaxistooltip-left:before{border-left-color:rgba(0,0,0,.5)}.apexcharts-yaxistooltip-right:after{border-right-color:#eceff1}.apexcharts-yaxistooltip-right:before{border-right-color:#90a4ae}[data-bs-theme=dark] .apexcharts-yaxistooltip-right:after,[data-bs-theme=dark] .apexcharts-yaxistooltip-right:before{border-right-color:rgba(0,0,0,.5)}.apexcharts-yaxistooltip.apexcharts-active{opacity:1}.apexcharts-yaxistooltip-hidden{display:none}.apexcharts-xcrosshairs,.apexcharts-ycrosshairs{pointer-events:none;opacity:0;-webkit-transition:.15s ease all;transition:.15s ease all}.apexcharts-xcrosshairs.apexcharts-active,.apexcharts-ycrosshairs.apexcharts-active{opacity:1;-webkit-transition:.15s ease all;transition:.15s ease all}.apexcharts-ycrosshairs-hidden{opacity:0}.apexcharts-selection-rect{cursor:move}.svg_select_shape{stroke-width:1;stroke-dasharray:10 10;stroke:#000;stroke-opacity:.1;pointer-events:none;fill:none}.svg_select_handle{stroke-width:3;stroke:#000;fill:none}.svg_select_handle_r{cursor:e-resize}.svg_select_handle_l{cursor:w-resize}.apexcharts-svg.apexcharts-zoomable.hovering-zoom{cursor:crosshair}.apexcharts-svg.apexcharts-zoomable.hovering-pan{cursor:move}.apexcharts-menu-icon svg,.apexcharts-reset-icon svg,.apexcharts-zoom-icon svg,.apexcharts-zoomin-icon svg,.apexcharts-zoomout-icon svg{fill:#6e8192}.apexcharts-selection-icon svg{fill:#444}[data-bs-theme=dark] .apexcharts-menu-icon svg,[data-bs-theme=dark] .apexcharts-pan-icon svg,[data-bs-theme=dark] .apexcharts-reset-icon svg,[data-bs-theme=dark] .apexcharts-selection-icon svg,[data-bs-theme=dark] .apexcharts-toolbar-custom-icon svg,[data-bs-theme=dark] .apexcharts-zoom-icon svg,[data-bs-theme=dark] .apexcharts-zoomin-icon svg,[data-bs-theme=dark] .apexcharts-zoomout-icon svg{fill:#f3f4f5}.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg{fill:#008ffb}[data-bs-theme=light] .apexcharts-menu-icon:hover svg,[data-bs-theme=light] .apexcharts-reset-icon:hover svg,[data-bs-theme=light] .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,[data-bs-theme=light] .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,[data-bs-theme=light] .apexcharts-zoomin-icon:hover svg,[data-bs-theme=light] .apexcharts-zoomout-icon:hover svg{fill:#333}.apexcharts-menu-icon,.apexcharts-selection-icon{position:relative}.apexcharts-pan-icon.apexcharts-selected svg{stroke:var(--primary-500)}.apexcharts-pan-icon:not(.apexcharts-selected):hover svg{stroke:var(--primary-500)}.apexcharts-toolbar{position:absolute;z-index:11;max-width:176px;text-align:right;border-radius:3px;padding:0 6px 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:end;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:.25rem;right:0!important}.apexcharts-toolbar .sa-icon{--sa-icon-color:#333;--sa-icon-size:0.85rem}[data-bs-theme=dark] .apexcharts-toolbar .sa-icon{--sa-icon-color:#fff;stroke-width:2px}.apexcharts-menu{--bs-dropdown-min-width:124px;--bs-dropdown-font-size:0.85rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:var(--bs-border-radius);--bs-dropdown-border-width:var(--bs-border-width);background:var(--bs-body-bg);color:var(--bs-body-color);font-size:var(--bs-dropdown-font-size);position:absolute;top:100%;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);right:10px;opacity:0;min-width:var(--bs-dropdown-min-width);-webkit-transition:.15s ease all;transition:.15s ease all;pointer-events:none}.apexcharts-menu.apexcharts-menu-open{opacity:1;pointer-events:all;-webkit-transition:.15s ease all;transition:.15s ease all}.apexcharts-menu-item{padding:.5rem .75rem;font-size:.825rem;cursor:pointer}[data-bs-theme=light] .apexcharts-menu-item:hover{background:var(--app-nav-item-hover-bg);color:var(--primary-500)}[data-bs-theme=dark] .apexcharts-menu{background:rgba(0,0,0,.7)!important;color:#fff!important}@media screen and (min-width:768px){.apexcharts-canvas:hover .apexcharts-toolbar{opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex}}.apexcharts-canvas .apexcharts-element-hidden,.apexcharts-datalabel.apexcharts-element-hidden,.apexcharts-hide .apexcharts-series-points{opacity:0;display:none}.apexcharts-hidden-element-shown{opacity:1;-webkit-transition:.25s ease all;transition:.25s ease all}.apexcharts-datalabel,.apexcharts-datalabel-label,.apexcharts-datalabel-value,.apexcharts-datalabels,.apexcharts-pie-label{cursor:default;pointer-events:none}.apexcharts-pie-label-delay{opacity:0;-webkit-animation-name:opaque;animation-name:opaque;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease;animation-timing-function:ease}.apexcharts-radialbar-label{cursor:pointer}.apexcharts-annotation-rect,.apexcharts-area-series .apexcharts-area,.apexcharts-gridline,.apexcharts-line,.apexcharts-point-annotation-label,.apexcharts-radar-series path:not(.apexcharts-marker),.apexcharts-radar-series polygon,.apexcharts-toolbar svg,.apexcharts-tooltip .apexcharts-marker,.apexcharts-xaxis-annotation-label,.apexcharts-yaxis-annotation-label,.apexcharts-zoom-rect,.no-pointer-events{pointer-events:none}.apexcharts-tooltip-active .apexcharts-marker{-webkit-transition:.15s ease all;transition:.15s ease all}.resize-triggers{-webkit-animation:1ms resizeanim;animation:1ms resizeanim;visibility:hidden;opacity:0;height:100%;width:100%;overflow:hidden}.contract-trigger:before,.resize-triggers,.resize-triggers>div{content:" ";display:block;position:absolute;top:0;left:0}.resize-triggers>div{height:100%;width:100%;background:#eee;overflow:auto}.contract-trigger:before{overflow:hidden;width:200%;height:200%}.apexcharts-bar-goals-markers{pointer-events:none}.apexcharts-bar-shadows{pointer-events:none}.apexcharts-rangebar-goals-markers{pointer-events:none}.hero-section{min-height:100vh;background:linear-gradient(45deg,var(--bs-gray-800),var(--bs-gray-700));background:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff;position:relative}#net{background:0 0!important;position:relative;z-index:1;width:100vw;height:100vh;position:absolute;z-index:0}#net canvas{position:absolute;top:0;left:0;z-index:-1}.divider{position:relative;text-align:center;margin:1.5rem 0}.divider::after,.divider::before{content:"";-webkit-box-flex:1;-ms-flex:1;flex:1;border-bottom:1px solid #dee2e6;position:absolute;top:50%;width:45%}.divider::before{right:55%}.divider::after{left:55%}.btn-apple{background-color:#000;color:#fff;font-weight:600}.btn-apple:hover{background-color:#1a1a1a;color:#fff}pre{border-radius:.5rem;white-space:pre-wrap;word-wrap:break-word}pre code.hljs{padding:1.5em;font-size:.875rem}.hljs-comment{color:#6d9d9d}.code-example{margin:1.5rem 0}.concept-section{margin-bottom:3rem}.concept-title.with-lead{font-size:2.5rem;font-weight:300}.sidebar{position:sticky;top:1rem}.main-content{line-height:1.6}.concept-title{color:var(--secondary-500);font-size:1rem;font-weight:600}.example-output{background-color:#e9ecef;padding:1rem;border-radius:.5rem;margin-top:.5rem}.pro-tip{background-color:rgba(var(--bs-success-rgb),.2);border-left:4px solid var(--bs-success-border-subtle,--success-500);padding:1rem;margin:1rem 0}.warning{background-color:var(--bs-warning-bg-subtle,--warning-100);border-left:4px solid var(--bs-warning-border-subtle,--warning-700);padding:1rem;margin:1rem 0}.demo-sidebar a{display:block;padding:.25rem 0;color:var(--bs-gray-900)}.demo-sidebar a:hover{color:var(--primary-500)}.sidebar{position:sticky;top:20px;-ms-flex-item-align:start;align-self:flex-start;max-height:calc(100vh - 40px);overflow-y:auto;padding:15px 0}.sidebar ul{list-style:none;padding-left:0}.sidebar a{color:#0d6efd;text-decoration:none;display:block;padding:8px 0}.sidebar a:hover{text-decoration:underline;color:#0a58ca}@media (max-width:991px){.sidebar{position:static;top:auto;max-height:none;padding:15px}}.tip-box{background-color:#e6f7ff;border-left:4px solid #1890ff;padding:15px;margin:20px 0;border-radius:4px}.build-notes{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:.5rem}.build-notes>li{padding-left:3rem;position:relative}.build-notes>li>.badge{position:absolute;left:0}:root{--fc-border-color:var(--bs-border-color)}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-popover{position:absolute;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.15);box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:2px 4px}.fc-rtl .fc-popover .fc-header{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{cursor:pointer;opacity:.65;font-size:1.1em}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg,.fc-bgevent-skeleton,.fc-highlight-skeleton,.fc-mirror-skeleton{position:absolute;top:0;left:0;right:0}.fc-bg{bottom:0}.fc-bg table{height:100%}.fc table{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]{cursor:pointer}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-mirror-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-mirror-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-mirror-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-mirror-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.4;border-radius:3px;border:1px solid var(--primary-300);background:inherit}.fc-event,.fc-event-dot{background-color:var(--primary-500)}.fc-event,.fc-event:hover{color:inherit;text-decoration:none}.fc-event.fc-draggable,.fc-event[href]{cursor:pointer}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4}.fc-event .fc-resizer{display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-event.fc-dragging.fc-selected{-webkit-box-shadow:0 2px 7px rgba(0,0,0,.3);box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event.fc-dragging:not(.fc-selected){opacity:.75}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-mirror-skeleton tr:first-child>td>.fc-day-grid-event{margin-top:0}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}.fc .fc-popover-header{padding:.5rem;background:#efefef;border-bottom-right-radius:0;border-bottom-left-radius:0}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:.5rem}.fc-daygrid-dot-event .fc-event-title{font-weight:500}@font-face{font-family:fcicons;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype");font-weight:400;font-style:normal}.fc-icon{font-family:fcicons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fc-icon-chevron-left:before{content:"\e900"}.fc-icon-chevron-right:before{content:"\e901"}.fc-icon-chevrons-left:before{content:"\e902"}.fc-icon-chevrons-right:before{content:"\e903"}.fc-icon-minus-square:before{content:"\e904"}.fc-icon-plus-square:before{content:"\e905"}.fc-icon-x:before{content:"\e906"}.fc-icon{display:inline-block;width:1em;height:1em;text-align:center;vertical-align:middle}.fc-button{border-radius:0;overflow:visible;text-transform:none;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}.fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc-button{-webkit-appearance:button}.fc-button:not(:disabled){cursor:pointer}.fc-button::-moz-focus-inner{padding:0;border-style:none}.fc-button{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc-button:hover{color:#212529;text-decoration:none}.fc-button:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(44,62,80,.25);box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc-button:disabled{opacity:.65}.fc-button-primary{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.fc-button-primary:hover{color:#fff;background-color:#1e2b37;border-color:#1a252f}.fc-button-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:disabled{color:#fff;background-color:#2c3e50;border-color:#2c3e50}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{color:#fff;background-color:#1a252f;border-color:#151e27}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{font-size:1.25em!important}.fc-button-group{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.fc-button-group>.fc-button{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.fc-button-group>.fc-button:hover{z-index:1}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus{z-index:1}.fc-button-group>.fc-button:not(:first-child){margin-left:-1px}.fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-button-group>.fc-button:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.fc-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-toolbar .h2,.fc-toolbar h2{font-size:1.75em;margin:0}.fc-view-container{position:relative}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}@media print{.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc-event .fc-resizer{display:none}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-highlight-container,.fc-highlight-skeleton,.fc-mirror-container,.fc-mirror-skeleton{display:none}.fc tbody .fc-row{height:auto!important;min-height:0!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-popover{display:none}.fc-time-grid{min-height:0!important}.fc-timeGrid-view .fc-axis{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-end:after{content:"..."}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important}.fc button,.fc-button-group{display:none}}.fc-dayGridDay-view .fc-content-skeleton,.fc-dayGridWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-dayGrid-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-dayGrid-view .fc-day-number,.fc-dayGrid-view .fc-week-number{padding:2px}.fc-dayGrid-view th.fc-day-number,.fc-dayGrid-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px 0}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-dayGrid-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-dayGrid-view td.fc-week-number{text-align:center}.fc-dayGrid-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt{float:right}.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee}.fc-timeGrid-view .fc-day-grid{position:relative;z-index:2}.fc-timeGrid-view .fc-day-grid .fc-row{min-height:3em}.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{position:relative;z-index:3}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-mirror-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight-container{position:relative}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-time-grid-event{margin-bottom:1px}.fc-time-grid-event-inset{-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.fc-time-grid-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-time-grid-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event .fc-content{overflow:hidden;max-height:100%}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:" - "}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc.fc-bootstrap a{text-decoration:none}.fc.fc-bootstrap a[data-goto]:hover{text-decoration:underline}.fc-bootstrap hr.fc-divider{border-color:inherit}.fc-bootstrap .fc-today.alert{border-radius:0}.fc-bootstrap a.fc-event:not([href]):not([tabindex]){color:#fff}.fc-bootstrap .fc-popover.card{position:absolute}.fc-bootstrap .fc-popover .card-body{padding:0}.fc-bootstrap .fc-time-grid .fc-slats table{background:0 0}.fc-day-grid-event .fc-time{display:block}.fc-day-grid-event .fc-content{padding:.25rem .5rem}.fc-popover .fc-header{padding:.5rem .75rem}.fc-more-popover .fc-event-container{padding:.5rem}.fc-popover .fc-header .fc-title{font-weight:700}.fc-toolbar .h2,.fc-toolbar h2{font-size:1rem;font-weight:500;text-transform:uppercase}.fc-event,.fc-event-dot{background:0 0;text-align:left}.fc-event{border:1px solid rgba(156,153,161,.1882352941);padding:.25rem .5rem}.fc-day-top.fc-other-month{opacity:1}.fc-other-month{background-image:linear-gradient(135deg,rgba(0,0,0,.02) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.02) 50%,rgba(0,0,0,.02) 75%,transparent 75%,transparent);background-color:#fafcfd;background-size:1rem 1rem}.fc-head-container thead tr{background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f2f2f2),to(#fafafa));background-image:linear-gradient(to top,#f2f2f2 0,#fafafa 100%)}.fc .fc-non-business{--fc-non-business-color:transparent}.fc-day-other{background-image:linear-gradient(135deg,rgba(var(--bs-body-color-rgb),.02) 25%,transparent 25%,transparent 50%,rgba(var(--bs-body-color-rgb),.02) 50%,rgba(var(--bs-body-color-rgb),.02) 75%,transparent 75%,transparent);background-color:rgba(var(--bs-primary-rgb),.05);background-size:1rem 1rem}.table-calendar .fc-scrollgrid-section-body td{padding:0!important;border:1px solid var(--bs-border-color)!important}.fc .fc-toolbar-title{font-size:1rem;font-weight:600}.fc-daygrid-block-event .fc-event-time{font-weight:500}.fc-theme-standard a:not([href]){overflow:hidden;color:var(--bs-body-color)}thead[role=presentation] .fc-scrollgrid-sync-inner{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,rgba(var(--bs-body-color-rgb),.02)),to(rgba(var(--bs-body-color-rgb),.05)));background-image:linear-gradient(to top,rgba(var(--bs-body-color-rgb),.02) 0,rgba(var(--bs-body-color-rgb),.05) 100%)}.fc table thead th{padding:0!important}.fc-daygrid-dot-event{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fc .fc-daygrid-event{border-color:var(--bs-border-color)!important}.fc-daygrid-event-dot,.fc-event-time{display:inline-block;margin-right:.25rem;margin-left:0}.fc-event-title{-webkit-box-flex:1;-ms-flex:1 0 100%;flex:1 0 100%;margin-top:0}@media only screen and (max-width:768px){.fc-day-grid-event .fc-time{display:inline}.fc-bootstrap:not(.fc-reset-order) .fc-toolbar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fc-bootstrap:not(.fc-reset-order) .fc-toolbar .h2,.fc-bootstrap:not(.fc-reset-order) .fc-toolbar h2{font-size:1.125rem;font-weight:500}.fc-bootstrap:not(.fc-reset-order) .fc-toolbar .fc-left{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.fc-bootstrap:not(.fc-reset-order) .fc-toolbar .fc-right{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.fc-bootstrap:not(.fc-reset-order) .fc-toolbar .fc-center{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.fc-bootstrap:not(.fc-reset-order) .fc-toolbar>div:not(:empty):not(:first-child){margin-top:.5rem}}.fc-event-tooltip .tooltip-title{font-weight:700;margin-bottom:5px}.fc-event-tooltip .tooltip-desc{margin-bottom:5px;font-size:.9em}.fc-event-tooltip .tooltip-location,.fc-event-tooltip .tooltip-time{font-size:.85em;color:rgba(255,255,255,.9)}@media print{.app-breadcrumb,.btn-group,.col-md-3,.subheader-title .small,.subheader-title small,footer,header,nav{display:none!important}.col-md-9{width:100%!important}.fc-header-toolbar{margin-bottom:.5cm!important}.card{border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.card-body{padding:0!important}.fc-view-harness{height:auto!important}}svg{-ms-touch-action:none;touch-action:none}.jvm-zoomin,.jvm-zoomout,image,text{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jvm-container{-ms-touch-action:none;touch-action:none;position:relative;overflow:hidden;height:100%;width:100%}.jvm-tooltip{border-radius:3px;background-color:#5c5cff;font-family:inherit;font-size:.825rem;-webkit-box-shadow:1px 2px 12px rgba(0,0,0,.2);box-shadow:1px 2px 12px rgba(0,0,0,.2);padding:3px 5px;white-space:nowrap;position:absolute;display:none;color:#fff}.jvm-tooltip.active{display:block}.jvm-zoom-btn{border-radius:3px;background-color:#292929;padding:3px;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;line-height:10px;cursor:pointer;color:#fff;height:15px;width:15px;left:10px}.jvm-zoom-btn.jvm-zoomout{top:30px}.jvm-zoom-btn.jvm-zoomin{top:0}.jvm-series-container{right:15px;position:absolute}.jvm-series-container.jvm-series-h{bottom:15px}.jvm-series-container.jvm-series-v{top:15px}.jvm-series-container .jvm-legend{background-color:#fff;border:1px solid #dee2e6;margin-left:.75rem;border-radius:.25rem;border-color:#dee2e6;padding:.6rem;-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);float:left}.jvm-series-container .jvm-legend .jvm-legend-title{line-height:1;border-bottom:1px solid #dee2e6;padding-bottom:.5rem;margin-bottom:.575rem;text-align:left}.jvm-series-container .jvm-legend .jvm-legend-inner{overflow:hidden}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick{overflow:hidden;min-width:40px}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick:not(:first-child){margin-top:.575rem}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick .jvm-legend-tick-sample{border-radius:4px;margin-right:.65rem;height:16px;width:16px;float:left}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick .jvm-legend-tick-text{font-size:12px;text-align:center;float:left}.jvm-zoom-btn{width:1.6rem;height:1.6rem;text-align:center;font-size:1.2rem;font-weight:700;border-radius:3px;background-image:-webkit-gradient(linear,left bottom,left top,from(#f5f5f5),to(#f1f1f1));background-image:linear-gradient(to top,#f5f5f5,#f1f1f1);color:#444;border:1px solid rgba(0,0,0,.1);-webkit-box-shadow:none;box-shadow:none;left:0;top:0;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.jvm-zoomout{top:1rem}.p-0 .jvm-zoomin,.p-0 .jvm-zoomout{left:1rem;top:1rem}.p-0 .jvm-zoomout{top:3rem}.jvm-bg-ocean{background-color:#eafeff}[data-bs-theme=dark] .jvm-bg-ocean{background-color:#374344}.jvm-line[animation=true]{-webkit-animation:jvm-line-animation 10s linear forwards infinite;animation:jvm-line-animation 10s linear forwards infinite}@-webkit-keyframes jvm-line-animation{from{stroke-dashoffset:250}}@keyframes jvm-line-animation{from{stroke-dashoffset:250}}:root{--section-padding:5rem 0;--body-bg:#0D171C;--gp-color-1:#2D4E5C;--gp-color-2:#0D171C}.app-landing .navbar{background-color:rgba(19,26,67,.5);backdrop-filter:blur(5px);z-index:1000}.app-landing .h2,.app-landing .h3,.app-landing .h4,.app-landing .h5,.app-landing .h6,.app-landing body,.app-landing h2,.app-landing h3,.app-landing h4,.app-landing h5,.app-landing h6{line-height:1.5!important}.app-landing section{padding:var(--section-padding)}.app-landing .gradient-primary{background-color:var(--body-bg);background-image:radial-gradient(ellipse at bottom,var(--body-bg) 5%,transparent 60%),linear-gradient(136deg,transparent,var(--gp-color-1) 290%),linear-gradient(115deg,var(--gp-color-1),transparent 40%),linear-gradient(180deg,transparent 0,var(--body-bg) 70%),radial-gradient(ellipse at -70% -180%,transparent 80%,var(--gp-color-1) 0),radial-gradient(ellipse at bottom,var(--body-bg) 40%,transparent 80%),radial-gradient(ellipse at 5% 340%,transparent 80%,var(--gp-color-1) 0);background-repeat:no-repeat;-webkit-animation:fadeInOpacity 3s;animation:fadeInOpacity 3s}.app-landing .eye-catcher-text{background:linear-gradient(321deg,#d2d2d2 25%,#e0e0e0 50%,#fff 75%,#a0a0a0 100%);color:var(--warning-600);background-clip:text;text-fill-color:transparent;-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:none;position:relative}.app-landing .eye-catcher-text::after{content:attr(data-text);position:absolute;top:0;left:0;width:100%;text-wrap:wrap;z-index:-1;color:transparent;display:block;text-shadow:0 1px 2px rgba(0,0,0,.9)}.app-landing .display-2{font-size:calc(1.575rem + 3.9vw)!important;font-weight:300;line-height:1.2}@media (min-width:1200px){.app-landing .display-2{font-size:4.5rem!important}}.app-landing .hero-section{min-height:100vh;background:linear-gradient(45deg,var(--bs-gray-800),var(--bs-gray-700));background:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff;position:relative}.app-landing .features-section{text-align:center;background:#fff;padding:var(--section-padding)}.app-landing .features-section .feature-card{background:var(--bs-gray-100);border-radius:.75rem;padding:2rem;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-transition:-webkit-transform .3s ease,-webkit-box-shadow .3s ease;transition:-webkit-transform .3s ease,-webkit-box-shadow .3s ease;transition:transform .3s ease,box-shadow .3s ease;transition:transform .3s ease,box-shadow .3s ease,-webkit-transform .3s ease,-webkit-box-shadow .3s ease}.app-landing .features-section .feature-card:hover{-webkit-transform:translateY(-5px);transform:translateY(-5px);-webkit-box-shadow:0 10px 20px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.1)}.app-landing .features-section .feature-card .feature-icon{width:64px;height:64px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:var(--bs-primary);border-radius:50%;color:#fff;margin-bottom:1.5rem}.app-landing .feature-image{background:#f2f2f2;width:100%;aspect-ratio:1;border-radius:.75rem;margin-bottom:1rem}.app-landing .testimonial-section{background:#fff;padding:var(--section-padding);text-align:center}.app-landing .testimonial-section .testimonial-content{max-width:800px;margin:0 auto}.app-landing .testimonial-section .testimonial-content .testimonial-rating{color:var(--bs-warning)}.app-landing .testimonial-section .testimonial-content blockquote{font-style:italic;color:var(--bs-gray-700);margin:2rem 0}.app-landing .testimonial-section .testimonial-content .testimonial-author img{border:3px solid var(--bs-primary);padding:3px}.app-landing .stats-section{background:#fff;padding:var(--section-padding)}.app-landing .stats-section .stat-number{font-size:3rem;font-weight:700;color:var(--bs-primary);min-width:100px;display:inline-block}.app-landing .stats-section .feature-image{background:#f2f2f2;width:100%;border-radius:.75rem;overflow:hidden}.app-landing .stats-section .demo-window{background:#fff;border-radius:.75rem;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.1);box-shadow:0 5px 15px rgba(0,0,0,.1);overflow:hidden}.app-landing .stats-section .demo-window-content{padding:1rem}.app-landing .stats-section .rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.app-landing .demo-section{background:var(--bs-gray-100);padding:var(--section-padding)}.app-landing .demo-section .demo-window{background:#fff;padding:1rem;-webkit-box-shadow:0 20px 40px rgba(0,0,0,.1);box-shadow:0 20px 40px rgba(0,0,0,.1);border-radius:1rem;overflow:hidden}.app-landing .demo-section .demo-window img{border-radius:.5rem;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.app-landing .demo-section .demo-window img:hover{-webkit-transform:scale(1.02);transform:scale(1.02)}.app-landing .cta-section{background:#fff;text-align:center}.app-landing .newsletter-section{background:var(--bs-gray-100);padding:var(--section-padding)}.app-landing .newsletter-section .newsletter-form .form-control{border-radius:.5rem 0 0 .5rem;border:2px solid var(--bs-gray-200);padding:.75rem 1rem}.app-landing .newsletter-section .newsletter-form .form-control:focus{border-color:var(--bs-primary);-webkit-box-shadow:none;box-shadow:none}.app-landing .newsletter-section .newsletter-form .btn{border-radius:0 .5rem .5rem 0;padding:.75rem 2rem}.app-landing .newsletter-section .newsletter-image img{max-width:100%;height:auto}.app-landing .faq-section{background:#fff;padding:var(--section-padding)}.app-landing .faq-section .accordion-button{padding:1.25rem;font-weight:500;border:1px solid rgba(0,0,0,.1)!important;border-radius:.5rem!important;margin-bottom:1rem;-webkit-transition:all .3s ease;transition:all .3s ease}.app-landing .faq-section .accordion-button:not(.collapsed){color:var(--bs-primary);background-color:var(--bs-gray-100);-webkit-box-shadow:none;box-shadow:none}.app-landing .faq-section .accordion-button:hover{background-color:var(--bs-gray-100)}.app-landing .faq-section .accordion-button::after{background-size:1rem}.app-landing .faq-section .accordion-body{padding:1rem 1.25rem;color:var(--bs-gray-700)}.app-landing .contact-section{background:var(--bs-gray-100);padding:var(--section-padding);text-align:center}.app-landing .contact-section .btn{padding:.75rem 2rem;font-weight:500}.app-landing .footer{background:#fff;color:var(--bs-dark);padding:var(--section-padding)}.app-landing .footer .footer-links{list-style:none;padding:0;margin:0}.app-landing .footer .footer-links li{margin-bottom:.75rem}.app-landing .footer .footer-links li a{color:var(--bs-gray-700);text-decoration:none;font-size:.875rem;-webkit-transition:color .2s ease;transition:color .2s ease}.app-landing .footer .footer-links li a:hover{color:var(--bs-primary)}.app-landing .footer .h6,.app-landing .footer h6{color:var(--bs-dark);font-size:.875rem}.app-landing .footer hr{border-color:var(--bs-gray-200);margin:3rem 0}.app-landing .footer .social-links a{font-size:1.25rem;margin-left:1.5rem;color:var(--bs-gray-700);-webkit-transition:color .2s ease;transition:color .2s ease}.app-landing .footer .social-links a:hover{color:var(--bs-primary)}.app-landing .journey-section{background:#fff;padding:var(--section-padding)}.app-landing .journey-section .timeline{position:relative;padding-left:3rem;margin-top:4rem}.app-landing .journey-section .timeline::before{content:"";position:absolute;left:7px;top:0;height:100%;width:2px;background:var(--bs-gray-300)}.app-landing .journey-section .timeline .timeline-item{position:relative;padding-bottom:3rem;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}.app-landing .journey-section .timeline .timeline-item:hover{-webkit-transform:translateX(10px);transform:translateX(10px)}.app-landing .journey-section .timeline .timeline-item:last-child{padding-bottom:0}.app-landing .journey-section .timeline .timeline-item .timeline-dot{width:16px;height:16px;background:var(--bs-primary);border-radius:50%;position:absolute;left:-3rem;top:8px;border:3px solid #fff;-webkit-box-shadow:0 0 0 2px var(--bs-primary);box-shadow:0 0 0 2px var(--bs-primary)}.app-landing #typewriter-text{overflow:hidden;border-right:2px solid #fff;white-space:wrap;-webkit-animation:blink .7s infinite;animation:blink .7s infinite;text-shadow:0 1px 2px rgba(0,0,0,.9)}@-webkit-keyframes blink{50%{border-color:transparent}}@keyframes blink{50%{border-color:transparent}}.app-landing #net{background:0 0!important;position:relative;z-index:1;width:100vw;height:100vh;position:absolute;z-index:0}.app-landing #net canvas{position:absolute;top:0;left:0;z-index:-1}.app-landing .gradient-text{background:linear-gradient(321deg,var(--warning-600) 25%,var(--danger-400) 50%,var(--info-700) 75%,#39b9eb 100%);color:var(--warning-600);background-clip:text;text-fill-color:transparent;-webkit-background-clip:text;-webkit-text-fill-color:transparent;text-shadow:none}.app-landing .text-wrapper{display:inline-block;position:relative}.app-landing .text-wrapper::after{content:attr(data-text);position:absolute;top:0;left:0;z-index:-1;color:transparent;text-shadow:0 2px 4px rgba(0,0,0,.7)}@media (max-width:768px){.app-landing .timeline{padding-left:2rem}.app-landing .timeline-dot{left:-2rem}.app-landing .stat-item{margin-bottom:1rem}.app-landing .newsletter-form .form-control{border-radius:.5rem;margin-bottom:1rem}.app-landing .newsletter-form .btn{border-radius:.5rem;width:100%}}.emoji{font-size:.25px;width:120em;height:120em;margin:15em 7em;background:#ffda6a;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;border-radius:50%;position:relative}.emoji:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.emoji:after{position:absolute;bottom:-40em;font-size:18em;width:60em;left:calc(50% - 30em);color:#8a8a8a}.emoji__eyebrows,.emoji__eyes,.emoji__face,.emoji__hand,.emoji__heart,.emoji__mouth,.emoji__thumb,.emoji__tongue{position:absolute}.emoji__eyebrows:after,.emoji__eyebrows:before,.emoji__eyes:after,.emoji__eyes:before,.emoji__face:after,.emoji__face:before,.emoji__hand:after,.emoji__hand:before,.emoji__heart:after,.emoji__heart:before,.emoji__mouth:after,.emoji__mouth:before,.emoji__thumb:after,.emoji__thumb:before,.emoji__tongue:after,.emoji__tongue:before{position:absolute;content:""}.emoji__face{width:inherit;height:inherit}.emoji--like{background:#548dff}.emoji--like .emoji__hand{left:25em;bottom:30em;width:20em;height:40em;background:#fff;border-radius:5em;z-index:0;-webkit-animation:hands-up 2s linear infinite;animation:hands-up 2s linear infinite}.emoji--like .emoji__hand:before{left:25em;bottom:5em;width:40em;background:inherit;height:10em;border-radius:2em 10em 10em 2em;-webkit-box-shadow:1em -9em 0 1em #fff,2em -19em 0 2em #fff,3em -29em 0 3em #fff;box-shadow:1em -9em 0 1em #fff,2em -19em 0 2em #fff,3em -29em 0 3em #fff}.emoji--like .emoji__thumb{border-bottom:20em solid #fff;border-left:20em solid transparent;top:-25em;right:-25em;z-index:2;-webkit-transform:rotate(5deg);transform:rotate(5deg);-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-animation:thumbs-up 2s linear infinite;animation:thumbs-up 2s linear infinite}.emoji--like .emoji__thumb:before{border-radius:50% 50% 0 0;background:#fff;width:10em;height:12em;left:-10em;top:-8em;-webkit-transform:rotate(-15deg);transform:rotate(-15deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-box-shadow:-1em 4em 0 -1em #fff;box-shadow:-1em 4em 0 -1em #fff}.emoji--love{background:#f55064}.emoji--love .emoji__heart{left:calc(50% - 40em);top:calc(50% - 40em);width:80em;height:80em;-webkit-animation:heart-beat 1s linear infinite alternate;animation:heart-beat 1s linear infinite alternate}.emoji--love .emoji__heart:after,.emoji--love .emoji__heart:before{left:calc(50% - 20em);top:calc(50% - 32em);width:40em;height:64em;background:#fff;border-radius:20em 20em 0 0}.emoji--love .emoji__heart:before{-webkit-transform:translate(20em) rotate(-45deg);transform:translate(20em) rotate(-45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.emoji--love .emoji__heart:after{-webkit-transform:translate(-20em) rotate(45deg);transform:translate(-20em) rotate(45deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.emoji--haha .emoji__face{-webkit-animation:haha-face 2s linear infinite;animation:haha-face 2s linear infinite}.emoji--haha .emoji__eyes{width:26em;height:6em;border-radius:2em;left:calc(50% - 13em);top:35em;-webkit-transform:rotate(20deg);transform:rotate(20deg);background:0 0;-webkit-box-shadow:-25em 5em 0 0 #000,25em -5em 0 0 #000;box-shadow:-25em 5em 0 0 #000,25em -5em 0 0 #000}.emoji--haha .emoji__eyes:after{left:0;top:0;width:26em;height:6em;border-radius:2em;-webkit-transform:rotate(-40deg);transform:rotate(-40deg);background:0 0;-webkit-box-shadow:-25em -5em 0 0 #000,25em 5em 0 0 #000;box-shadow:-25em -5em 0 0 #000,25em 5em 0 0 #000}.emoji--haha .emoji__mouth{width:80em;height:40em;left:calc(50% - 40em);top:50%;background:#000;border-radius:0 0 40em 40em;overflow:hidden;z-index:1;-webkit-animation:haha-mouth 2s linear infinite;animation:haha-mouth 2s linear infinite}.emoji--haha .emoji__tongue{width:70em;height:30em;background:#f55064;left:calc(50% - 35em);bottom:-10em;border-radius:50%}.emoji--yay:after{-webkit-animation:yay-reverse 1s linear infinite;animation:yay-reverse 1s linear infinite}.emoji--yay .emoji__face{-webkit-animation:yay 1s linear infinite alternate;animation:yay 1s linear infinite alternate}.emoji--yay .emoji__eyebrows{left:calc(50% - 3em);top:30em;height:6em;width:6em;border-radius:50%;background:0 0;-webkit-box-shadow:-6em 0 0 0 #000,-36em 0 0 0 #000,6em 0 0 0 #000,36em 0 0 0 #000;box-shadow:-6em 0 0 0 #000,-36em 0 0 0 #000,6em 0 0 0 #000,36em 0 0 0 #000}.emoji--yay .emoji__eyebrows:after,.emoji--yay .emoji__eyebrows:before{width:36em;height:18em;border-radius:60em 60em 0 0;background:0 0;border:6em solid #000;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:0;bottom:3em;left:calc(50% - 18em)}.emoji--yay .emoji__eyebrows:before{margin-left:-21em}.emoji--yay .emoji__eyebrows:after{margin-left:21em}.emoji--yay .emoji__mouth{top:60em;background:0 0;left:50%}.emoji--yay .emoji__mouth:after{width:80em;height:80em;left:calc(50% - 40em);top:-75em;border-radius:50%;background:0 0;border:6em solid #000;-webkit-box-sizing:border-box;box-sizing:border-box;border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;z-index:1}.emoji--yay .emoji__mouth:before{width:6em;height:6em;background:0 0;border-radius:50%;bottom:5em;left:calc(50% - 3em);-webkit-box-shadow:-25em 0 0 0 #000,25em 0 0 0 #000,-35em -2em 30em 10em #d5234c,35em -2em 30em 10em #d5234c;box-shadow:-25em 0 0 0 #000,25em 0 0 0 #000,-35em -2em 30em 10em #d5234c,35em -2em 30em 10em #d5234c}.emoji--wow .emoji__face{-webkit-animation:wow-face 3s linear infinite;animation:wow-face 3s linear infinite}.emoji--wow .emoji__eyebrows{left:calc(50% - 3em);height:6em;width:6em;border-radius:50%;background:0 0;-webkit-box-shadow:-18em 0 0 0 #000,-33em 0 0 0 #000,18em 0 0 0 #000,33em 0 0 0 #000;box-shadow:-18em 0 0 0 #000,-33em 0 0 0 #000,18em 0 0 0 #000,33em 0 0 0 #000;-webkit-animation:wow-brow 3s linear infinite;animation:wow-brow 3s linear infinite}.emoji--wow .emoji__eyebrows:after,.emoji--wow .emoji__eyebrows:before{width:24em;height:20em;border:6em solid #000;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%;border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;top:-3em;left:calc(50% - 12em)}.emoji--wow .emoji__eyebrows:before{margin-left:-25em}.emoji--wow .emoji__eyebrows:after{margin-left:25em}.emoji--wow .emoji__eyes{width:16em;height:24em;left:calc(50% - 8em);top:35em;border-radius:50%;background:0 0;-webkit-box-shadow:25em 0 0 0 #000,-25em 0 0 0 #000;box-shadow:25em 0 0 0 #000,-25em 0 0 0 #000}.emoji--wow .emoji__mouth{width:30em;height:45em;left:calc(50% - 15em);top:50%;border-radius:50%;background:#000;-webkit-animation:wow-mouth 3s linear infinite;animation:wow-mouth 3s linear infinite}.emoji--sad .emoji__face{-webkit-animation:sad-face 2s ease-in infinite;animation:sad-face 2s ease-in infinite}.emoji--sad .emoji__eyebrows{left:calc(50% - 3em);top:35em;height:6em;width:6em;border-radius:50%;background:0 0;-webkit-box-shadow:-40em 9em 0 0 #000,-25em 0 0 0 #000,25em 0 0 0 #000,40em 9em 0 0 #000;box-shadow:-40em 9em 0 0 #000,-25em 0 0 0 #000,25em 0 0 0 #000,40em 9em 0 0 #000}.emoji--sad .emoji__eyebrows:after,.emoji--sad .emoji__eyebrows:before{width:30em;height:20em;border:6em solid #000;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%;border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;top:2em;left:calc(50% - 15em)}.emoji--sad .emoji__eyebrows:before{margin-left:-30em;-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}.emoji--sad .emoji__eyebrows:after{margin-left:30em;-webkit-transform:rotate(30deg);transform:rotate(30deg)}.emoji--sad .emoji__eyes{width:14em;height:16em;left:calc(50% - 7em);top:50em;border-radius:50%;background:0 0;-webkit-box-shadow:25em 0 0 0 #000,-25em 0 0 0 #000;box-shadow:25em 0 0 0 #000,-25em 0 0 0 #000}.emoji--sad .emoji__eyes:after{background:#548dff;width:12em;height:12em;margin-left:6em;border-radius:0 100% 40% 50%/0 50% 40% 100%;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-animation:tear-drop 2s ease-in infinite;animation:tear-drop 2s ease-in infinite}.emoji--sad .emoji__mouth{width:60em;height:80em;left:calc(50% - 30em);top:80em;-webkit-box-sizing:border-box;box-sizing:border-box;border:6em solid #000;border-radius:50%;border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;background:0 0;-webkit-animation:sad-mouth 2s ease-in infinite;animation:sad-mouth 2s ease-in infinite}.emoji--sad .emoji__mouth:after{width:6em;height:6em;background:0 0;border-radius:50%;top:4em;left:calc(50% - 3em);-webkit-box-shadow:-18em 0 0 0 #000,18em 0 0 0 #000;box-shadow:-18em 0 0 0 #000,18em 0 0 0 #000}.emoji--angry{background:-webkit-gradient(linear,left top,left bottom,color-stop(-10%,#d5234c),to(#ffda6a));background:linear-gradient(#d5234c -10%,#ffda6a);background-size:100%;-webkit-animation:angry-color 2s ease-in infinite;animation:angry-color 2s ease-in infinite}.emoji--angry .emoji__face{-webkit-animation:angry-face 2s ease-in infinite;animation:angry-face 2s ease-in infinite}.emoji--angry .emoji__eyebrows{left:calc(50% - 3em);top:55em;height:6em;width:6em;border-radius:50%;background:0 0;-webkit-box-shadow:-44em 5em 0 0 #000,-7em 16em 0 0 #000,7em 16em 0 0 #000,44em 5em 0 0 #000;box-shadow:-44em 5em 0 0 #000,-7em 16em 0 0 #000,7em 16em 0 0 #000,44em 5em 0 0 #000}.emoji--angry .emoji__eyebrows:after,.emoji--angry .emoji__eyebrows:before{width:50em;height:20em;border:6em solid #000;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:50%;border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;top:0;left:calc(50% - 25em)}.emoji--angry .emoji__eyebrows:before{margin-left:-25em;-webkit-transform:rotate(15deg);transform:rotate(15deg)}.emoji--angry .emoji__eyebrows:after{margin-left:25em;-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}.emoji--angry .emoji__eyes{width:12em;height:12em;left:calc(50% - 6em);top:70em;border-radius:50%;background:0 0;-webkit-box-shadow:25em 0 0 0 #000,-25em 0 0 0 #000;box-shadow:25em 0 0 0 #000,-25em 0 0 0 #000}.emoji--angry .emoji__mouth{width:36em;height:18em;left:calc(50% - 18em);bottom:15em;background:#000;border-radius:50%;-webkit-animation:angry-mouth 2s ease-in infinite;animation:angry-mouth 2s ease-in infinite}@-webkit-keyframes heart-beat{25%{-webkit-transform:scale(1.1);transform:scale(1.1)}75%{-webkit-transform:scale(.6);transform:scale(.6)}}@keyframes heart-beat{25%{-webkit-transform:scale(1.1);transform:scale(1.1)}75%{-webkit-transform:scale(.6);transform:scale(.6)}}@-webkit-keyframes haha-face{10%,30%,50%{-webkit-transform:translateY(25em);transform:translateY(25em)}20%,40%{-webkit-transform:translateY(15em);transform:translateY(15em)}60%,80%{-webkit-transform:translateY(0);transform:translateY(0)}70%,90%{-webkit-transform:translateY(-10em);transform:translateY(-10em)}}@keyframes haha-face{10%,30%,50%{-webkit-transform:translateY(25em);transform:translateY(25em)}20%,40%{-webkit-transform:translateY(15em);transform:translateY(15em)}60%,80%{-webkit-transform:translateY(0);transform:translateY(0)}70%,90%{-webkit-transform:translateY(-10em);transform:translateY(-10em)}}@-webkit-keyframes haha-mouth{10%,30%,50%{-webkit-transform:scale(.6);transform:scale(.6);top:45%}20%,40%{-webkit-transform:scale(.8);transform:scale(.8);top:45%}60%,80%{-webkit-transform:scale(1);transform:scale(1);top:50%}70%{-webkit-transform:scale(1.2);transform:scale(1.2);top:50%}90%{-webkit-transform:scale(1.1);transform:scale(1.1);top:50%}}@keyframes haha-mouth{10%,30%,50%{-webkit-transform:scale(.6);transform:scale(.6);top:45%}20%,40%{-webkit-transform:scale(.8);transform:scale(.8);top:45%}60%,80%{-webkit-transform:scale(1);transform:scale(1);top:50%}70%{-webkit-transform:scale(1.2);transform:scale(1.2);top:50%}90%{-webkit-transform:scale(1.1);transform:scale(1.1);top:50%}}@-webkit-keyframes yay{25%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}75%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}}@keyframes yay{25%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}75%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}}@-webkit-keyframes wow-face{15%,25%{-webkit-transform:rotate(20deg) translateX(-25em);transform:rotate(20deg) translateX(-25em)}45%,65%{-webkit-transform:rotate(-20deg) translateX(25em);transform:rotate(-20deg) translateX(25em)}100%,75%{-webkit-transform:rotate(0) translateX(0);transform:rotate(0) translateX(0)}}@keyframes wow-face{15%,25%{-webkit-transform:rotate(20deg) translateX(-25em);transform:rotate(20deg) translateX(-25em)}45%,65%{-webkit-transform:rotate(-20deg) translateX(25em);transform:rotate(-20deg) translateX(25em)}100%,75%{-webkit-transform:rotate(0) translateX(0);transform:rotate(0) translateX(0)}}@-webkit-keyframes wow-brow{15%,65%{top:25em}0%,100%,75%{top:15em}}@keyframes wow-brow{15%,65%{top:25em}0%,100%,75%{top:15em}}@-webkit-keyframes wow-mouth{10%,30%{width:20em;height:20em;left:calc(50% - 10em)}50%,70%{width:30em;height:40em;left:calc(50% - 15em)}100%,75%{height:50em}}@keyframes wow-mouth{10%,30%{width:20em;height:20em;left:calc(50% - 10em)}50%,70%{width:30em;height:40em;left:calc(50% - 15em)}100%,75%{height:50em}}@-webkit-keyframes sad-face{25%,35%{top:-15em}55%,95%{top:10em}0%,100%{top:0}}@keyframes sad-face{25%,35%{top:-15em}55%,95%{top:10em}0%,100%{top:0}}@-webkit-keyframes sad-mouth{25%,35%{-webkit-transform:scale(.85);transform:scale(.85);top:70em}0%,100%,55%{-webkit-transform:scale(1);transform:scale(1);top:80em}}@keyframes sad-mouth{25%,35%{-webkit-transform:scale(.85);transform:scale(.85);top:70em}0%,100%,55%{-webkit-transform:scale(1);transform:scale(1);top:80em}}@-webkit-keyframes tear-drop{0%,100%{display:block;left:35em;top:15em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}25%{display:block;left:35em;-webkit-transform:rotate(45deg) scale(2);transform:rotate(45deg) scale(2)}49.9%{display:block;left:35em;top:65em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}50%{display:block;left:-35em;top:15em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}75%{display:block;left:-35em;-webkit-transform:rotate(45deg) scale(2);transform:rotate(45deg) scale(2)}99.9%{display:block;left:-35em;top:65em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}}@keyframes tear-drop{0%,100%{display:block;left:35em;top:15em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}25%{display:block;left:35em;-webkit-transform:rotate(45deg) scale(2);transform:rotate(45deg) scale(2)}49.9%{display:block;left:35em;top:65em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}50%{display:block;left:-35em;top:15em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}75%{display:block;left:-35em;-webkit-transform:rotate(45deg) scale(2);transform:rotate(45deg) scale(2)}99.9%{display:block;left:-35em;top:65em;-webkit-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0)}}@-webkit-keyframes hands-up{25%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}50%{-webkit-transform:rotate(-15deg) translateY(-10em);transform:rotate(-15deg) translateY(-10em)}100%,75%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes hands-up{25%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}50%{-webkit-transform:rotate(-15deg) translateY(-10em);transform:rotate(-15deg) translateY(-10em)}100%,75%{-webkit-transform:rotate(0);transform:rotate(0)}}@-webkit-keyframes thumbs-up{25%{-webkit-transform:rotate(20deg);transform:rotate(20deg)}100%,50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}@keyframes thumbs-up{25%{-webkit-transform:rotate(20deg);transform:rotate(20deg)}100%,50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}@-webkit-keyframes angry-color{45%,60%{background-size:250%}0%,100%,85%{background-size:100%}}@keyframes angry-color{45%,60%{background-size:250%}0%,100%,85%{background-size:100%}}@-webkit-keyframes angry-face{35%,60%{-webkit-transform:translateX(0) translateY(10em) scale(.9);transform:translateX(0) translateY(10em) scale(.9)}40%,50%{-webkit-transform:translateX(-5em) translateY(10em) scale(.9);transform:translateX(-5em) translateY(10em) scale(.9)}45%,55%{-webkit-transform:translateX(5em) translateY(10em) scale(.9);transform:translateX(5em) translateY(10em) scale(.9)}}@keyframes angry-face{35%,60%{-webkit-transform:translateX(0) translateY(10em) scale(.9);transform:translateX(0) translateY(10em) scale(.9)}40%,50%{-webkit-transform:translateX(-5em) translateY(10em) scale(.9);transform:translateX(-5em) translateY(10em) scale(.9)}45%,55%{-webkit-transform:translateX(5em) translateY(10em) scale(.9);transform:translateX(5em) translateY(10em) scale(.9)}}@-webkit-keyframes angry-mouth{25%,50%{height:6em;bottom:25em}}@keyframes angry-mouth{25%,50%{height:6em;bottom:25em}}#msgr_listfilter_input{width:calc(100% - 1rem);margin:0 auto;margin-top:-41px;padding-left:41px;margin-bottom:10px;opacity:0;background:0 0;-webkit-transition-delay:.1s;transition-delay:.1s}.msgr-list{width:14.563rem;right:-11.438rem;z-index:101;-webkit-transition-delay:.1s;transition-delay:.1s}.msgr-list+.msgr{width:calc(100% - 3.125rem);height:100%}.msgr-list+.msgr:before{content:"";height:100%;width:100%;background:rgba(var(--bs-body-color-rgb),.4);position:absolute;z-index:100;-webkit-transition-delay:.1s;transition-delay:.1s;opacity:0;visibility:hidden}.msgr-list:hover{right:0;border-left-color:rgba(var(--bs-body-color-rgb),.1)}.msgr-list:hover #msgr_listfilter_input{opacity:1}.msgr-list:hover+.msgr:before{opacity:1;visibility:visible}.chat-segment-get{text-align:left;position:relative;margin:0 2rem .5rem 0}.chat-segment-get.chat-start .chat-message{border-bottom-left-radius:3px}.chat-segment-get.chat-start+:not(.chat-end) .chat-message{border-bottom-left-radius:3px;border-top-left-radius:3px}.chat-segment-get.chat-end .chat-message{border-top-left-radius:3px}.chat-segment-get .chat-message{background:rgba(var(--bs-body-color-rgb),.05);color:rgba(var(--bs-body-color-rgb),.8);text-align:left}.chat-segment-sent{text-align:right;position:relative;margin:0 0 .5rem 3rem}.chat-segment-sent.chat-start .chat-message{border-bottom-right-radius:3px}.chat-segment-sent.chat-start+:not(.chat-end) .chat-message{border-bottom-right-radius:3px;border-top-right-radius:3px}.chat-segment-sent.chat-end .chat-message{border-top-right-radius:3px}.chat-segment-sent .chat-message{background:var(--success-700);color:#fff;text-align:left}.chat-message{padding:.75rem 1rem;border-radius:.625rem;position:relative;display:inline-block}.chat-message>p{padding:.75rem 0 0;margin:0}.chat-message>p:first-child{padding-top:0}.chat-start{margin-bottom:3px!important}.chat-start .time-stamp{display:none}.chat-start+.chat-segment:not(.chat-end){margin-bottom:3px!important}.chat-start+.chat-segment:not(.chat-end) .time-stamp{display:none}.story-scroll{overflow-x:auto;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.story-scroll::-webkit-scrollbar{display:none}.profile-page-header-underlay{position:absolute;top:0;left:0;right:0;height:200px;z-index:0}.profile-page-header{position:relative;z-index:1;margin-top:3rem}.profile-page-header-avatar img{width:160px;height:160px;-o-object-fit:cover;object-fit:cover}.profile-page-header-avatar .btn-icon{width:36px;height:36px;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page-header-avatar .btn-icon .sa-icon{width:18px;height:18px}.profile-page-nav{padding:0 1rem}.profile-page-nav .nav-tabs-clean{margin:0 -1rem}.profile-page-nav .nav-tabs-clean .nav-link{padding:1rem;color:var(--bs-gray-600);border-bottom:2px solid transparent;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.profile-page-nav .nav-tabs-clean .nav-link:hover{color:var(--bs-primary)}.profile-page-nav .nav-tabs-clean .nav-link.active{color:var(--bs-primary);border-bottom-color:var(--bs-primary)}.profile-page-nav .nav-tabs-clean .nav-link .sa-icon{width:18px;height:18px}.timeline{position:relative;padding:0;margin:0}.timeline::before{content:"";position:absolute;top:0;left:7px;height:100%;width:2px;background:var(--bs-gray-200)}.timeline-item{position:relative;padding-left:30px;padding-bottom:1.5rem}.timeline-item:last-child{padding-bottom:0}.timeline-marker{position:absolute;left:0;top:4px;width:16px;height:16px;border-radius:50%;border:2px solid var(--bs-body-bg);-webkit-box-shadow:0 0 0 2px var(--bs-primary);box-shadow:0 0 0 2px var(--bs-primary)}.profile-edit-mode{display:none}html.profile-edit-mode .profile-view-mode{display:none}html.profile-edit-mode .profile-edit-mode{display:block}.news-item{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.news-item:hover{background-color:var(--bs-gray-100)}.profile-page .carousel{border-radius:.5rem;overflow:hidden}.profile-page .carousel .carousel-item img{height:400px;-o-object-fit:cover;object-fit:cover}.profile-page .carousel .carousel-caption{background:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.7)),to(transparent));background:linear-gradient(to top,rgba(0,0,0,.7),transparent);left:0;right:0;bottom:0;padding:2rem;text-align:left}.project-card{-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.project-card:hover{-webkit-transform:translateY(-5px);transform:translateY(-5px)}.project-card .project-image{height:200px;-o-object-fit:cover;object-fit:cover}.contact-form .form-control:focus{-webkit-box-shadow:none;box-shadow:none;border-color:var(--bs-primary)}.social-links .btn-icon{width:40px;height:40px;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.social-links .btn-icon:hover{background-color:var(--bs-primary);color:#fff}.social-links .btn-icon .sa-icon{width:20px;height:20px}.office-hours .day{font-weight:500}.office-hours .time{color:var(--bs-gray-600)}.comments-section .comment{-webkit-transition:background-color .2s ease-in-out;transition:background-color .2s ease-in-out}.comments-section .comment:hover{background-color:var(--bs-gray-50)}.comments-section .comment .btn-link{color:var(--bs-gray-600);text-decoration:none;padding:0}.comments-section .comment .btn-link:hover{color:var(--bs-primary)}.comments-section .comment-reply{margin-left:2.5rem;padding-left:1rem;border-left:2px solid var(--bs-gray-200)}.comments-section .btn-icon{width:32px;height:32px;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-views .viewer{-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out}.profile-views .viewer:hover{-webkit-transform:translateX(5px);transform:translateX(5px)}.people-suggestions .suggestion-item{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.people-suggestions .suggestion-item:hover{background-color:var(--bs-gray-50)}.people-suggestions .suggestion-item .btn-connect{opacity:.8;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.people-suggestions .suggestion-item:hover .btn-connect{opacity:1}.contacts-list .list-group-item{border:none;border-radius:.5rem;margin-bottom:.5rem;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.contacts-list .list-group-item:hover{background-color:var(--bs-gray-100)}.contacts-list .list-group-item .btn-icon{width:32px;height:32px;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;opacity:.7;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.contacts-list .list-group-item .btn-icon:hover{opacity:1;background-color:var(--bs-gray-200)}.contacts-list .list-group-item .btn-icon .sa-icon{width:16px;height:16px}.contacts-search .form-control{border-right:none}.contacts-search .form-control:focus{-webkit-box-shadow:none;box-shadow:none;border-color:var(--bs-gray-300)}.contacts-search .form-control:focus+.btn{border-color:var(--bs-gray-300)}.contacts-search .btn{border-left:none}.contacts-search .btn:hover{background-color:var(--bs-gray-100)}@media (max-width:767.98px){.profile-page-header{margin-top:2rem}.profile-page-header-avatar img{width:120px;height:120px}.profile-page-nav .nav-tabs-clean .nav-link{padding:.75rem;font-size:.875rem}}.comment-input-wrapper{position:relative}.comment-input-wrapper .sa-icon{width:16px;height:16px}.comment-input-wrapper input:focus+.comment-actions{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;gap:.5rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.comment-content{background-color:var(--bs-body-bg)}.search-box:focus-within,.search-box:hover{-webkit-box-shadow:0 1px 6px rgba(32,33,36,.28);box-shadow:0 1px 6px rgba(32,33,36,.28);border-color:rgba(223,225,229,0)}#iconList:has(li:not(.js-filter-hide))+.no-results-msg{display:none}#iconList:has(li.js-filter-show)+.no-results-msg,#iconList:not(:has(li))+.no-results-msg{display:none}.no-results-msg{padding-top:1rem}.icon-preview i{font-size:3em}.toast-body .sa-icon{width:60px;height:60px;stroke:var(--primary-500);fill:rgba(172,203,211,.3);margin-right:10px}.js-showcase-icon.has-svg .sa-icon{width:55px;height:55px;stroke-width:.5px;fill:rgba(var(--bs-body-color-rgb),.1);stroke:rgba(var(--bs-body-color-rgb),.9)}.js-showcase-icon.has-svg:hover .sa-icon{fill:rgba(var(--white),.1);stroke:rgba(var(--white),1);stroke-width:1px}.js-showcase-icon.has-svg:hover .icon-preview{background:rgba(var(--primary),.9)!important}.js-showcase-icon.has-svg:hover .icon-preview>div{background:inherit!important}.js-showcase-icon{color:var(--bs-body-color)}.js-showcase-icon:hover .icon-preview{color:rgba(var(--white),.9);background:rgba(var(--primary),.9)!important}.js-showcase-icon:hover .icon-preview>div{background:inherit!important}.js-filter-hide{display:none!important;visibility:hidden!important}.js-filter-show{display:block!important;visibility:visible!important}.search-history{display:-webkit-box;display:-ms-flexbox;display:flex;gap:5px}.search-history .badge{cursor:pointer;padding:7px 7px 7px 12px;border-radius:14px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:5px}.search-history .badge:hover{background:var(--danger-500)!important;color:var(--bs-body-color)}.suggest-title{font-weight:500;color:var(--danger-500)}#suggestions:not(:empty){margin-top:1rem;margin-bottom:1rem;padding:1rem 0}.suggestion{color:var(--primary-500);cursor:pointer;text-decoration:underline;font-style:italic;font-weight:600}.suggest-title,.suggestion{font-size:1.25rem}.js-showcase-icon{height:115px;min-height:100px;border:3px solid transparent;border-radius:8px}.js-showcase-icon.has-svg{height:125px}.js-showcase-icon:hover{background:rgba(var(--bs-body-color-rgb),.8);color:var(--bs-body-bg)}.js-showcase-icon:hover .text-muted{color:var(--bs-body-bg)!important}.js-showcase-icon:focus{border:3px solid var(--primary-500)}.js-showcase-icon:active{scale:.95}.grid-background,.grid-background-dark{--background-color:#ffffff;--background-image-color:0,0,0;--background-size:40px;background:var(--background-color);background-image:linear-gradient(rgba(var(--background-image-color),.1) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--background-image-color),.1) 1px,transparent 1px);background-size:var(--background-size) var(--background-size);background-position:center center}.grid-background-dark{--background-color:#333333;--background-image-color:255,255,255}#my-icon:empty{display:none}#my-icon:empty+.empty-msg{display:block!important}#stackgenerator-container.icon-zoom-1{--background-size:42px}#stackgenerator-container.icon-zoom-1 #my-icon{scale:1.5}#stackgenerator-container.icon-zoom-2{--background-size:44px}#stackgenerator-container.icon-zoom-2 #my-icon{scale:2}#stackgenerator-container.icon-zoom-3{--background-size:46px}#stackgenerator-container.icon-zoom-3 #my-icon{scale:2.5}#stackgenerator-container.icon-zoom-4{--background-size:48px}#stackgenerator-container.icon-zoom-4 #my-icon{scale:3}#stackgenerator-container.icon-zoom-5{--background-size:50px}#stackgenerator-container.icon-zoom-5 #my-icon{scale:3.5}#stackgenerator-container.icon-zoom-6{--background-size:52px}#stackgenerator-container.icon-zoom-6 #my-icon{scale:4}#stackgenerator-container.icon-zoom-7{--background-size:54px}#stackgenerator-container.icon-zoom-7 #my-icon{scale:4.5}#stackgenerator-container.icon-zoom-8{--background-size:56px}#stackgenerator-container.icon-zoom-8 #my-icon{scale:5}#stackgenerator-container.icon-zoom-9{--background-size:58px}#stackgenerator-container.icon-zoom-9 #my-icon{scale:5.5}#stackgenerator-container.icon-zoom-10{--background-size:60px}#stackgenerator-container.icon-zoom-10 #my-icon{scale:6}#stackgenerator-container.icon-zoom-11{--background-size:62px}#stackgenerator-container.icon-zoom-11 #my-icon{scale:6.5}#stackgenerator-container.icon-zoom-12{--background-size:64px}#stackgenerator-container.icon-zoom-12 #my-icon{scale:7}#stackgenerator-container.icon-zoom-13{--background-size:66px}#stackgenerator-container.icon-zoom-13 #my-icon{scale:7.5}#stackgenerator-container.icon-zoom-14{--background-size:68px}#stackgenerator-container.icon-zoom-14 #my-icon{scale:8}#stackgenerator-container.icon-zoom-15{--background-size:70px}#stackgenerator-container.icon-zoom-15 #my-icon{scale:8.5}#stackgenerator-container #my-icon{font-size:4.1em}#stackgenerator-container .icon-settings .badge-icon{font-size:10px;min-width:unset;max-width:unset;width:60px;height:16px;overflow:hidden;padding:0;position:absolute;left:-6px;bottom:-2px;border-radius:0;opacity:1;background:0 0;color:var(--bs-body-color);font-weight:300;text-align:center;border:none;-webkit-box-shadow:none;box-shadow:none}#stackgenerator-container .icon-settings .drag-handle{position:absolute;width:15px;height:100%;top:0;right:0;border-radius:0;border:0;border-left:1px solid rgba(0,0,0,.1);background:var(--warning-50)}#iconList{overflow-y:auto}#iconList .js-showcase-icon{min-height:90px}#iconList .js-showcase-icon.has-svg .sa-icon{width:40px;height:40px}#iconList .js-showcase-icon.has-svg:not(:hover) .sa-icon{fill:rgba(var(--bs-emphasis-color-rgb),.1);stroke:rgba(var(--bs-emphasis-color-rgb),.8)}#iconList.stack-demo .small,#iconList.stack-demo small{font-size:.755em}#iconList.stack-demo .js-showcase-icon.has-svg{height:85px}#iconList.stack-demo .js-showcase-icon{height:85px;min-height:90px}#stack-control{position:absolute;right:20px;top:70px;width:286px}#stack-control .stack-icon-preview{width:58px;height:58px;font-size:2.25rem;color:#d1d1d1;padding-bottom:10px}#stack-control .stack-icon-preview .sa-icon{width:2.25rem;height:2.25rem}#stack-control .control-panel-content{background:var(--bs-body-bg,#fcfcfc);border-bottom:1px solid rgba(0,0,0,.1)}.tree-view-container{background:#011627;padding:1rem;border-radius:1rem;color:#fff}.tree-view{font-family:monospace;font-size:.875rem;line-height:1.5}.tree-item{margin:2px 0;position:relative}.tree-item-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;padding:2px 5px;border-radius:3px}.tree-item-content:hover{background-color:rgba(var(--primary),.1)}.tree-item-icon{margin-right:5px;width:16px;text-align:center}.tree-item-children{padding-left:20px;border-left:1px dotted #ccc;margin-left:7px}.directory-icon{color:#e8a317}.file-icon{color:#6c757d}.collapsed .tree-item-children{display:none}.expanded .toggle-icon:before{content:"▼";font-size:10px}.collapsed .toggle-icon:before{content:"►";font-size:10px}.toggle-icon{display:inline-block;width:12px;height:12px;margin-right:5px;text-align:center;line-height:12px}.file-item .toggle-icon{visibility:hidden}.path{color:var(--success-700);font-size:.825rem;margin-left:1rem}.loading{text-align:center;padding:20px;font-style:italic;color:#666}.error{color:#d9534f;padding:10px;border:1px solid #d9534f;border-radius:4px;margin-top:20px}.unread .mail-sender,.unread .mail-subject{font-weight:600}.unread .mail-body{color:var(--bs-body-color)!important}.starred .mail-starred{fill:var(--warning-500);stroke:var(--warning-700)}.mail-starred:hover{stroke-width:2px!important;cursor:pointer}@-webkit-keyframes slideOut{0%{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideOut{0%{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.deleting{-webkit-animation:slideCollapse .3s ease-out forwards;animation:slideCollapse .3s ease-out forwards}@-webkit-keyframes slideCollapse{from{opacity:1;max-height:44px;-webkit-transform:translateX(0);transform:translateX(0)}to{opacity:0;max-height:0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideCollapse{from{opacity:1;max-height:44px;-webkit-transform:translateX(0);transform:translateX(0)}to{opacity:0;max-height:0;-webkit-transform:translateX(0);transform:translateX(0)}}.refreshing::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(var(--bs-body-bg-rgb),.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:1000}.refreshing{position:relative}.hidden-attachment{display:none}.mail-toast{position:fixed;bottom:20px;right:20px;background:var(--success-500);color:#fff;padding:1rem;border-radius:4px;z-index:1060;opacity:0;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;-webkit-box-shadow:0 4px 6px rgba(0,0,0,.1);box-shadow:0 4px 6px rgba(0,0,0,.1)}.mail-toast.show{opacity:1}.form-check-input:checked{-webkit-animation:checkmark .2s ease-in-out forwards;animation:checkmark .2s ease-in-out forwards}@-webkit-keyframes checkmark{0%{-webkit-transform:scale(.8);transform:scale(.8)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes checkmark{0%{-webkit-transform:scale(.8);transform:scale(.8)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}100%{-webkit-transform:scale(1);transform:scale(1)}} +/*# sourceMappingURL=smartapp.min.css.map */ diff --git a/legacy/smartadmin/dashboard-control-center.html b/legacy/smartadmin/dashboard-control-center.html new file mode 100644 index 0000000..7710a17 --- /dev/null +++ b/legacy/smartadmin/dashboard-control-center.html @@ -0,0 +1,2395 @@ + + + + + + + + Control Center | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +
+
+ +

Control Center

+ + + + + + +
+ +
+
+
+ + EXPENSES + + $47,000 +
+
+ 3, 4, 3, 6, 7, 3, 3, 6, 2, 6, 4 +
+
+
+
+ + PROFIT + + $38,500 +
+
+ 1, 4, 3, 6, 5, 3, 9, 6, 5, 9, 7 +
+
+
+
+ +
+
+
+ +
+
+

Live Feeds +

+
+
+
+
+ +
+ +
+
+ +
+
+ My Tasks + 130 / 500 +
+
+
+
+
+ Transferred + 440 TB +
+
+
+
+
+ Resolved Issues + 77% +
+
+
+
+
+ Testing Progress + 7 days +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+ +
+
+ + SERVER LOAD + + +
+ 5,6,5,3,8,6,9,7,4,2 +
+ 97% + 44% +
+
+
+
+ +
+
+
+
+ +
+
+ + DISK SPACE + + +
+ 5,9,7,3,5,2,5,3,9,6 +
+ 76% + 3% +
+
+
+
+ +
+
+
+
+ +
+
+ + DATA TTF + + +
+ 3,5,2,5,3,9,6,5,9,7 +
+ 10GB + 10% +
+
+
+
+ +
+
+
+
+ +
+
+ + TEMP. + + +
+ 5,3,9,6,5,9,7,3,5,2 +
+ 124 + 40F +
+
+
+
+
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+ + + + +
+
+
Group Chat
+ 7 + online +
+
+ +
+
+
+
+ + +
+ + +
+
+

+ @OliverKopyov, can you + please check the files? Make sure to analyze the + solution
and create a report. +

+
+
+ 3:00 pm +
+
+ + + +
+ +
+

+ Oliver Kopyov + Hi, Sorry going through a busy time in office. Yes I + analyzed the solution. It will require some + resource, which I could not manage. +

+
+
3:24 pm +
+
+ + + +
+
+

+ Okay +

+
+
+
+
+

+ @GeraldChait, can you please help @OliverKopyov with + the report? +

+
+
+ 3:26 pm +
+
+ + + +
+ +
+

+ Melissa Emma Ayre + I can help you out
+ Can you send the related files? +

+
+
+
+
+ +
+
+
3:29 pm +
+
+ + + +
+ +
+

+ Oliver Kopyov +

+
+ +
+
+
+
+ +
+
+
+
+ security_codes.pdf + +
+
+ agreement.pdf + +
+
+
+
3:33 pm +
+
+ + + +
+ +
+ Melissa Emma Ayre + +
+
Just now +
+
+ + + +
+
+

+ Thanks Melissa! +

+
+
+ +
+ + +
+ +
+ + +
+
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+
+

Global View

+
+
+
+
+
+
+
+ flag +
+ Monthly Sales Volume: + +
+
+
+
+
+ +
+
+

Subscriptions Hourly

+
+
+
+
+
+
+
+ +
+
+

Secession Scale

+
+
+
+ +
+
+
+
+
+
+
+
+ Current Usage +
+
+
+
+
+ Net Usage +
+
+
+
+
+ Users blocked +
+
+
+
+
+ Custom cases +
+
+
+
+
+ Test logs +
+
+
+
+
+ Uptime records +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/dashboard-marketing.html b/legacy/smartadmin/dashboard-marketing.html new file mode 100644 index 0000000..38c2d34 --- /dev/null +++ b/legacy/smartadmin/dashboard-marketing.html @@ -0,0 +1,2060 @@ + + + + + + + + Marketing Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +
+
+ +

Marketing Dashboard

+ + + + + + +
+
+
+
+ 7, 3 +
+
+ + Click Rate + + 70% + + + +
+
+
+
+ 1, 9 +
+
+ + Bounce Rate + + 10% + + + +
+
+
+
+ +
+ +
+
+
+
+
Orders
+

38,786

+
+ +115% + From previous period +
+
+
+
+
+
+
+
Product Sold
+

24,986

+
+ +55% + Last year +
+
+
+
+ +
+
+
+
Total Revenue
+

$15.4 M

+
+ +77% + Last year +
+ + + + 7% +
+
+
+
+
+
+
+
+
Income status
+

$1.2 M

+ +
+ New income +
+ + + + 10% +
+
+
+
+
+
+ +
+
+ +
+
+

Live Feeds +

+
+
+
+
+
+
+
+
+
+
+
+

Returning Target

+
+ + +
+
+
+
+
+
+
+
+ $44.34 GE + + + +
+ Redux margins and estimates +
+
+
+
+
78%
+
+
+
+
+
+
+
+
+
+
+
+

Efficiency Metrics

+
+ +
+
+
+
+
+
+
+
+ 3,4,5,8,2 +
+
+ +
37.56%
+
+
+
+
+ 5,3,1,7,9 +
+
+ +
56.34%
+
+
+
+
+ 3,4,3,5,5 +
+
+ +
12.17%
+
+
+
+
+ 6,4,7,5,6 +
+
+ +
19.77%
+
+
+
+
+
+
+
+
+
+
+
+
+

Sales Performance +

+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/dashboard-project-management.html b/legacy/smartadmin/dashboard-project-management.html new file mode 100644 index 0000000..f8d3628 --- /dev/null +++ b/legacy/smartadmin/dashboard-project-management.html @@ -0,0 +1,2018 @@ + + + + + + + + Project Management Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +
+
+ +

Project Management

+ + + + + + +
+
+
+
+ + COMPLETION RATE + + 80% + + + +
+
+
+
+ + TASKS DUE TODAY + + 12 + + + +
+
+
+
+ +
+ +
+
+
+
+
Active Projects
+

24

+
+ +3 + From last month +
+
+
+
+
+
+
+
Overdue Tasks
+

17

+
+ +5 + Since yesterday +
+
+
+
+
+
+
+
Team Members
+

36

+
+ +2 + New hires +
+
+
+
+
+
+
+
Open Issues
+

42

+
+ -7 + Resolved today +
+
+
+
+
+ +
+ + +
+
+
+

Development Phases

+
+
+
+ +
+ + + + + +
+
+
+
+
+
+ + +
+
+
+

Project Progress

+
+
+
+
+
+
+
+
+
+
+
+

Task Status

+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+

Team Performance

+
+
+
+
+
+
+
+
+
+
+
+

Weekly Activity

+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+

Team Workload

+
+
+ + +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+

Project Timeline

+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/dashboard-subscription.html b/legacy/smartadmin/dashboard-subscription.html new file mode 100644 index 0000000..88e3818 --- /dev/null +++ b/legacy/smartadmin/dashboard-subscription.html @@ -0,0 +1,2263 @@ + + + + + + + + Subscription Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +
+
+ +

Subscription Dashboard

+ + + + + + +
+
+ +
+
+ + + + +
+
+ +
+
+
+
+
+

Active Subscriptions

+ + 12,580 + +4.2% + +
+
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+
+

New Subscriptions

+ + 1,145 + +7.8% + +
+
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+
+

Cancellations

+ + 326 + -1.5% + +
+
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+
+

Monthly Recurring Revenue

+ + $42,860.00 + +6.1% + +
+
+
+
+
+ +
+
+
+
+
+
+
+ + +
+
+
+
+

Subscription Feed +

+
+
+
+
+
+
+ Conversion Rate + 65% +
+
+
+
+
+ Completion Rate + 50% +
+
+
+
+
+ Retention Rate + 75% +
+
+
+
+
+ Engagement Rate + 84% +
+
+
+
+
+ Marketing Budget + 97% +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

User Activity +

+
+
+
+
+
+
+
+
+
+
+
+

Data Stream +

+
+
+
+
+
+
+
+
+
+
+
+

Demographic Marketing +

+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/demo-bryan.html b/legacy/smartadmin/demo-bryan.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/demo-bryan.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

Not Found

+

The requested URL was not found on this server.

+
+
Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
+ diff --git a/legacy/smartadmin/demo-emma.html b/legacy/smartadmin/demo-emma.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/demo-emma.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

Not Found

+

The requested URL was not found on this server.

+
+
Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
+ diff --git a/legacy/smartadmin/docs-apexbarchartjs.html b/legacy/smartadmin/docs-apexbarchartjs.html new file mode 100644 index 0000000..6955c07 --- /dev/null +++ b/legacy/smartadmin/docs-apexbarchartjs.html @@ -0,0 +1,2499 @@ + + + + + + + + Apex Column Bar Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

ApexCharts.js

+ + + + + + +
Modern, Interactive Charts for Your Data Visualization Needs
+ + +
+ +
+
+ +
+

Modern, Interactive Charts for Your Data Visualization Needs

+

ApexCharts is a modern JavaScript charting library that helps developers create beautiful, interactive visualizations for web pages. With a focus on smooth animations, responsive design, and advanced features, ApexCharts makes data visualization both powerful and accessible.

+

+ In SmartAdmin, ApexCharts is integrated with a custom wrapper (apexchartsWrapper.js) that ensures visual consistency with the rest of the application and enhances the library with SmartAdmin-specific features. +

+
+ Pro Tip: SmartAdmin's ApexCharts wrapper prevents CSS injection from the original library, ensuring that only your theme's styles are used, and adds custom icon support using the SmartAdmin icon system. +
+
+ +
+

Installation

+

ApexCharts is included in the SmartAdmin theme with a custom wrapper. Here's how to set it up:

+ +

1. Basic Setup (Already Included)

+
+
// The following files are already included in the SmartAdmin theme:
+// - apexcharts.esm.js (Original ApexCharts library)
+// - apexchartsWrapper.js (SmartAdmin wrapper)
+
+ +

2. Initialize a Chart

+
+
// Import the SmartAdmin ApexCharts wrapper
+import SmartApexCharts from './thirdparty/apexchartsWrapper.js';
+
+document.addEventListener('DOMContentLoaded', function() {
+    // Create a basic bar chart
+    const options = {
+        chart: {
+            type: 'bar',
+            height: 350
+        },
+        series: [{
+            name: 'Sales',
+            data: [30, 40, 45, 50, 49, 60, 70, 91, 125]
+        }],
+        xaxis: {
+            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
+        }
+    };
+    
+    const chart = new SmartApexCharts(
+        document.querySelector('#my-chart'), 
+        options
+    );
+    
+    chart.render();
+});
+
+ +

HTML Structure

+
+
<!-- Basic Chart Container -->
+<div id="my-chart"></div>
+
+<!-- Panel-Based Chart Container (Recommended) -->
+<div id="panel-1" class="panel">
+    <div class="panel-hdr">
+        <h2>Sales <span class="fw-300"><i>Overview</i></span></h2>
+        <div class="panel-toolbar">
+            <button class="btn btn-panel" data-action="panel-collapse">
+                <!-- Panel controls -->
+            </button>
+        </div>
+    </div>
+    <div class="panel-container show">
+        <div class="panel-content">
+            <div id="my-chart"></div>
+        </div>
+    </div>
+</div>
+
+ +
+ Important: +
    +
  • Always use the SmartApexCharts class from the wrapper instead of the original ApexCharts to ensure proper integration with SmartAdmin.
  • +
  • The wrapper automatically applies SmartAdmin styling and prevents CSS injection from the original library.
  • +
  • For more advanced documentation, refer to the official ApexCharts documentation.
  • +
+
+
+ +
+

SmartAdmin Wrapper

+

SmartAdmin includes a custom wrapper for ApexCharts that enhances the library with theme-specific features. The wrapper is defined in apexchartsWrapper.js.

+ +
+
// Excerpt from the ApexCharts wrapper
+class SmartApexCharts extends OriginalApexCharts {
+    // Icon mapping for toolbar
+    static iconMap = {
+        'apexcharts-zoomin-icon': 'plus-circle',
+        'apexcharts-zoomout-icon': 'minus-circle',
+        'apexcharts-zoom-icon': 'plus',
+        'apexcharts-pan-icon': 'move',
+        'apexcharts-reset-icon': 'refresh-ccw',
+        'apexcharts-menu-icon': 'menu'
+    };
+
+    constructor(el, options) {
+        // Ensure options object exists
+        options = options || {};
+        options.chart = options.chart || {};
+        
+        // Global styling defaults
+        const defaults = {
+            chart: {
+                fontFamily: 'inherit',
+                disableCssInjection: true
+            },
+            title: {
+                style: {
+                    color: window.colorMap.bootstrapVars.bodyColor.hex
+                }
+            },
+            // ... additional defaults
+        };
+
+        // Merge options with defaults
+        options = SmartApexCharts.deepMerge(defaults, options);
+        
+        // Call parent constructor with merged options
+        super(el, options);
+        
+        // Style observer and other enhancements
+        // ...
+    }
+    
+    // Replace toolbar icons with custom sprite system icons
+    _replaceToolbarIcons(toolbar) {
+        // ... icon replacement code
+    }
+}
+
+ +
+ Pro Tip: The SmartAdmin wrapper ensures that charts automatically adapt to your theme's color scheme and maintains a consistent UI across your application. +
+
+ +
+

Chart Configuration

+

ApexCharts offers extensive configuration options. Here are some common chart types and configurations:

+ +

Bar Chart

+
+
const barOptions = {
+    chart: {
+        type: 'bar',
+        height: 350
+    },
+    plotOptions: {
+        bar: {
+            horizontal: false,
+            columnWidth: '55%',
+            borderRadius: 4
+        }
+    },
+    dataLabels: {
+        enabled: false
+    },
+    stroke: {
+        show: true,
+        width: 2,
+        colors: ['transparent']
+    },
+    series: [{
+        name: 'Net Profit',
+        data: [44, 55, 57, 56, 61, 58, 63]
+    }, {
+        name: 'Revenue',
+        data: [76, 85, 101, 98, 87, 105, 91]
+    }],
+    xaxis: {
+        categories: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    fill: {
+        opacity: 1
+    },
+    tooltip: {
+        y: {
+            formatter: function (val) {
+                return "$ " + val + " thousands"
+            }
+        }
+    }
+};
+
+const barChart = new SmartApexCharts(
+    document.querySelector('#bar-chart'), 
+    barOptions
+);
+barChart.render();
+
+ +

Line Chart

+
+
const lineOptions = {
+    chart: {
+        type: 'line',
+        height: 350,
+        zoom: {
+            enabled: true
+        }
+    },
+    series: [{
+        name: "Desktops",
+        data: [10, 41, 35, 51, 49, 62, 69, 91, 148]
+    }],
+    title: {
+        text: 'Product Trends by Month',
+        align: 'left'
+    },
+    grid: {
+        row: {
+            colors: ['#f3f3f3', 'transparent'],
+            opacity: 0.5
+        }
+    },
+    xaxis: {
+        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
+    }
+};
+
+const lineChart = new SmartApexCharts(
+    document.querySelector('#line-chart'), 
+    lineOptions
+);
+lineChart.render();
+
+ +

Area Chart

+
+
const areaOptions = {
+    chart: {
+        type: 'area',
+        height: 350,
+        stacked: true
+    },
+    dataLabels: {
+        enabled: false
+    },
+    stroke: {
+        curve: 'smooth'
+    },
+    series: [{
+        name: 'South',
+        data: [31, 40, 28, 51, 42, 109, 100]
+    }, {
+        name: 'North',
+        data: [11, 32, 45, 32, 34, 52, 41]
+    }],
+    xaxis: {
+        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul']
+    },
+    tooltip: {
+        x: {
+            format: 'dd/MM/yy HH:mm'
+        }
+    },
+    fill: {
+        type: 'gradient',
+        gradient: {
+            shadeIntensity: 1,
+            opacityFrom: 0.7,
+            opacityTo: 0.9,
+            stops: [0, 90, 100]
+        }
+    }
+};
+
+const areaChart = new SmartApexCharts(
+    document.querySelector('#area-chart'), 
+    areaOptions
+);
+areaChart.render();
+
+ +

Pie Chart

+
+
const pieOptions = {
+    chart: {
+        type: 'pie',
+        height: 350
+    },
+    series: [44, 55, 13, 43, 22],
+    labels: ['Team A', 'Team B', 'Team C', 'Team D', 'Team E'],
+    responsive: [{
+        breakpoint: 480,
+        options: {
+            legend: {
+                position: 'bottom'
+            }
+        }
+    }]
+};
+
+const pieChart = new SmartApexCharts(
+    document.querySelector('#pie-chart'), 
+    pieOptions
+);
+pieChart.render();
+
+
+ +
+

SmartAdmin Integration

+

For optimal integration with SmartAdmin, consider these tips:

+ +

Using Theme Colors

+

Use SmartAdmin color variables for consistent styling:

+
+
// Use SmartAdmin color variables
+const options = {
+    // ... other options
+    colors: [
+        'var(--primary-500)',
+        'var(--success-500)',
+        'var(--warning-500)',
+        'var(--danger-500)',
+        'var(--info-500)'
+    ],
+    fill: {
+        colors: [
+            'var(--primary-300)',
+            'var(--success-300)',
+            'var(--warning-300)',
+            'var(--danger-300)',
+            'var(--info-300)'
+        ]
+    }
+};
+
+ +

Responsive Configuration

+

Configure charts to be responsive based on screen size:

+
+
const options = {
+    // ... other options
+    chart: {
+        height: 350,
+        type: 'line',
+        animations: {
+            enabled: true,
+            easing: 'easeinout',
+            speed: 800
+        },
+        toolbar: {
+            show: true
+        },
+        zoom: {
+            enabled: true
+        },
+        responsive: [{
+            breakpoint: 576,
+            options: {
+                chart: {
+                    height: 250,
+                    toolbar: {
+                        show: false
+                    }
+                },
+                legend: {
+                    position: 'bottom',
+                    offsetY: 0
+                }
+            }
+        }]
+    }
+};
+
+ +

Dark Mode Compatibility

+

Make your charts compatible with both light and dark themes:

+
+
// Check if dark mode is active
+const isDarkMode = document.documentElement.classList.contains('theme-dark');
+
+const options = {
+    // ... other options
+    chart: {
+        foreColor: isDarkMode ? '#ffffff' : '#373a3c'
+    },
+    theme: {
+        mode: isDarkMode ? 'dark' : 'light'
+    },
+    tooltip: {
+        theme: isDarkMode ? 'dark' : 'light'
+    }
+};
+
+// Listen for theme changes if needed
+document.addEventListener('themeChanged', function(e) {
+    const isDark = e.detail.isDark;
+    chart.updateOptions({
+        chart: {
+            foreColor: isDark ? '#ffffff' : '#373a3c'
+        },
+        theme: {
+            mode: isDark ? 'dark' : 'light'
+        },
+        tooltip: {
+            theme: isDark ? 'dark' : 'light'
+        }
+    });
+});
+
+
+ +
+

Advanced Features

+ +

API Methods

+
+
// Get a reference to the chart
+const chart = new SmartApexCharts(element, options);
+chart.render();
+
+// Update series data
+chart.updateSeries([{
+    name: 'Sales',
+    data: [40, 55, 65, 11, 23, 44, 55, 75, 88]
+}]);
+
+// Update options
+chart.updateOptions({
+    title: {
+        text: 'Updated Title'
+    },
+    colors: ['var(--danger-500)']
+});
+
+// Add data point
+chart.appendData([{
+    data: [20]
+}]);
+
+// Toggle series visibility
+chart.toggleSeries('Series Name');
+
+// Show/hide specific data point's tooltip
+chart.toggleDataPointSelection(2, 0);
+
+// Reset zoom
+chart.resetSeries();
+
+// Destroy the chart
+chart.destroy();
+
+ +

Dynamic Data Updates

+
+
// Create a chart with real-time data updates
+const options = {
+    chart: {
+        type: 'line',
+        height: 350,
+        animations: {
+            enabled: true,
+            easing: 'linear',
+            dynamicAnimation: {
+                speed: 1000
+            }
+        },
+        toolbar: {
+            show: false
+        },
+        zoom: {
+            enabled: false
+        }
+    },
+    series: [{
+        name: 'Server Load',
+        data: [10, 15, 12, 14, 16, 18, 15, 17, 14, 13]
+    }],
+    stroke: {
+        curve: 'smooth',
+        width: 3
+    },
+    xaxis: {
+        categories: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00']
+    },
+    markers: {
+        size: 0
+    }
+};
+
+const chart = new SmartApexCharts(
+    document.querySelector('#real-time-chart'), 
+    options
+);
+chart.render();
+
+// Update data every 1 second
+setInterval(function() {
+    // Generate new data point
+    const newValue = Math.floor(Math.random() * 10) + 10;
+    
+    // Get current time for x-axis label
+    const now = new Date();
+    const timeLabel = now.getHours() + ':' + (now.getMinutes() < 10 ? '0' : '') + now.getMinutes();
+    
+    // Update chart
+    chart.updateSeries([{
+        data: [...chart.w.globals.series[0].slice(1), newValue]
+    }]);
+    
+    chart.updateOptions({
+        xaxis: {
+            categories: [...chart.w.globals.xaxis.categories.slice(1), timeLabel]
+        }
+    });
+}, 1000);
+
+ +

Mixed Chart Types

+
+
const mixedOptions = {
+    chart: {
+        height: 350,
+        type: 'line'
+    },
+    series: [{
+        name: 'Website',
+        type: 'column',
+        data: [440, 505, 414, 671, 227, 413, 201, 352, 752, 320, 257, 160]
+    }, {
+        name: 'Social Media',
+        type: 'line',
+        data: [23, 42, 35, 27, 43, 22, 17, 31, 22, 22, 12, 16]
+    }],
+    stroke: {
+        width: [0, 4]
+    },
+    title: {
+        text: 'Traffic Sources'
+    },
+    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+    xaxis: {
+        type: 'category'
+    },
+    yaxis: [{
+        title: {
+            text: 'Website Visits'
+        }
+    }, {
+        opposite: true,
+        title: {
+            text: 'Social Media'
+        }
+    }]
+};
+
+const mixedChart = new SmartApexCharts(
+    document.querySelector('#mixed-chart'), 
+    mixedOptions
+);
+mixedChart.render();
+
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Chart not rendering? Ensure the container element exists in the DOM before initializing.
  • +
  • Colors not applying? Make sure CSS variables are properly defined and accessible.
  • +
  • Icons missing in toolbar? Verify the SmartApexCharts wrapper is being used instead of the original library.
  • +
  • Custom styles not working? Check that you're not overriding the wrapper's style management.
  • +
+
+ +

Debugging Techniques

+
+
// Debug chart initialization
+try {
+    const chart = new SmartApexCharts(
+        document.querySelector('#chart'), 
+        options
+    );
+    chart.render();
+} catch (error) {
+    console.error('Chart initialization error:', error);
+}
+
+// Check if container exists
+const container = document.querySelector('#chart');
+if (!container) {
+    console.error('Chart container not found');
+    return;
+}
+
+// Verify series data
+console.log('Chart series data:', options.series);
+
+// Force explicit dimensions if auto-sizing issues
+const options = {
+    chart: {
+        height: 350,
+        width: '100%',
+        background: '#f8f9fa', // Visible background to check rendering
+    },
+    // ...other options
+};
+
+ +

Common Error Fixes

+
+
// Fix for empty or null data
+const validateData = (data) => {
+    if (!data || !Array.isArray(data)) {
+        return [0]; // Default fallback value
+    }
+    
+    // Replace null/undefined values with 0
+    return data.map(val => val === null || val === undefined ? 0 : val);
+};
+
+const options = {
+    // ...other options
+    series: [{
+        name: 'Sales',
+        data: validateData(salesData)
+    }]
+};
+
+// Fix for charts in hidden elements (tabs, modals)
+document.querySelector('.nav-tabs').addEventListener('shown.bs.tab', function (e) {
+    // Redraw charts in newly visible tab
+    const tabId = e.target.getAttribute('href');
+    const charts = document.querySelectorAll(tabId + ' .apexchart');
+    
+    charts.forEach(chart => {
+        if (chart.__smartChart) {
+            chart.__smartChart.render();
+        }
+    });
+});
+
+
+ +
+

Further Resources

+

For more advanced usage and detailed API documentation, refer to these resources:

+ + +
+
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-bootstrapbundlejs.html b/legacy/smartadmin/docs-bootstrapbundlejs.html new file mode 100644 index 0000000..28728b8 --- /dev/null +++ b/legacy/smartadmin/docs-bootstrapbundlejs.html @@ -0,0 +1,2240 @@ + + + + + + + + BootstrapBundle.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +

BootstrapBundle.js

+ + + + + + +
+ + +
+ +
+
+
+

Big things in big packages

+

Bootstrap 5 includes a powerful collection of JavaScript plugins that extend the functionality of its components. These plugins provide interactive features like dropdowns, modals, tooltips, and more without requiring you to write complex JavaScript code.

+ +
+ Pro Tip: Bootstrap 5 plugins are now fully written in vanilla JavaScript (no jQuery dependency) and can be used individually or all together via the bootstrap.js bundle. +
+
+ +
+

Installation

+

Include Bootstrap's JavaScript bundle after the CSS:

+ +
+
<!-- Bootstrap CSS -->
+<link href="plugins/bootstrap/bootstrap.min.css" rel="stylesheet">
+
+<!-- Bootstrap Bundle JS (includes Popper) -->
+<script src="plugins/bootstrap/bootstrap.bundle.min.js"></script>
+
+
+ +
+

Initialization

+

Bootstrap components can be initialized in two ways:

+ +

Via Data Attributes

+
+
<!-- Initialize a modal via data attributes -->
+<button type="button" data-bs-toggle="modal" data-bs-target="#exampleModal">
+  Launch modal
+</button>
+
+ +

Via JavaScript

+
+
// Initialize a modal via JavaScript
+var myModal = new bootstrap.Modal(document.getElementById('exampleModal'), {
+  backdrop: 'static',
+  keyboard: false
+});
+
+
+ +
+

Core JavaScript Components

+ +

Alerts

+
+
// Dismiss an alert via JavaScript
+var alertNode = document.querySelector('.alert')
+var alert = bootstrap.Alert.getInstance(alertNode)
+alert.close()
+
+// Via data attributes
+<div class="alert alert-warning alert-dismissible fade show" role="alert">
+  <strong>Holy guacamole!</strong> You should check in on some of those fields below.
+  <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+</div>
+
+

Official Alert Documentation

+ +

Modals

+
+
// Create a modal instance
+var myModal = new bootstrap.Modal(document.getElementById('myModal'), {
+  backdrop: true,
+  focus: true,
+  keyboard: true
+})
+
+// Show and hide methods
+myModal.show()
+myModal.hide()
+myModal.toggle()
+myModal.handleUpdate() // Readjust modal position in case of height changes
+
+// Events
+myModal.addEventListener('show.bs.modal', function () {
+  // do something when modal is about to be shown
+})
+myModal.addEventListener('shown.bs.modal', function () {
+  // do something when modal is shown
+})
+
+

Official Modal Documentation

+ +

Tooltips

+
+
// Initialize all tooltips on a page
+var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
+var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
+  return new bootstrap.Tooltip(tooltipTriggerEl)
+})
+
+// Options
+var tooltip = new bootstrap.Tooltip(element, {
+  boundary: 'clippingParents',
+  customClass: 'custom-tooltip',
+  delay: { show: 500, hide: 100 },
+  html: true,
+  placement: 'auto',
+  template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+  trigger: 'hover focus'
+})
+
+
+ Important: Tooltips rely on the third-party library Popper for positioning. Popper is included in bootstrap.bundle.min.js. +
+

Official Tooltip Documentation

+ +

Popovers

+
+
// Initialize all popovers
+var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
+var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
+  return new bootstrap.Popover(popoverTriggerEl)
+})
+
+// With options
+var popover = new bootstrap.Popover(document.querySelector('.example-popover'), {
+  container: 'body',
+  content: 'This is popover content',
+  html: true,
+  placement: 'right',
+  sanitize: true,
+  trigger: 'focus'
+})
+
+

Official Popover Documentation

+
+ +
+

Navigation Components

+ +

Dropdowns

+
+
// Initialize a dropdown
+var dropdown = new bootstrap.Dropdown(document.querySelector('.dropdown-toggle'))
+
+// Methods
+dropdown.toggle() // Shows or hides dropdown
+dropdown.show()   // Shows dropdown
+dropdown.hide()   // Hides dropdown
+
+// Via data attributes
+<div class="dropdown">
+  <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" 
+          data-bs-toggle="dropdown" aria-expanded="false">
+    Dropdown button
+  </button>
+  <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
+    <li><a class="dropdown-item" href="#">Action</a></li>
+    <li><a class="dropdown-item" href="#">Another action</a></li>
+    <li><a class="dropdown-item" href="#">Something else here</a></li>
+  </ul>
+</div>
+
+

Official Dropdown Documentation

+ +

Tabs

+
+
// Activate a tab
+var triggerTabList = [].slice.call(document.querySelectorAll('#myTab a'))
+triggerTabList.forEach(function (triggerEl) {
+  var tabTrigger = new bootstrap.Tab(triggerEl)
+
+  triggerEl.addEventListener('click', function (event) {
+    event.preventDefault()
+    tabTrigger.show()
+  })
+})
+
+// Programmatically show a tab
+var triggerEl = document.querySelector('#myTab a[href="#profile"]')
+bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name
+
+// Events
+var tabEl = document.querySelector('a[data-bs-toggle="tab"]')
+tabEl.addEventListener('shown.bs.tab', function (event) {
+  // Tab is now active
+})
+
+

Official Tabs Documentation

+ +

Collapse

+
+
// Initialize a collapsible element
+var myCollapse = document.getElementById('myCollapse')
+var bsCollapse = new bootstrap.Collapse(myCollapse, {
+  toggle: false // Don't toggle on initialization
+})
+
+// Methods
+bsCollapse.toggle() // Shows or hides collapsible element
+bsCollapse.show()   // Shows collapsible element
+bsCollapse.hide()   // Hides collapsible element
+
+// Via data attributes
+<p>
+  <a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button">
+    Link with href
+  </a>
+  <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample">
+    Button with data-bs-target
+  </button>
+</p>
+<div class="collapse" id="collapseExample">
+  <div class="card card-body">
+    Collapsible content here
+  </div>
+</div>
+
+

Official Collapse Documentation

+
+ + + +
+

Utility Components

+ +

Toasts

+
+
// Initialize a toast
+var toastElList = [].slice.call(document.querySelectorAll('.toast'))
+var toastList = toastElList.map(function (toastEl) {
+  return new bootstrap.Toast(toastEl, {
+    autohide: true,
+    delay: 5000
+  })
+})
+
+// Show a toast
+toastList.forEach(toast => toast.show())
+
+// Methods
+var myToast = bootstrap.Toast.getInstance(document.getElementById('myToast'))
+myToast.show()
+myToast.hide()
+
+// Via data attributes
+<div class="toast" role="alert" aria-live="assertive" aria-atomic="true" data-bs-autohide="true" data-bs-delay="5000">
+  <div class="toast-header">
+    <strong class="me-auto">Bootstrap</strong>
+    <small>11 mins ago</small>
+    <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+  </div>
+  <div class="toast-body">
+    Hello, world! This is a toast message.
+  </div>
+</div>
+
+

Official Toast Documentation

+ +

Scrollspy

+
+
// Initialize scrollspy via JavaScript
+var scrollSpy = new bootstrap.ScrollSpy(document.body, {
+  target: '#navbar-example'
+})
+
+// Get the current ScrollSpy instance
+var dataSpyList = [].slice.call(document.querySelectorAll('[data-bs-spy="scroll"]'))
+dataSpyList.forEach(function (dataSpyEl) {
+  bootstrap.ScrollSpy.getInstance(dataSpyEl)
+    .refresh() // Recalculate element positions and offsets
+})
+
+// Via data attributes
+<body data-bs-spy="scroll" data-bs-target="#navbar-example" data-bs-offset="0" tabindex="0">
+  <nav id="navbar-example">
+    <ul class="nav nav-tabs">
+      <li class="nav-item"><a class="nav-link" href="#fat">@fat</a></li>
+      <li class="nav-item"><a class="nav-link" href="#mdo">@mdo</a></li>
+    </ul>
+  </nav>
+  <div data-bs-spy="scroll" data-bs-target="#navbar-example" data-bs-offset="0" class="scrollspy-example">
+    <h4 id="fat">@fat</h4>
+    <p>...</p>
+    <h4 id="mdo">@mdo</h4>
+    <p>...</p>
+  </div>
+</body>
+
+

Official Scrollspy Documentation

+
+ +
+

Form Components

+ +

Form Validation

+
+
// Example starter JavaScript for disabling form submissions if there are invalid fields
+(function () {
+  'use strict'
+
+  // Fetch all the forms we want to apply custom Bootstrap validation styles to
+  var forms = document.querySelectorAll('.needs-validation')
+
+  // Loop over them and prevent submission
+  Array.prototype.slice.call(forms)
+    .forEach(function (form) {
+      form.addEventListener('submit', function (event) {
+        if (!form.checkValidity()) {
+          event.preventDefault()
+          event.stopPropagation()
+        }
+
+        form.classList.add('was-validated')
+      }, false)
+    })
+})()
+
+// HTML structure
+<form class="needs-validation" novalidate>
+  <div class="mb-3">
+    <label for="validationCustom01" class="form-label">First name</label>
+    <input type="text" class="form-control" id="validationCustom01" value="Mark" required>
+    <div class="valid-feedback">
+      Looks good!
+    </div>
+  </div>
+  <div class="mb-3">
+    <label for="validationCustom02" class="form-label">Last name</label>
+    <input type="text" class="form-control" id="validationCustom02" value="Otto" required>
+    <div class="invalid-feedback">
+      Please provide a last name.
+    </div>
+  </div>
+  <button class="btn btn-primary" type="submit">Submit form</button>
+</form>
+
+

Official Form Validation Documentation

+
+ +
+

Best Practices

+
    +
  • Use data attributes for simple implementations and JavaScript for more complex scenarios
  • +
  • Initialize components that aren't automatically activated (like tooltips and popovers)
  • +
  • Use event listeners to respond to component state changes
  • +
  • Ensure Popper.js is included when using tooltips, popovers, or dropdowns
  • +
  • Use the dispose method to clean up components when they're no longer needed
  • +
+ +
+ Pro Tip: For better performance, use data-bs-toggle="tooltip" on a parent element and initialize once, rather than initializing each tooltip individually. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Components not working? Make sure you've included bootstrap.bundle.min.js which contains Popper.js.
  • +
  • Tooltips or popovers not showing? Remember they must be initialized manually with JavaScript.
  • +
  • Modal backdrop issues? Check for proper z-index values and ensure you're not nesting modals incorrectly.
  • +
  • Scrollspy not highlighting correctly? Verify your target elements have the correct IDs and enough content to scroll.
  • +
  • Form validation not working? Ensure you've added the 'needs-validation' class and 'novalidate' attribute to your form.
  • +
+
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-build-notes.html b/legacy/smartadmin/docs-build-notes.html new file mode 100644 index 0000000..0a2023f --- /dev/null +++ b/legacy/smartadmin/docs-build-notes.html @@ -0,0 +1,2850 @@ + + + + + + + + Build Notes | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Build Notes

+ + + + + + +
Showcasing the latest build notes and changes with each iteration of the template.
+ + +
+ +
+

SmartAdmin v5 Upgrade

+

This release is a complete overhaul of SmartAdmin, rebuilt entirely from the ground up to take full advantage of Bootstrap 5. Unlike a simple version upgrade, this is a new template that eliminates legacy dependencies, modernizes the codebase, and enhances performance across the board.

+ +

One of the biggest changes is the removal of jQuery, making the template leaner, faster, and fully aligned with modern web development standards. The entire JavaScript structure has been rewritten to be vanilla JS-based, improving maintainability and reducing unnecessary dependencies. Additionally, Bootstrap 5 introduces a more flexible grid system, improved utility classes, and better handling of responsive design, all of which have been incorporated into this rebuild.

+ +

All components, layouts, and UI elements have been redesigned to reflect the latest trends while ensuring compatibility with Bootstrap 5 standards. The removal of outdated plugins and refactoring of existing features result in a cleaner, more efficient template. Furthermore, accessibility and usability improvements have been a major focus, ensuring a better experience for all users.

+ +

Since this is a full rewrite, it is not backward-compatible with previous versions of SmartAdmin. Developers upgrading from SmartAdmin v4 will need to adjust their custom implementations accordingly. However, this new version sets the foundation for easier future updates, better scalability, and long-term stability.

+ +

Thank you for your support, and we hope you enjoy the new and improved SmartAdmin v5!

+
+ +
+
+

Update v5.5.0 New Framework Versions Added

+ +
+
+ +
+
+

Update v5.4.0 New Seed Versions Added

+ +
+
+ +
+
+ +

Update v5.3.0 Seed & Full Versions Added

+ +
+
+ + +
+
+

Build v5.2.0 Enhanced Features and Accessibility. Take a backup of your old version folder

+ +
+
+ +
+
+

Build v5.1.0 Major Update with New Features and Improvements

+ +
+
+ + +
+
+

Build v 5.0.3 Enhanced Features and Accessibility

+ +
+
+ +
+
+

Build v 5.0.2 ST v1.2.0 & More... + Minor Update +

+ +
+
+ +
+
+

Build v 5.0.1 Seed Project Stable + Minor Update +

+ +
+
+ +
+
+

Build v 5.0.0 Seed Project + Major Update +

+ +
+
+ +
+
+

Build v 4.6.0 Improvements, bug fixes, plugin updates, and more...

+ +
+
+
+
+

Build v 4.5.1 Hot fix

+ +
+
+
+
+

Build v 4.5.0 Example pages, more plugins, and requested features

+ +
+
+
+
+

Build v 4.4.5 Hot Fix

+ +
+
+
+
+

Build v 4.4.3 BIG Documentation Update

+ +
+
+
+
+

Build v 4.4.1 Improvements and bug fixes

+ +
+
+
+
+
+

Build v 4.0.2 Improvements and bug fixes

+ +
+
+
+
+

Build v 4.0.1 Improvements and bug fixes

+ +
+
+ +
+
+
+

Build v 4.0.0 + Initial release +

+ +
+
+ +
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-easypiechartjs.html b/legacy/smartadmin/docs-easypiechartjs.html new file mode 100644 index 0000000..2253a2a --- /dev/null +++ b/legacy/smartadmin/docs-easypiechartjs.html @@ -0,0 +1,2440 @@ + + + + + + + + EasyPieChart.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

EasyPieChart.js

+ + + + + + +
Lightweight, Animated Circular Progress Indicators.
+ + +
+ +
+
+ +
+

Lightweight, Animated Circular Progress Indicators

+

EasyPieChart is a lightweight plugin to render simple, animated and retina-optimized pie charts. It uses the HTML5 canvas element for rendering and is designed to work well with percentages and visualize progress metrics in a compact, circular format.

+

+ These circular charts are perfect for dashboards, project progress tracking, and anywhere you need to show percentage-based information in a visually appealing way. +

+
+ Pro Tip: EasyPieChart works seamlessly with SmartAdmin's color system and can be combined with other elements like counters, icons, or text to create rich, informative widgets. +
+
+ +
+

Installation

+

EasyPieChart is included in the SmartAdmin theme. There are two ways to use it:

+ +

1. Automatic Implementation with Data Attributes

+
+
// The easypiechart.js file is already included in SmartAdmin
+// and automatically initializes all charts with the 'js-easy-pie-chart' class
+
+// Simply add elements with this class and configuration via data attributes:
+<div class="js-easy-pie-chart" data-percent="75" data-piesize="100" data-linewidth="10">
+    <span class="js-percent">0</span>%
+</div>
+
+// No JavaScript needed - charts initialize automatically on page load
+
+ +

2. Manual Implementation with Direct API

+
+
// Import the EasyPieChart constructor directly
+import EasyPieChart from './thirdparty/easypiechart/easypiechart.es6.js';
+
+document.addEventListener('DOMContentLoaded', function() {
+    // Basic initialization
+    const element = document.querySelector('.my-chart');
+    new EasyPieChart(element, {
+        barColor: 'var(--primary-500)',
+        trackColor: 'var(--primary-200)',
+        scaleColor: false,
+        lineWidth: 20,
+        size: 150,
+        animate: 1000,
+        onStep: function(from, to, percent) {
+            this.el.querySelector('.percent').textContent = Math.round(percent);
+        }
+    });
+    
+    // You can update the chart programmatically
+    // chart.update(65); // Updates to 65%
+});
+
+ +

HTML Structure

+
+
<!-- For automatic initialization with easypiechart.js -->
+<div class="js-easy-pie-chart" data-percent="75">
+    <span class="js-percent">0</span>%
+</div>
+
+<!-- With data attributes for configuration -->
+<div class="js-easy-pie-chart" 
+    data-percent="65" 
+    data-piesize="100"
+    data-linewidth="10" 
+    data-linecap="round">
+    <span class="js-percent">0</span>%
+</div>
+
+<!-- For manual initialization with easypiechart.es6.js -->
+<div class="my-chart" data-percent="33">
+    <svg class="sa-icon">
+        <use href="img/sprite.svg#star"></use>
+    </svg>
+    <div class="percent text-center mt-2">33</div>
+</div>
+
+ +
+ When to use each approach: +
    +
  • Automatic Implementation: Best for typical use cases. Just add HTML with the proper class and data attributes - no JavaScript needed.
  • +
  • Manual Implementation: Use when you need more control over initialization timing, want to update charts dynamically, or need custom behavior.
  • +
+
+ +
+ Important: +
    +
  • The element must have a data-percent attribute with the percentage value to display.
  • +
  • For automatic initialization, use .js-percent for the percentage text to update.
  • +
  • For manual initialization, use whatever selector you reference in your onStep callback.
  • +
  • EasyPieChart uses the HTML5 Canvas element, so it's not supported in very old browsers.
  • +
+
+
+ +
+

Configuration Options

+

EasyPieChart offers various configuration options to customize the appearance and behavior of your charts:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDefaultDescription
barColorString | Function'#ef1e25'The color of the progress bar. Can be a CSS color or a function that returns a color based on the current percentage.
trackColorString'#f2f2f2'The color of the track (background) of the progress bar.
scaleColorString | Boolean'#dfe0e0'The color of the scale lines. Set to false to disable scale lines.
scaleLengthNumber5Length of the scale lines (in pixels).
lineCapString'round'Shape of the line cap: 'butt', 'round', or 'square'.
lineWidthNumber3Width of the progress bar line (in pixels).
sizeNumber110Size of the pie chart (in pixels).
rotateNumber0Rotation of the chart in degrees (0-360).
animateBoolean | Object{duration: 1000, enabled: true}Animation configuration. Set to false to disable animation.
easingString | Function'linear'Animation easing function: 'linear', 'easeInOutQuad', etc.
onStartFunctionnullCallback function called at the start of animation.
onStepFunctionnullCallback function called during each animation step. Receives the from, to, and current percentage values.
onStopFunctionnullCallback function called at the end of animation.
+
+ +
+ Pro Tip: You can also set these options using HTML data attributes by prefixing the option name with data-. For example, data-bar-color, data-track-color, etc. +
+
+ +
+

Usage Examples

+

Here are some common usage patterns for EasyPieChart:

+ +

Basic Usage

+
+
// Basic chart with default values
+new EasyPieChart(document.querySelector('.chart-1'), {
+    barColor: 'var(--primary-500)',
+    trackColor: 'var(--primary-200)',
+    scaleColor: false,
+    lineWidth: 8,
+    size: 100
+});
+
+ +

Dynamic Color Based on Percentage

+
+
// Chart color changes based on percentage value
+new EasyPieChart(document.querySelector('.chart-2'), {
+    barColor: function(percent) {
+        if (percent < 25) {
+            return 'var(--danger-500)'; // Red for low percentages
+        } else if (percent < 50) {
+            return 'var(--warning-500)'; // Orange for medium-low
+        } else if (percent < 75) {
+            return 'var(--info-500)'; // Blue for medium-high
+        } else {
+            return 'var(--success-500)'; // Green for high percentages
+        }
+    },
+    trackColor: 'var(--gray-300)',
+    scaleColor: false,
+    lineWidth: 10,
+    size: 120
+});
+
+ +

With Animation and Callback

+
+
// Chart with custom animation and callbacks
+new EasyPieChart(document.querySelector('.chart-3'), {
+    barColor: 'var(--info-500)',
+    trackColor: 'var(--info-200)',
+    scaleColor: false,
+    lineWidth: 15,
+    size: 150,
+    animate: {
+        duration: 2000,
+        enabled: true
+    },
+    easing: 'easeOutBounce',
+    onStart: function() {
+        console.log('Animation started');
+    },
+    onStep: function(from, to, percent) {
+        this.el.querySelector('.percent').textContent = Math.round(percent);
+    },
+    onStop: function() {
+        console.log('Animation stopped');
+    }
+});
+
+ +

Updating Chart Values

+
+
// Create chart instance
+const element = document.querySelector('.chart-4');
+const chart = new EasyPieChart(element, {
+    barColor: 'var(--success-500)',
+    trackColor: 'var(--success-200)',
+    scaleColor: false,
+    lineWidth: 10,
+    size: 120
+});
+
+// Update chart value (e.g., after user action or data refresh)
+document.getElementById('update-btn').addEventListener('click', function() {
+    // Generate random percentage
+    const newValue = Math.floor(Math.random() * 100);
+    
+    // Update chart
+    chart.update(newValue);
+    
+    // Update display text
+    element.querySelector('.percent').textContent = newValue;
+});
+
+
+ +
+

SmartAdmin Integration

+

Here are some tips for integrating EasyPieChart with SmartAdmin:

+ +

Using Color Variables

+
+
// Use SmartAdmin CSS variables for consistent colors
+new EasyPieChart(element, {
+    barColor: 'var(--primary-500)', // Primary theme color
+    trackColor: 'var(--primary-200)', // Lighter shade of primary 
+    scaleColor: false,
+    lineWidth: 8,
+    size: 100
+});
+
+ +

Creating Panel-Based Widgets

+
+
<div class="panel">
+    <div class="panel-hdr">
+        <h2>Project <span class="fw-300"><i>Progress</i></span></h2>
+        <div class="panel-toolbar">
+            <button class="btn btn-panel" data-action="panel-collapse">
+                <svg class="sa-icon">
+                    <use href="img/sprite.svg#minus-circle"></use>
+                </svg>
+            </button>
+        </div>
+    </div>
+    <div class="panel-container show">
+        <div class="panel-content">
+            <div class="row">
+                <div class="col-md-4 text-center">
+                    <div class="js-pie-chart mb-2" data-percent="65" data-bar-color="var(--primary-500)" data-track-color="var(--primary-200)" data-line-width="5" data-size="100">
+                        <span class="percent"></span>%
+                    </div>
+                    <h5>Phase 1</h5>
+                </div>
+                <div class="col-md-4 text-center">
+                    <div class="js-pie-chart mb-2" data-percent="42" data-bar-color="var(--success-500)" data-track-color="var(--success-200)" data-line-width="5" data-size="100">
+                        <span class="percent"></span>%
+                    </div>
+                    <h5>Phase 2</h5>
+                </div>
+                <div class="col-md-4 text-center">
+                    <div class="js-pie-chart mb-2" data-percent="10" data-bar-color="var(--info-500)" data-track-color="var(--info-200)" data-line-width="5" data-size="100">
+                        <span class="percent"></span>%
+                    </div>
+                    <h5>Phase 3</h5>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+ +

Batch Initialization

+
+
// Initialize all pie charts on the page
+document.addEventListener('DOMContentLoaded', function() {
+    // Select all elements with the js-pie-chart class
+    const elements = document.querySelectorAll('.js-pie-chart');
+    
+    // Initialize each chart with options from data attributes
+    elements.forEach(function(element) {
+        // Get options from data attributes
+        const options = {
+            barColor: element.dataset.barColor || 'var(--primary-500)',
+            trackColor: element.dataset.trackColor || 'var(--primary-200)',
+            scaleColor: element.dataset.scaleColor === 'false' ? false : element.dataset.scaleColor,
+            lineWidth: parseInt(element.dataset.lineWidth || 3, 10),
+            size: parseInt(element.dataset.size || 110, 10),
+            animate: element.dataset.animate === 'false' ? false : parseInt(element.dataset.animate || 1000, 10),
+            onStep: function(from, to, percent) {
+                const percentElement = element.querySelector('.percent');
+                if (percentElement) {
+                    percentElement.textContent = Math.round(percent);
+                }
+            }
+        };
+        
+        // Initialize the chart
+        new EasyPieChart(element, options);
+    });
+});
+
+
+ +
+

Advanced Techniques

+ +

Custom Easing Functions

+
+
// Custom easing function
+const customEasing = function(t, b, c, d) {
+    // t: current time, b: beginning value, c: change in value, d: duration
+    if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
+    return c / 2 * ((t -= 2) * t * t + 2) + b;
+};
+
+// Use custom easing
+new EasyPieChart(element, {
+    barColor: 'var(--primary-500)',
+    trackColor: 'var(--primary-200)',
+    scaleColor: false,
+    lineWidth: 10,
+    size: 120,
+    easing: customEasing
+});
+
+ +

Responsive Size Adjustment

+
+
// Make charts responsive
+function initResponsiveCharts() {
+    const charts = [];
+    
+    // Initialize charts
+    document.querySelectorAll('.js-pie-chart').forEach(function(element) {
+        // Store original size
+        element.dataset.originalSize = element.dataset.size || '110';
+        
+        // Initialize with current size
+        const size = window.innerWidth < 768 ? 
+            Math.floor(parseInt(element.dataset.originalSize, 10) * 0.7) : // Smaller size on mobile
+            parseInt(element.dataset.originalSize, 10); // Original size on desktop
+            
+        const chart = new EasyPieChart(element, {
+            barColor: element.dataset.barColor || 'var(--primary-500)',
+            trackColor: element.dataset.trackColor || 'var(--primary-200)',
+            scaleColor: false,
+            lineWidth: parseInt(element.dataset.lineWidth || 3, 10),
+            size: size,
+            animate: 1000
+        });
+        
+        // Store chart instance for later updates
+        charts.push({ element: element, chart: chart });
+    });
+    
+    // Update sizes on window resize
+    window.addEventListener('resize', function() {
+        charts.forEach(function(item) {
+            // Recalculate size
+            const size = window.innerWidth < 768 ? 
+                Math.floor(parseInt(item.element.dataset.originalSize, 10) * 0.7) : 
+                parseInt(item.element.dataset.originalSize, 10);
+                
+            // Update chart
+            item.chart.options.size = size;
+            item.chart.update(parseInt(item.element.dataset.percent, 10));
+        });
+    });
+}
+
+// Call initialization on DOMContentLoaded
+document.addEventListener('DOMContentLoaded', initResponsiveCharts);
+
+ +

Animated Progress Updates

+
+
// Function to animate a chart from current value to target value
+function animateProgress(chartElement, targetPercent, duration = 1500, steps = 30) {
+    // Get chart instance
+    const chart = chartElement.__chart;
+    if (!chart) return;
+    
+    // Get current percent
+    const currentPercent = parseInt(chartElement.dataset.percent, 10);
+    
+    // Calculate step size
+    const stepSize = (targetPercent - currentPercent) / steps;
+    const stepTime = duration / steps;
+    
+    // Current step counter
+    let currentStep = 0;
+    
+    // Update function
+    function updateStep() {
+        currentStep++;
+        
+        // Calculate current value
+        const newPercent = Math.round(currentPercent + (stepSize * currentStep));
+        
+        // Update chart
+        chartElement.dataset.percent = newPercent;
+        chart.update(newPercent);
+        
+        // Continue animation if not complete
+        if (currentStep < steps) {
+            setTimeout(updateStep, stepTime);
+        }
+    }
+    
+    // Start animation
+    updateStep();
+}
+
+// Example usage
+const progressChart = document.querySelector('.project-progress');
+document.getElementById('complete-task').addEventListener('click', function() {
+    animateProgress(progressChart, 75); // Animate to 75%
+});
+
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Chart not rendering? Ensure the container element exists and has dimensions before initializing.
  • +
  • Percentage not updating during animation? Verify that you have included a .percent element and proper onStep callback.
  • +
  • Colors not applying? Check that CSS variables are correctly defined and accessible.
  • +
  • Canvas rendering issues? Ensure the browser supports HTML5 Canvas.
  • +
+
+ +

Debugging Tips

+
+
// Debug chart initialization
+try {
+    const element = document.querySelector('.chart');
+    console.log('Chart element:', element);
+    
+    if (!element) {
+        console.error('Chart element not found!');
+        return;
+    }
+    
+    // Log dimensions
+    console.log('Element size:', element.offsetWidth, element.offsetHeight);
+    
+    // Check if data-percent exists
+    console.log('Percent value:', element.dataset.percent);
+    
+    // Initialize with debug callback
+    const chart = new EasyPieChart(element, {
+        barColor: 'var(--primary-500)',
+        trackColor: 'var(--primary-200)',
+        scaleColor: false,
+        lineWidth: 10,
+        size: 100,
+        onStart: function() {
+            console.log('Animation started');
+        },
+        onStep: function(from, to, percent) {
+            console.log('Step:', from, to, percent);
+            const percentElement = element.querySelector('.percent');
+            if (percentElement) {
+                percentElement.textContent = Math.round(percent);
+            } else {
+                console.warn('No .percent element found inside chart container');
+            }
+        },
+        onStop: function() {
+            console.log('Animation completed');
+        }
+    });
+} catch (error) {
+    console.error('Chart initialization error:', error);
+}
+
+ +

Handling Hidden Elements

+

Charts initialized in hidden elements (e.g., collapsed panels, inactive tabs) may not render properly. Initialize or update them when they become visible:

+
+
// Initialize charts in tabs when they become visible
+document.querySelectorAll('[data-bs-toggle="tab"]').forEach(function(tab) {
+    tab.addEventListener('shown.bs.tab', function(e) {
+        // Get the newly activated tab content
+        const tabContent = document.querySelector(e.target.getAttribute('href'));
+        
+        // Find and initialize/update charts
+        tabContent.querySelectorAll('.js-pie-chart').forEach(function(element) {
+            // If chart already initialized, update it
+            if (element.__chart) {
+                element.__chart.update(parseInt(element.dataset.percent, 10));
+            } else {
+                // Otherwise initialize new chart
+                const chart = new EasyPieChart(element, {
+                    barColor: element.dataset.barColor || 'var(--primary-500)',
+                    trackColor: element.dataset.trackColor || 'var(--primary-200)',
+                    scaleColor: false,
+                    lineWidth: parseInt(element.dataset.lineWidth || 3, 10),
+                    size: parseInt(element.dataset.size || 110, 10)
+                });
+                
+                // Store reference to chart instance
+                element.__chart = chart;
+            }
+        });
+    });
+});
+
+
+ +
+

Further Resources

+

For more advanced usage and detailed API documentation, refer to these resources:

+ + +
+
+ + +
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-fullcalendarjs.html b/legacy/smartadmin/docs-fullcalendarjs.html new file mode 100644 index 0000000..3025e8c --- /dev/null +++ b/legacy/smartadmin/docs-fullcalendarjs.html @@ -0,0 +1,2445 @@ + + + + + + + + FullCalendar.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

FullCalendar.js

+ + + + + + +
FullCalendar.js page with notes.
+ + +
+ +
+
+ +
+

Powerful Calendar Management for Modern Web Applications

+

FullCalendar is a full-sized, drag & drop JavaScript event calendar for modern browsers. It's designed to be a highly customizable solution for displaying and managing events, appointments, and schedules in web applications.

+

+ In SmartAdmin, FullCalendar is integrated with a custom Bootstrap theme (fullcalendar.bootstrap.theme.js) that ensures visual consistency with the rest of the application. +

+
+ Pro Tip: SmartAdmin's FullCalendar integration uses the Smart Admin icon system and Bootstrap styling for seamless visual integration with your dashboard. +
+
+ +
+

Installation

+

FullCalendar needs to be added to your project. Here's how to set it up:

+ +

1. Including Required Files

+
+
// Add the scripts as modules in your HTML
+<script type="module" src="plugins/fullcalendar/index.global.min.js"></script>
+
+// Or import them in your JavaScript module
+import { FullCalendar } from './plugins/fullcalendar/fullcalendar.bundle.js';
+// Make sure to also include the CSS in your HTML or via a CSS loader
+
+ +

2. Initialize a Calendar

+
+
// After importing the modules as shown above
+document.addEventListener('DOMContentLoaded', function() {
+    const calendarEl = document.getElementById('calendar');
+    
+    const calendar = new FullCalendar.Calendar(calendarEl, {
+        themeSystem: 'bootstrap', // Use the SmartAdmin Bootstrap theme
+        initialView: 'dayGridMonth',
+        headerToolbar: {
+            left: 'prev,next today',
+            center: 'title',
+            right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+        },
+        events: [
+            {
+                title: 'Meeting',
+                start: '2023-01-10T14:30:00',
+                end: '2023-01-10T16:30:00'
+            },
+            {
+                title: 'Conference',
+                start: '2023-01-11',
+                end: '2023-01-13'
+            }
+        ]
+    });
+    
+    calendar.render();
+});
+
+ +

HTML Structure

+
+
<!-- Basic Calendar Container -->
+<div id="calendar"></div>
+
+<!-- Panel-Based Calendar Container (Recommended) -->
+<div id="panel-1" class="panel">
+    <div class="panel-hdr">
+        <h2>Calendar <span class="fw-300"><i>View</i></span></h2>
+        <div class="panel-toolbar">
+            <button class="btn btn-panel" data-action="panel-collapse">
+                <!-- Panel controls -->
+            </button>
+        </div>
+    </div>
+    <div class="panel-container show">
+        <div class="panel-content">
+            <div id="calendar"></div>
+        </div>
+    </div>
+</div>
+
+ +
+ Important: +
    +
  • You need to include the FullCalendar files in your project - they are not automatically loaded.
  • +
  • FullCalendar requires a container with a defined height. Without it, the calendar won't be visible.
  • +
  • Make sure to include both the JavaScript modules and the CSS file.
  • +
  • For more advanced documentation, refer to the official FullCalendar documentation.
  • +
+
+
+ +
+

SmartAdmin Bootstrap Theme

+

SmartAdmin includes a custom Bootstrap theme for FullCalendar that ensures visual consistency with the rest of the application. The theme is defined in fullcalendar.bootstrap.theme.js.

+ +
+
// Excerpt from the bootstrap theme definition
+class BootstrapTheme extends Theme {
+    // CSS classes for various elements
+    classes = {
+        root: 'fc-theme-bootstrap',
+        table: 'table table-calendar', // Uses Bootstrap table styling
+        tableCellShaded: 'table-active',
+        buttonGroup: 'btn-group',
+        button: 'btn btn-outline-default btn-sm',
+        buttonActive: 'active',
+        popover: 'popover',
+        popoverHeader: 'popover-header',
+        popoverContent: 'popover-body',
+    };
+    
+    // Icon definitions using SmartAdmin icon system
+    baseIconClass = 'sa';
+    iconClasses = {
+        close: 'sa-close',
+        prev: 'sa-chevron-left',
+        next: 'sa-chevron-right',
+        prevYear: 'sa-angle-double-left',
+        nextYear: 'sa-angle-double-right',
+    };
+}
+
+ +
+ Pro Tip: The SmartAdmin theme uses our custom icon system with the sa- prefix. This ensures all calendar controls match the rest of your application's design. +
+
+ +
+

Configuration Options

+

FullCalendar offers extensive configuration options. Here are some of the most common ones:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDescription
initialViewStringThe initial view when the calendar loads. Options: 'dayGridMonth', 'timeGridWeek', 'timeGridDay', 'listWeek'
headerToolbarObjectConfiguration for the calendar's header, with sections for left, center, and right
eventsArray/Function/StringThe events to display on the calendar. Can be an array of event objects, a function, or a URL
editableBooleanWhether the events can be dragged and resized
selectableBooleanWhether dates can be selected by clicking and dragging
businessHoursObject/BooleanEmphasizes certain time slots on the calendar
nowIndicatorBooleanWhether to show an indicator for the current time
weekNumbersBooleanWhether to show week numbers
heightNumber/String/FunctionSets the height of the calendar. Can be 'auto', a pixel value, or 'parent'
themeSystemStringThe theme system to use. In SmartAdmin, set this to 'bootstrap'
+
+ +
+ Pro Tip: When using FullCalendar with SmartAdmin, always set themeSystem: 'bootstrap' to use the custom Bootstrap theme integration. +
+
+ +
+

Event Handling

+

FullCalendar provides extensive event handling capabilities. Here's how to define and manage events:

+ +

Event Object Properties

+
+
// Basic event object structure
+{
+    id: '123',                      // Unique identifier
+    title: 'Meeting with Client',   // Event title
+    start: '2023-01-10T10:30:00',   // Start date/time (ISO8601 format)
+    end: '2023-01-10T12:30:00',     // End date/time (optional)
+    allDay: false,                  // Whether it's an all-day event
+    url: 'https://example.com',     // Makes the event clickable as a link (optional)
+    className: 'bg-success',        // CSS class names for styling (optional)
+    editable: true,                 // Whether this specific event is editable (optional)
+    extendedProps: {                // Additional custom data (optional)
+        department: 'Marketing',
+        location: 'Conference Room A'
+    }
+}
+
+ +

Event Sources

+
+
// Array of event objects
+events: [
+    { title: 'Event 1', start: '2023-01-01' },
+    { title: 'Event 2', start: '2023-01-05', end: '2023-01-07' }
+]
+
+// JSON feed (AJAX)
+events: '/api/events'
+
+// Function that fetches events
+events: function(info, successCallback, failureCallback) {
+    console.log('Fetching events for', info.startStr, 'to', info.endStr);
+    
+    fetch('/api/events?start=' + info.startStr + '&end=' + info.endStr)
+        .then(response => {
+            if (!response.ok) {
+                throw new Error('Network response was not ok');
+            }
+            return response.json();
+        })
+        .then(data => {
+            console.log('Loaded events:', data);
+            successCallback(data);
+        })
+        .catch(error => {
+            console.error('Error loading events:', error);
+            failureCallback(error);
+        });
+}
+
+// Multiple event sources with different colors
+eventSources: [
+    {
+        url: '/api/events/team-a',
+        color: 'var(--success-500)',   // All events from this source will be this color
+        textColor: 'white'             // Text color for this source
+    },
+    {
+        url: '/api/events/team-b',
+        color: 'var(--info-500)', 
+        textColor: 'white'
+    }
+]
+
+ +

Event Callbacks

+
+
const calendar = new Calendar(calendarEl, {
+    // ...other options
+    
+    // Triggered when an event is clicked
+    eventClick: function(info) {
+        alert('Event: ' + info.event.title);
+        
+        // Change the background color of the event
+        info.event.setProp('backgroundColor', 'var(--danger-500)');
+        
+        // To prevent default action (URL navigation)
+        info.jsEvent.preventDefault();
+    },
+    
+    // Triggered when an event is dragged and dropped
+    eventDrop: function(info) {
+        if (!confirm("Are you sure you want to move this event?")) {
+            info.revert(); // Revert the change
+        } else {
+            // Update the event in your database
+            updateEventInDatabase(info.event);
+        }
+    },
+    
+    // Triggered when an event is resized
+    eventResize: function(info) {
+        alert('Event has been resized. New end time: ' + info.event.end);
+    },
+    
+    // Triggered when dates are selected by clicking and dragging
+    select: function(info) {
+        const title = prompt('Enter a new title for your event:');
+        if (title) {
+            calendar.addEvent({
+                title: title,
+                start: info.startStr,
+                end: info.endStr,
+                allDay: info.allDay
+            });
+        }
+        calendar.unselect(); // Clear selection
+    }
+});
+
+
+ +
+

Advanced Features

+ +

API Methods

+
+
// Get a reference to the calendar
+const calendar = new Calendar(calendarEl, options);
+calendar.render();
+
+// Navigate to different dates
+calendar.next();     // Move to next month/week/day
+calendar.prev();     // Move to previous month/week/day
+calendar.today();    // Move to today
+calendar.gotoDate('2023-05-01'); // Jump to a specific date
+
+// Change views
+calendar.changeView('timeGridWeek');  // Switch to week view
+calendar.changeView('dayGridMonth');  // Switch to month view
+
+// Event manipulation
+const event = calendar.getEventById('123');
+if (event) {
+    event.setProp('title', 'Updated Title');   // Update title
+    event.setStart('2023-01-12T10:00:00');     // Update start time
+    event.setEnd('2023-01-12T12:00:00');       // Update end time
+    event.setAllDay(true);                     // Make it an all-day event
+    event.setExtendedProp('status', 'confirmed'); // Update custom property
+    event.remove();                            // Remove the event
+}
+
+// Add a new event
+calendar.addEvent({
+    title: 'New Event',
+    start: '2023-01-15'
+});
+
+// Programmatically select dates
+calendar.select('2023-01-24', '2023-01-26');
+
+// Refetch events (if using dynamic source)
+calendar.refetchEvents();
+
+ +

Localization

+
+
// Import the locale
+import frLocale from '@fullcalendar/core/locales/fr';
+
+const calendar = new Calendar(calendarEl, {
+    // ...other options
+    locale: frLocale,   // Use French locale
+    
+    // Or use multiple locales
+    locales: [frLocale, esLocale],
+    locale: 'fr'        // Set the active locale
+});
+
+ +

Business Hours

+
+
// Simple business hours (9am to 5pm, Monday to Friday)
+businessHours: true
+
+// Customized business hours
+businessHours: {
+    daysOfWeek: [1, 2, 3, 4, 5], // Monday to Friday
+    startTime: '08:00',           // 8am
+    endTime: '18:00'              // 6pm
+}
+
+// Multiple business hour ranges
+businessHours: [
+    {
+        daysOfWeek: [1, 2, 3, 4], // Monday to Thursday
+        startTime: '08:00',
+        endTime: '18:00'
+    },
+    {
+        daysOfWeek: [5],          // Friday
+        startTime: '08:00',
+        endTime: '14:00'          // 2pm (shorter day)
+    }
+]
+
+
+ +
+

SmartAdmin Integration

+

For optimal integration with SmartAdmin, consider these tips:

+ +

Event Colors

+

Use SmartAdmin color variables for consistent styling:

+
+
// Use SmartAdmin color variables
+events: [
+    {
+        title: 'Critical Task',
+        start: '2023-01-05',
+        backgroundColor: 'var(--danger-500)',
+        borderColor: 'var(--danger-500)'
+    },
+    {
+        title: 'Team Meeting',
+        start: '2023-01-07',
+        backgroundColor: 'var(--primary-500)',
+        borderColor: 'var(--primary-500)'
+    },
+    {
+        title: 'Completed Project',
+        start: '2023-01-09',
+        backgroundColor: 'var(--success-500)',
+        borderColor: 'var(--success-500)'
+    }
+]
+
+// Or use predefined SmartAdmin classes
+events: [
+    {
+        title: 'Warning Event',
+        start: '2023-01-11',
+        classNames: ['bg-warning-500', 'text-white']
+    },
+    {
+        title: 'Info Event',
+        start: '2023-01-13',
+        classNames: ['bg-info-500', 'text-white']
+    }
+]
+
+ +

Panel Integration

+

Use SmartAdmin panels for a consistent look:

+
+
<div class="row">
+    <div class="col-xl-12">
+        <div id="panel-1" class="panel">
+            <div class="panel-hdr">
+                <h2>
+                    Company <span class="fw-300"><i>Calendar</i></span>
+                </h2>
+                <div class="panel-toolbar">
+                    <button class="btn btn-panel" data-action="panel-collapse">
+                        <svg class="sa-icon">
+                            <use class="panel-collapsed-icon" href="img/sprite.svg#minus-circle"></use>
+                            <use class="panel-expand-icon" href="img/sprite.svg#plus-circle"></use>
+                        </svg>
+                    </button>
+                    <button class="btn btn-panel" data-action="panel-fullscreen">
+                        <svg class="sa-icon">
+                            <use href="img/sprite.svg#stop-circle"></use>
+                        </svg>
+                    </button>
+                </div>
+            </div>
+            <div class="panel-container show">
+                <div class="panel-content">
+                    <div id="calendar"></div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+ +

Modal Integration for Event Details

+
+
// Calendar setup with event click handling for modals
+const calendar = new Calendar(calendarEl, {
+    // ...other options
+    eventClick: function(info) {
+        // Prevent default action (URL navigation)
+        info.jsEvent.preventDefault();
+        
+        // Get event details
+        const event = info.event;
+        const title = event.title;
+        const start = event.start ? event.start.toLocaleString() : '';
+        const end = event.end ? event.end.toLocaleString() : '';
+        const description = event.extendedProps.description || '';
+        
+        // Populate and show modal with Bootstrap 5
+        const modal = new bootstrap.Modal(document.getElementById('event-details-modal'));
+        document.getElementById('modal-event-title').textContent = title;
+        document.getElementById('modal-event-time').textContent = start + ' - ' + end;
+        document.getElementById('modal-event-description').textContent = description;
+        
+        // Set up edit/delete buttons if needed
+        document.getElementById('edit-event-btn').onclick = function() {
+            // Open edit form for this event
+            openEditForm(event);
+            modal.hide();
+        };
+        
+        document.getElementById('delete-event-btn').onclick = function() {
+            if (confirm('Are you sure you want to delete this event?')) {
+                event.remove();
+                // Also delete from backend
+                deleteEventFromServer(event.id);
+                modal.hide();
+            }
+        };
+        
+        modal.show();
+    }
+});
+
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Calendar not displaying? Ensure the container has a defined height.
  • +
  • Events not appearing? Check the date range and time format of your events.
  • +
  • Styling issues? Make sure themeSystem: 'bootstrap' is set.
  • +
  • Icons not showing? Verify the custom theme is properly loaded.
  • +
+
+ +

Calendar Height Issues

+
+
// Set explicit height
+const calendar = new Calendar(calendarEl, {
+    // ...other options
+    height: 800  // Explicit pixel height
+});
+
+// Or use parent container's height
+const calendar = new Calendar(calendarEl, {
+    // ...other options
+    height: 'parent'  // Use parent container's height
+});
+
+// Or use CSS
+#calendar {
+    height: 800px;
+}
+
+// For responsive height
+#calendar {
+    height: calc(100vh - 250px); /* Viewport height minus offset */
+}
+
+
+ +

AJAX Loading Issues

+
+
// Debug AJAX event loading
+events: function(info, successCallback, failureCallback) {
+    console.log('Fetching events for', info.startStr, 'to', info.endStr);
+    
+    fetch('/api/events?start=' + info.startStr + '&end=' + info.endStr)
+        .then(response => {
+            if (!response.ok) {
+                throw new Error('Network response was not ok');
+            }
+            return response.json();
+        })
+        .then(data => {
+            console.log('Loaded events:', data);
+            successCallback(data);
+        })
+        .catch(error => {
+            console.error('Error loading events:', error);
+            failureCallback(error);
+        });
+}
+
+
+ +
+

Further Resources

+

For more advanced usage and detailed API documentation, refer to these resources:

+ + +
+
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-getting-started.html b/legacy/smartadmin/docs-getting-started.html new file mode 100644 index 0000000..26224be --- /dev/null +++ b/legacy/smartadmin/docs-getting-started.html @@ -0,0 +1,2781 @@ + + + + + + + + Getting Started | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Getting Started

+ + + + + + +
+ + +
+ +
+
+ +
+

SmartAdmin - Modern UI Framework

+

Welcome to SmartAdmin v5, an advanced UI Bootstrap 5 Admin and Dashboard template designed for modern web applications. This guide will walk you through setting up and running the SmartAdmin project, understanding its core components, and customizing it to fit your needs.

+ +
+ Pro Tip: SmartAdmin v5 is built with vanilla JavaScript and Bootstrap 5, eliminating jQuery dependencies for better performance and modern development practices. +
+
+ +
+
If you have not set up Node.js or are not using Node.js, then skip the below step 
+and open the dist folder directly in the editor.
+Run a local server
+
+ +
Recommended Extensions
+ + +
+

Prerequisites

+

Before you begin, ensure you have the following tools installed on your computer:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToolVersionPurposeInstallation
Node.js & npmv14.x or laterJavaScript runtime and package managernodejs.org
Gulp CLILatestTask automation toolkitnpm install gulp-cli -g
GitLatestVersion control systemgit-scm.com
Code EditorAnyFor editing project filesVS Code, Sublime Text, etc.
+
+ +

Verify your installations with these commands:

+
+
node --version
+npm --version
+gulp --version
+git --version
+
+
+ +
+

Installation

+

Follow these steps to set up SmartAdmin v5:

+ +
Step 1: Extract the Package
+
+ +
# Open the SmartAdmin project folder (Full or Seed) in your preferred code editor (e.g., VS Code, WebStorm, Sublime Text, etc.)
+ + +
Step 2: Install Dependencies
+
+
# Option 1: If Using yarn (https://yarnpkg.com/getting-started)
+yarn install
+                                                
+# --------------------------------------------
+
+# Option 2: If Using npm (https://docs.npmjs.com/)
+npm install
+
+
+# --------------------------------------------
+
+# Option 3: If Using bun (https://bun.sh/docs)
+bun install
+
+
+ + + +
Step 3: Build the Project
+
+
// Default task - builds everything and starts watching for changes
+gulp
+
+// Build all assets without watching
+gulp build
+
+// RTL (Right-to-Left) support
+gulp rtl
+
+// Build RTL all assets without watching
+gulp rtlbuild
+
+
+ +
+ Important: Always run the project through a web server, not by opening HTML files directly, to avoid AJAX and module loading issues. +
+
+ +
+

Project Structure

+

Understanding the SmartAdmin v5 file organization is crucial for effective development. Click the tree view below to expand and collapse the project structure:

+ +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Directory/FileDescription
/srcSource files (SCSS, JS, views)
/distCompiled and processed files (created by Gulp)
/src/sassSCSS source files for styling
/src/scriptsJavaScript source files
gulpfile.jsGulp configuration and tasks
plugins.config.jsPlugins File Path
package.jsonProject dependencies and scripts
+
+
+ +
+

Gulp Build System

+

SmartAdmin v5 uses Gulp to automate development tasks. The gulpfile.js defines various tasks for building, processing, and serving the application.

+ +
Key Gulp Tasks
+

Here are the main Gulp tasks you'll use during development:

+
+
// Default task - builds everything and starts watching for changes
+gulp
+
+// Build all assets without watching
+gulp build
+
+// RTL (Right-to-Left) support
+gulp rtl
+
+// Build RTL all assets without watching
+gulp rtlbuild
+
+
+ + +
Customizing the Gulp Build Process
+

You can customize the Gulp build process to fit your project needs:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CustomizationHow to Implement
Adding New TasksDefine new task functions and register them with gulp.task()
Modifying Build PathsUpdate the config.paths object to change source or destination directories
Adding PreprocessorsInstall additional Gulp plugins and add them to the appropriate task pipeline
Optimizing for ProductionAdd minification, compression, and optimization steps to the build tasks
Adding LintingIncorporate ESLint, Stylelint, or other linting tools into the build process
+
+ + +
Integrating with Backend Build Systems
+

When integrating SmartAdmin with a backend framework, you may need to adjust the Gulp workflow:

+ +
    +
  • ASP.NET / .NET Core: Configure Gulp to output files to the wwwroot directory and integrate with MSBuild
  • +
  • Laravel: Adjust paths to work with Laravel's public directory structure or integrate with Laravel Mix
  • +
  • Django: Configure Gulp to output to Django's static files directory and integrate with collectstatic
  • +
  • Node.js: Set up Gulp to work alongside Express or other Node.js frameworks
  • +
+ +
+ Pro Tip: You can extend the Gulp tasks by modifying gulpfile.js to add custom build steps, optimizations, or deployment processes. Consider creating environment-specific configurations for development, testing, and production. +
+
+ + +
+

Customizing index.html as Your Application Foundation

+

The index.html file serves as an ideal starting point for building your application. This blank template provides the basic structure while allowing maximum flexibility for integration with various backend frameworks.

+ +
Understanding index.html
+

Let's examine the key components of the index.html file:

+ + +
Example of index.html Structure
+

The index.html file provides the overall layout structure for your application. It includes:

+
+
<!DOCTYPE html>
+@@include('./partials/app-html.html')
+
+<head>
+    @@include('./partials/app-meta-title.html', {"pageTitle": 'Blank Page'})
+
+    @@include('./partials/app-head-css.html')
+</head>
+
+<body>
+
+    <div class="app-wrap">
+
+        @@include('./partials/app-header.html')
+
+        @@include('./partials/app-sidebar.html')
+
+        <main class="app-body">
+            <div class="app-content">
+
+                <div class="content-wrapper">
+
+                    @@include('./partials/app-pagetitle.html', {
+                        "pageTitle": "Blank Page",
+                        "pageSubTitle1": "Blank Page",
+                        "pageSubText": "Blank Page"
+                    })
+
+                </div>
+
+
+            </div>
+
+            @@include('./partials/app-footer.html')
+
+        </main>
+
+        @@include('./partials/app-drawer.html')
+
+        @@include('./partials/app-settings.html')
+
+    </div>
+
+    @@include('./partials/app-scripts.html')
+
+    <script src="scripts/pages/blank.js"></script>
+
+</body>
+
+</html>
+
+
Key Configuration Parameters
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescriptionUsage
pageTitleSets the page title in the browser tabString value for the HTML title tag
currentPageIdentifies the current page for navigation highlightingShould match a navigation item ID in navigation.json
additionalCSSArray of CSS files specific to this pagePaths relative to the dist directory
additionalJSArray of JavaScript files specific to this pagePaths relative to the dist directory
additionalScriptsInline JavaScript to be executed on page loadRaw JavaScript code as a template literal
contentRightContent for the right sidebar (if enabled)HTML content as a template literal
contentMain page contentHTML content as a template literal
+
+ +
Example of app-head-css.html Structure
+

The app-head-css.html file provides the base head css for the application:

+
+
<!-- Vendor css -->
+<link rel="stylesheet" media="screen, print" href="plugins/waves/waves.min.css">
+
+<!-- Base css -->
+<link rel="stylesheet" media="screen, print" href="css/smartapp.css">
+
+<!-- Icons css-->
+<link rel="stylesheet" media="screen, print" href="webfonts/smartadmin/sa-icons.css">
+<link rel="stylesheet" media="screen, print" href="webfonts/fontawesome/fontawesome.css">
+
+<!-- Save/Load functionality JavaScript -->
+<script src="scripts/core/saveloadscript.js"></script>
+                                        
+
+ +
Example of app-scripts.html Structure
+

The app-scripts.html file provides the base scripts for the application:

+
+
<!-- Core scripts -->
+<script src="plugins/bootstrap/bootstrap.bundle.min.js"></script>
+<script src="scripts/core/smartNavigation.js"></script>
+<script src="scripts/core/smartFilter.js"></script>
+<script src="scripts/core/smartSlimscroll.js"></script>
+
+<!-- Dependable scripts -->
+<script src="plugins/sortablejs/Sortable.min.js"></script>
+<script src="plugins/waves/waves.min.js"></script>
+
+<!-- App.js -->
+<script src="scripts/core/smartApp.js"></script>
+
+ + +
+ +
+

Best Practices for Customization

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PracticeDescription
Modular StructureBreak down the UI into reusable components/partials that can be maintained independently
Configuration-DrivenUse configuration objects to control page behavior rather than hardcoding values
Asset ManagementImplement proper bundling and minification for production environments
Authentication IntegrationPlan for user authentication UI components and session management
API CommunicationEstablish patterns for frontend-backend communication (REST, GraphQL, etc.)
State ManagementImplement appropriate state management for your application complexity
Error HandlingCreate consistent error handling and user feedback mechanisms
+
+ +
+ Pro Tip: Create a standardized page template early in your development process. This template should include all common elements (navigation, footer, authentication UI) and provide clear extension points for page-specific content. +
+
+ +
+

Theme Colors and Customization

+

SmartAdmin v5 provides a powerful theming system that allows you to customize the visual appearance of your application. The theme is built using SCSS variables, making it easy to change colors, typography, and other visual elements.

+ +
Understanding _variables.scss
+

The core of the theming system is the src/sass/app/_variables.scss file. This file contains all the color definitions and other visual variables that control the appearance of the template:

+ +
+
// Core theme colors in _variables.scss
+$color-primary:                     #2196F3;
+$color-success:                     #1dc9b7;
+$color-info:                        #a486d1;
+$color-warning:                     #ffc241;
+$color-danger:                      #fd3995;
+$color-fusion:                      darken(desaturate(adjust-hue($color-primary, 5), 80%), 25%);
+$color-white:                       #fff;
+$color-black:                       #000; 
+
+// Color Maps
+$theme-colors: (
+  'primary': $color-primary,
+  'success': $color-success,
+  'info': $color-info,
+  'warning': $color-warning,
+  'danger': $color-danger,
+  'fusion': $color-fusion,
+  'dark': $color-black,
+  'light': $color-white,
+  'secondary': #6c757d
+);
+
+ +
Customizing Theme Colors
+

To change the theme colors of your application:

+ +
    +
  1. Locate and open src/sass/app/_variables.scss
  2. +
  3. Modify the color variables to match your brand or design requirements
  4. +
  5. Run gulp to compile the SCSS into CSS
  6. +
  7. Or use gulp to start the watch process for automatic compilation on changes
  8. +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Color VariableUsed ForDefault Value
$color-primaryPrimary buttons, links, active states, and brand elements#2196F3 (Blue)
$color-successSuccess messages, confirmations, and positive actions#1dc9b7 (Teal)
$color-infoInformation messages, help text, and neutral notifications#a486d1 (Purple)
$color-warningWarning messages, caution indicators, and attention-grabbing elements#ffc241 (Amber)
$color-dangerError messages, destructive actions, and critical alerts#fd3995 (Pink)
+
+ +
CSS Variables System
+

SmartAdmin v5 converts SCSS variables into CSS custom properties (variables) for runtime theme switching capabilities. This enables features like dark mode and dynamic theming:

+ +
+
// CSS Variables in :root
+:root {
+    // Theme Colors
+    @each $name, $value in $theme-colors {
+        // Base color
+        --bs-#{$name}: #{$value};
+        
+        // RGB values for rgba() usage
+        --bs-#{$name}-rgb: #{red($value)}, #{green($value)}, #{blue($value)};
+        
+        // Text emphasis colors
+        --bs-#{$name}-text-emphasis: #{darken($value, 30%)};
+        
+        // Subtle background colors
+        --bs-#{$name}-bg-subtle: #{lighten($value, 30%)};
+        
+        // Subtle border colors
+        --bs-#{$name}-border-subtle: #{lighten($value, 20%)};
+    }
+}
+
+ +
Compiling Theme Changes
+

After making changes to the SCSS variables, you need to compile them to CSS using Gulp:

+ +
+
// Compile SCSS to CSS (one-time)
+gulp
+
+// Build all assets without watching
+gulp build
+
+// RTL (Right-to-Left) support
+gulp rtl
+
+// Build RTL all assets without watching
+gulp rtlbuild
+
+ +
+
Dark Mode Customization
+

The dark mode theme is defined in the same file using the [data-bs-theme=dark] selector found in src/sass/app/_darkmode.scss

+ +
Inverse Key Variables
+

The following variables are used to customize the dark mode theme which has the proper inverse effect:

+
    +
  • --bs-body-color / --bs-body-color-rgb: Inverse Text color
  • +
  • --bs-body-bg / --bs-body-bg-rgb: Inverse Background color
  • +
  • --bs-emphasis-color / --bs-emphasis-color-rgb: Inverse Emphasis color
  • +
  • --bs-border-color / --bs-border-color-rgb: Inverse Border color
  • +
+ +
+
// Dark theme overrides 
+[data-bs-theme=dark] {
+    color-scheme: dark;
+    --bs-body-color: #{$body-color-dark};
+    --bs-body-color-rgb: #{red($body-color-dark)}, #{green($body-color-dark)}, #{blue($body-color-dark)};
+    --bs-body-bg: #{$body-bg-dark};
+    --bs-body-bg-rgb: #{red($body-bg-dark)}, #{green($body-bg-dark)}, #{blue($body-bg-dark)};
+    --bs-emphasis-color: #{$body-emphasis-color-dark};
+    --bs-emphasis-color-rgb: #{red($body-emphasis-color-dark)}, #{green($body-emphasis-color-dark)}, #{blue($body-emphasis-color-dark)};
+    --bs-secondary-color: #{$body-secondary-color-dark};
+    --bs-secondary-color-rgb: #{red($body-secondary-color-dark)}, #{green($body-secondary-color-dark)}, #{blue($body-secondary-color-dark)};
+    --bs-secondary-bg: #{$body-secondary-bg-dark};
+    --bs-secondary-bg-rgb: #{red($body-secondary-bg-dark)}, #{green($body-secondary-bg-dark)}, #{blue($body-secondary-bg-dark)};
+    --bs-tertiary-color: #{$body-tertiary-color-dark};
+    --bs-tertiary-color-rgb: #{red($body-tertiary-color-dark)}, #{green($body-tertiary-color-dark)}, #{blue($body-tertiary-color-dark)};
+    --bs-tertiary-bg: #{$body-tertiary-bg-dark};
+    --bs-tertiary-bg-rgb: #{red($body-tertiary-bg-dark)}, #{green($body-tertiary-bg-dark)}, #{blue($body-tertiary-bg-dark)};
+    --bs-primary-text-emphasis: #{$primary-text-emphasis-dark};
+    --bs-secondary-text-emphasis: #{$secondary-text-emphasis-dark};
+    --bs-success-text-emphasis: #{$success-text-emphasis-dark};
+    --bs-info-text-emphasis: #{$info-text-emphasis-dark};
+    --bs-warning-text-emphasis: #{$warning-text-emphasis-dark};
+    --bs-danger-text-emphasis: #{$danger-text-emphasis-dark};
+    --bs-light-text-emphasis: #{$light-text-emphasis-dark};
+    --bs-dark-text-emphasis: #{$dark-text-emphasis-dark};
+    --bs-primary-bg-subtle: #{$primary-bg-subtle-dark};
+    --bs-secondary-bg-subtle: #{$secondary-bg-subtle-dark};
+    --bs-success-bg-subtle: #{$success-bg-subtle-dark};
+    --bs-info-bg-subtle: #{$info-bg-subtle-dark};
+    --bs-warning-bg-subtle: #{$warning-bg-subtle-dark};
+    --bs-danger-bg-subtle: #{$danger-bg-subtle-dark};
+    --bs-light-bg-subtle: #{$light-bg-subtle-dark};
+    --bs-dark-bg-subtle: #{$dark-bg-subtle-dark};
+    --bs-primary-border-subtle: #{$primary-border-subtle-dark};
+    --bs-secondary-border-subtle: #{$secondary-border-subtle-dark};
+    --bs-success-border-subtle: #{$success-border-subtle-dark};
+    --bs-info-border-subtle: #{$info-border-subtle-dark};
+    --bs-warning-border-subtle: #{$warning-border-subtle-dark};
+    --bs-danger-border-subtle: #{$danger-border-subtle-dark};
+    --bs-light-border-subtle: #{$light-border-subtle-dark};
+    --bs-dark-border-subtle: #{$dark-border-subtle-dark};
+    --bs-border-color: #{$border-color-dark};
+    --bs-border-color-translucent: #{$border-color-translucent-dark};
+    --bs-headings-color: #{$headings-color-dark};
+    --bs-link-color: #{$link-color-dark};
+    --bs-link-hover-color: #{$link-hover-color-dark};
+    --bs-code-color: #{$code-color-dark};
+    --bs-mark-color: #{$mark-color-dark};
+    --bs-mark-bg: #{$mark-bg-dark};
+    --bs-form-select-indicator-color: #{$form-select-indicator-color-dark};
+    --bs-form-select-indicator: #{$form-select-indicator-dark};
+    --bs-form-switch-color: #{$form-switch-color-dark};
+    --bs-form-switch-bg-image: #{$form-switch-bg-image-dark};
+    --bs-form-valid-color: #{$form-valid-color-dark};
+    --bs-form-valid-border-color: #{$form-valid-border-color-dark};
+    --bs-form-invalid-color: #{$form-invalid-color-dark};
+    --bs-form-invalid-border-color: #{$form-invalid-border-color-dark};
+    --bs-accordion-icon-color: #{$accordion-icon-color-dark};
+    --bs-accordion-icon-active-color: #{$accordion-icon-active-color-dark};
+    --bs-accordion-button-icon: #{$accordion-button-icon-dark};
+    --bs-accordion-button-active-icon: #{$accordion-button-active-icon-dark};
+}
+
+
+ +
+ Important: Always use the Gulp tasks to compile your SCSS changes. Direct edits to CSS files will be overwritten during the next compilation. +
+ +
Advanced Customization Tips
+
    +
  • Color Shades: SmartAdmin generates color shades (50-900) for each theme color automatically
  • +
  • Typography: Customize fonts by changing the --font-family variable
  • +
  • Layout: Adjust layout dimensions with variables like --app-header-height and --menu-width
  • +
  • Custom Themes: Create multiple theme files by extending the base variables
  • +
+ +
+ Pro Tip: For large projects, create a separate _custom-variables.scss file that imports and overrides the default variables. This approach makes it easier to update the template while preserving your customizations. +
+
+ +
+

Examples and Usage

+
Toggle Actions
+

Toggle actions are used to switch classes on and off elements:

+
+
<!-- Basic Toggle Example -->
+<button data-action="toggle" data-class="my-class">Toggle Class</button>
+
+<!-- Toggle with Dependencies -->
+<button data-action="toggle" 
+        data-class="primary-theme"
+        data-dependency="dark-mode light-mode">Toggle Theme</button>
+
+<!-- Toggle with Co-dependencies -->
+<button data-action="toggle" 
+        data-class="menu-expanded"
+        data-codependence="menu-collapsed">Toggle Menu</button>
+
+ +
Panel Actions
+

SmartApp.js includes comprehensive panel management features:

+
+
<!-- Panel Controls -->
+<div class="panel">
+    <div class="panel-hdr">
+        <h2>Example Panel</h2>
+        <div class="panel-toolbar">
+            <button class="btn btn-panel" data-action="panel-collapse">
+                <i class="fa fa-minus"></i>
+            </button>
+            <button class="btn btn-panel" data-action="panel-fullscreen">
+                <i class="fa fa-expand"></i>
+            </button>
+            <button class="btn btn-panel" data-action="panel-close">
+                <i class="fa fa-times"></i>
+            </button>
+        </div>
+    </div>
+    <div class="panel-container">
+        <div class="panel-content">
+            Panel content here
+        </div>
+    </div>
+</div>
+
+ +
Sound Controls
+

SmartApp.js provides audio playback functionality:

+
+
<!-- Play Sound Example -->
+<button data-action="playsound" 
+        data-soundfile="notification.mp3">
+    Play Notification
+</button>
+
+<!-- Play Sound with Path -->
+<button data-action="playsound" 
+        data-soundpath="media/sound/" 
+        data-soundfile="alert.mp3">
+    Play Alert
+</button>
+
+ +
Class Management
+

Direct class manipulation on target elements:

+
+
<!-- Add Class Example -->
+<button data-action="add-class" 
+        data-target="#myElement" 
+        data-classname="active">
+    Activate Element
+</button>
+
+<!-- Remove Class Example -->
+<button data-action="remove-class" 
+        data-target="#myElement" 
+        data-classname="disabled">
+    Enable Element
+</button>
+
+<!-- Toggle Replace Example -->
+<button data-action="toggle-replace" 
+        data-target="#myElement"
+        data-removeclass="light-theme"
+        data-addclass="dark-theme">
+    Switch Theme
+</button>
+
+ +
Working Examples
+
+

Here are some live examples you can try:

+ +
+
+

Demo Panel

+
+ + + +
+
+ +
+
+

This is a working example of a panel with all controls enabled. Tip:Remember to use the btn-has-sound class when adding a sound to a button.

+ +
+
+
+ + +

Adds the class "demo-active" to the HTML element and saves the settings

+ + +

Adds/Remove the class "highlight" to the #demoElement element

+
+ + +
+
+
+ +
+

Theme Settings and Customization

+

SmartAdmin provides a comprehensive theme settings system that allows you to customize the layout and appearance of your application. These settings can be controlled through data attributes and are automatically saved to local storage.

+ +
Available Theme Settings
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingClassDescriptionExample
Header Fixedset-header-fixedFixes the header position at the top of the page +
+ + +
+
Navigation Full Heightset-nav-fullExtends navigation to full page height +
+ + +
+
Navigation Fixedset-nav-fixedFixes the navigation position +
+ + +
+
Navigation Collapsedset-nav-collapsedCollapses the navigation to icons only +
+ + +
+
Navigation Minifiedset-nav-minifiedMinifies the navigation menu +
+ + +
+
Dark Navigationset-nav-darkApplies dark theme to navigation +
+ + +
+
+
+ +
Implementation Example
+

Here's how to implement theme settings in your application:

+
+
<!-- Theme Setting Toggle -->
+<div class="form-check">
+    <input class="form-check-input" 
+           type="checkbox" 
+           id="actionNavFull" 
+           data-action="toggle" 
+           data-class="set-nav-full"
+           data-codependence="set-nav-collapsed">
+    <label class="form-check-label" for="actionNavFull">
+        Navigation full height
+    </label>
+</div>
+
+<!-- Theme Setting with Dependencies -->
+<div class="form-check">
+    <input class="form-check-input" 
+           type="checkbox" 
+           id="actionNavCollapsed" 
+           data-action="toggle" 
+           data-class="set-nav-collapsed"
+           data-dependency="set-nav-full">
+    <label class="form-check-label" for="actionNavCollapsed">
+        Navigation collapsed
+    </label>
+</div>
+
+ +
Understanding Dependencies
+

Theme settings can have dependencies and co-dependencies:

+
    +
  • data-dependency: Classes that must be added when this setting is enabled
  • +
  • data-codependence: Classes that must be removed when this setting is enabled
  • +
+ +
+ Pro Tip: Theme settings are automatically saved to local storage and restored on page reload. You can reset all settings using the appDOM.resetStyle() method. +
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-peitychartsjs.html b/legacy/smartadmin/docs-peitychartsjs.html new file mode 100644 index 0000000..245f046 --- /dev/null +++ b/legacy/smartadmin/docs-peitychartsjs.html @@ -0,0 +1,2349 @@ + + + + + + + + PeityCharts.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

PeityCharts.js

+ + + + + + +
+ + +
+ +
+
+ +
+

Elegant Inline Data Visualization

+

Peity (pronounced "pie-ty") is a simple jQuery plugin that converts element text like "5/10" or "2,5,3,9" into small inline charts. These charts are perfect for showing trends or simple metrics directly alongside text or in tables.

+

+ With minimal footprint and easy implementation, Peity charts are ideal for dashboards, reports, and anywhere you need to display data visualizations in a compact format. +

+
+ Pro Tip: Peity charts work seamlessly with SmartAdmin's color system and can be placed directly inline with text, in tables, or within other UI components for at-a-glance data visualization. +
+
+ +
+

Installation

+

Peity is included in the SmartAdmin theme with an ES6 implementation that doesn't require jQuery. Here's how to use it:

+ +

1. Including the Script

+
+
// Add the script as a module in your HTML
+<script type="module" src="./thirdparty/peitycharts.js"></script>
+
+// Or import it in your JavaScript module
+import './thirdparty/peitycharts.js';
+
+ +

2. Automatic Implementation with Data Attributes

+
+
// Once the module is loaded, it will automatically initialize charts with these classes:
+// - .peity-pie
+// - .peity-donut
+// - .peity-line
+// - .peity-bar
+// - Any element with a [data-peity] attribute
+
+// Simply add elements with the appropriate class:
+<span class="peity-pie">4/7</span>
+<span class="peity-donut">5/8</span>
+<span class="peity-line">5,3,9,6,5,9,7,3,5,2</span>
+<span class="peity-bar">5,3,9,6,5,9,7,3,5,2</span>
+
+// You can also use the data-peity attribute for custom options:
+<span class="peity-donut" data-peity='{"fill":["var(--success-500)","var(--bs-border-color)"],"innerRadius":20,"radius":40}'>5/8</span>
+
+ +

3. Manual Implementation with Direct API

+
+
// Import the PeityAPI directly in your module
+import { PeityAPI } from './thirdparty/peity.es6.js';
+
+document.addEventListener('DOMContentLoaded', function() {
+    // Create a chart manually
+    const element = document.querySelector('.my-custom-chart');
+    PeityAPI.create(element, 'pie', {
+        fill: ['var(--primary-500)', 'var(--bs-border-color)'],
+        radius: 30
+    });
+    
+    // Create multiple charts with the same options
+    document.querySelectorAll('.line-charts').forEach(element => {
+        PeityAPI.create(element, 'line', {
+            fill: 'var(--info-200)',
+            stroke: 'var(--info-500)',
+            width: 100,
+            height: 30
+        });
+    });
+});
+
+ +

HTML Structure

+
+
<!-- For automatic initialization -->
+<span class="peity-pie">4/7</span>
+<span class="peity-donut">5/8</span>
+<span class="peity-line">5,3,9,6,5,9,7,3,5,2</span>
+<span class="peity-bar">5,3,9,6,5,9,7,3,5,2</span>
+
+<!-- With data attributes for custom options -->
+<span class="peity-pie" data-peity='{"fill":["var(--primary-500)","var(--bs-border-color)"],"radius":25}'>4/7</span>
+
+<!-- For manual initialization -->
+<span class="my-custom-chart">4/7</span>
+
+ +
+ When to use each approach: +
    +
  • Automatic Implementation: Best for typical use cases. Just add HTML with the proper class and data attributes - minimal JavaScript needed.
  • +
  • Manual Implementation: Use when you need more control over initialization timing, want to update charts dynamically, or need custom behavior.
  • +
+
+ +
+ Important: +
    +
  • The SmartAdmin implementation of Peity does not require jQuery - it's a native ES6 module.
  • +
  • Charts are rendered as SVG elements, which means they scale nicely for retina displays.
  • +
  • The implementation automatically handles theming with SmartAdmin CSS variables.
  • +
+
+
+ +
+

Chart Types

+

Peity supports four main chart types, each with its own configuration options:

+ +

Pie Charts

+

Pie charts display a single value as a portion of a whole. They're ideal for showing percentages or proportions.

+
+
// HTML
+<span class="pie-chart">4/7</span>
+
+// JavaScript
+\$(".pie-chart").peity("pie", {
+    fill: ["var(--primary-500)", "var(--gray-300)"],
+    radius: 30,
+    innerRadius: 0
+});
+
+ +

Donut Charts

+

Donut charts are similar to pie charts but with a hole in the center. They provide the same information but with a different visual style.

+
+
// HTML
+<span class="donut-chart">5/8</span>
+
+// JavaScript
+\$(".donut-chart").peity("donut", {
+    fill: ["var(--success-500)", "var(--gray-300)"],
+    radius: 30,
+    innerRadius: 15
+});
+
+ +

Line Charts

+

Line charts display a series of values as a connected line. They're great for showing trends over time.

+
+
// HTML
+<span class="line-chart">5,3,9,6,5,9,7,3,5,2</span>
+
+// JavaScript
+\$(".line-chart").peity("line", {
+    fill: "var(--primary-200)",
+    stroke: "var(--primary-500)",
+    width: 100,
+    height: 30
+});
+
+ +

Bar Charts

+

Bar charts represent values as vertical bars. They're useful for comparing values across categories.

+
+
// HTML
+<span class="bar-chart">5,3,9,6,5,9,7,3,5,2</span>
+
+// JavaScript
+\$(".bar-chart").peity("bar", {
+    fill: ["var(--primary-500)"],
+    width: 100,
+    height: 30
+});
+
+
+ +
+

Configuration Options

+

Each chart type has its own set of configuration options:

+ +

Pie & Donut Options

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDefaultDescription
fillArray["#ff9900", "#fff4dd", "#ffc66e"]The colors of the segments (first value's color, then second, etc.)
radiusNumber8The outer radius of the chart in pixels
innerRadiusNumber0 (pie), radius/2 (donut)The inner radius of the chart in pixels (creates the "donut hole")
widthNumbernull (element width)Override the width of the chart
heightNumbernull (element height)Override the height of the chart
delimiterString"/"The delimiter between the values
+
+ +

Line Chart Options

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDefaultDescription
delimiterString","The delimiter between the values
fillString"#c6d9fd"The color of the area beneath the line
heightNumber16The height of the chart in pixels
maxNumbernull (auto)The maximum value of the y-axis
minNumber0The minimum value of the y-axis
strokeString"#4d89f9"The color of the line
strokeWidthNumber1The thickness of the line in pixels
widthNumber32The width of the chart in pixels
+
+ +

Bar Chart Options

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDefaultDescription
delimiterString","The delimiter between the values
fillArray["#4d89f9"]The colors of the bars (positive, negative)
heightNumber16The height of the chart in pixels
maxNumbernull (auto)The maximum value of the y-axis
minNumber0The minimum value of the y-axis
paddingNumber0.1The padding between bars as a fraction of the bar width
widthNumber32The width of the chart in pixels
+
+ +
+ Pro Tip: When using Peity with SmartAdmin, leverage CSS variables in your chart colors for consistent theming across light and dark modes. +
+
+ +
+

Advanced Usage

+ +

Custom Colors with SmartAdmin Theme

+
+
// Use SmartAdmin CSS variables for consistent colors
+import { PeityAPI } from './thirdparty/peity/peity.es6.js';
+
+document.addEventListener('DOMContentLoaded', function() {
+    // Create pie charts with primary colors
+    document.querySelectorAll('.peity-pie-primary').forEach(element => {
+        PeityAPI.create(element, 'pie', {
+            fill: ['var(--primary-500)', 'var(--primary-200)'],
+            radius: 20
+        });
+    });
+    
+    // Create donut charts with success colors
+    document.querySelectorAll('.peity-donut-success').forEach(element => {
+        PeityAPI.create(element, 'donut', {
+            fill: ['var(--success-500)', 'var(--gray-300)'],
+            innerRadius: 15,
+            radius: 30
+        });
+    });
+    
+    // Create line charts with info colors
+    document.querySelectorAll('.peity-line-info').forEach(element => {
+        PeityAPI.create(element, 'line', {
+            fill: 'var(--info-200)',
+            stroke: 'var(--info-500)',
+            width: 100,
+            height: 30
+        });
+    });
+});
+
+ +

Data Updates

+

Peity charts can be updated dynamically to reflect new data:

+
+
// Get the chart element
+const updatingElement = document.querySelector('.updating-chart');
+const values = updatingElement.textContent.split(',').map(Number);
+
+// Create the chart
+const chart = PeityAPI.create(updatingElement, 'line', {
+    width: 100,
+    height: 30,
+    stroke: 'var(--info-500)',
+    fill: 'var(--info-200)'
+});
+
+// Update the chart with new data
+setInterval(function() {
+    const random = Math.round(Math.random() * 10);
+    values.shift();
+    values.push(random);
+    
+    updatingElement.textContent = values.join(',');
+    chart.draw(); // Redraw the chart with new data
+}, 1000);
+
+ +

Using in Tables

+
+
<table class="table table-striped">
+    <thead>
+        <tr>
+            <th>Project</th>
+            <th>Progress</th>
+            <th>Trend</th>
+            <th>Status</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr>
+            <td>Website Redesign</td>
+            <td><span class="peity-pie">3/8</span></td>
+            <td><span class="peity-line">5,3,9,6,5,9,7</span></td>
+            <td><span class="badge bg-success">Active</span></td>
+        </tr>
+        <tr>
+            <td>Mobile App</td>
+            <td><span class="peity-pie">7/8</span></td>
+            <td><span class="peity-line">3,5,6,8,2,5,9</span></td>
+            <td><span class="badge bg-warning">Pending</span></td>
+        </tr>
+    </tbody>
+</table>
+
+<script type="module">
+    // The charts will be automatically initialized by peitycharts.js
+    // No additional code needed if using the built-in classes
+</script>
+
+ +

Global Defaults

+

Set global defaults for all Peity charts of a specific type:

+
+
// Import the PeityAPI
+import { PeityAPI } from './thirdparty/peity/peity.es6.js';
+
+// Set defaults for all pie charts
+PeityAPI.defaults.pie = {
+    delimiter: "/",
+    fill: ["var(--primary-500)", "var(--gray-300)"],
+    radius: 20
+};
+
+// Set defaults for all line charts
+PeityAPI.defaults.line = {
+    delimiter: ",",
+    fill: "var(--primary-200)",
+    height: 20,
+    min: 0,
+    stroke: "var(--primary-500)",
+    strokeWidth: 1,
+    width: 80
+};
+
+// Now initialize charts (they'll use the new defaults)
+document.querySelectorAll('.peity-pie').forEach(element => {
+    PeityAPI.create(element, 'pie');
+});
+
+document.querySelectorAll('.peity-line').forEach(element => {
+    PeityAPI.create(element, 'line');
+});
+
+
+ +
+

Further Resources

+

For more information about Peity charts in SmartAdmin:

+ +
    +
  • SmartAdmin ES6 Implementation: See the source files: +
      +
    • src/scripts/pages/peitycharts.js - Auto-initialization logic
    • +
    • src/scripts/core/thirdparty/peity/peity.es6.js - Core Peity implementation
    • +
    +
  • +
  • Original Peity Project (reference only): GitHub Repository
  • +
+ +
+ Note: +

The SmartAdmin implementation is a custom ES6 version without jQuery dependency. The original jQuery-based Peity project is provided only as a reference. + If you're looking for more complex charts and dashboards, consider other libraries included in SmartAdmin like ApexCharts or EasyPieChart.

+
+ +
+ Pro Tip: The SmartAdmin implementation adds extra features: +
    +
  • Automatic chart type detection based on data format
  • +
  • Smart color defaults that work with the theme system
  • +
  • Support for CSS variables in all color properties
  • +
  • Zero jQuery dependency for modern web applications
  • +
+
+
+
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-smartappjs.html b/legacy/smartadmin/docs-smartappjs.html new file mode 100644 index 0000000..d57d146 --- /dev/null +++ b/legacy/smartadmin/docs-smartappjs.html @@ -0,0 +1,2286 @@ + + + + + + + + smartApp.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

SmartApp.js

+ + + + + + +
+ + + +
+ + +
+
+ +
+

DOM Magic, Simplified!

+

SmartApp.js is an enhanced vanilla JavaScript plugin designed for DOM manipulation, UI controls, event handling, security features, and audio management. It provides efficient methods to interact with UI elements, handle class modifications, execute panel actions, play sounds, and more.

+ +
+ Pro Tip: SmartApp.js is designed with security in mind, featuring built-in sanitization for class names, selectors, and data attributes. +
+
+ +
+

Installation

+

Include the SmartApp.js script in your HTML file:

+ +
+
<script src="scripts/core/smartApp.js"></script>
+
+ +

Initialize the plugin:

+
+
document.addEventListener('DOMContentLoaded', function() {
+appDOM.checkActiveStyles().debug(true);
+});
+
+
+ +
+

Configuration

+

SmartApp.js comes with a flexible configuration system:

+ +
+
const config = {
+debug: false,
+focusDelay: 200,
+defaultSoundPath: 'media/sound/',
+maxClassNameLength: 50,
+maxSelectorLength: 255,
+fullscreenConfirmMessage: 'Do you want to enter fullscreen mode?',
+selectors: {
+    actionButtons: '[data-action]'
+},
+sound: {
+    preload: false,
+    volume: 1.0,
+    fadeIn: false,
+    fadeInDuration: 500
+}
+};
+
+ +
+ Important: Security limits like maxClassNameLength and maxSelectorLength help prevent DoS attacks. +
+
+ +
+

Core Features

+ +
Style Management
+
+
// Reset all styles
+appDOM.resetStyle();
+
+// Check active styles
+appDOM.checkActiveStyles();
+
+ +
Class Manipulation
+
+
// Programmatic Methods
+// Toggle class
+appDOM.toggleClass('html', 'nav-function-hidden');
+appDOM.toggleClass('.my-element', 'active');
+
+// Toggle Replace (swap one class for another)
+appDOM.toggleReplace('.my-element', 'btn-default', 'btn-primary');
+appDOM.toggleReplace('#myButton', null, 'active'); // Just add without removing
+
+// Toggle Swap (toggle class on specific target)
+appDOM.toggleSwap('html', 'nav-function-top');
+appDOM.toggleSwap('.drawer', 'active');
+
+// Chain multiple actions
+appDOM
+  .toggleClass('html', 'nav-function-hidden')
+  .toggleReplace('#myButton', 'btn-default', 'btn-primary')
+  .toggleSwap('.drawer', 'active');
+
+// Using data attributes
+<button data-action="toggle" data-class="dark-mode">Toggle Dark Mode</button>
+<button data-action="toggle-replace" data-target=".btn" data-removeclass="btn-default" data-addclass="btn-primary">Update Button</button>
+<button data-action="toggle-swap" data-target=".drawer" data-toggleclass="active">Toggle Drawer</button>
+
+
+ +
+

Security Features

+ +
Class Name Sanitization
+
+
// Sanitizes class names to prevent XSS
+const sanitizedClass = security.sanitizeClassName(className);
+
+// Only allows valid characters: a-z, A-Z, 0-9, -, _
+// Removes invalid characters
+// Enforces maximum length
+
+ +
Selector Sanitization
+
+
// Prevents CSS injection attacks
+const sanitizedSelector = security.sanitizeSelector(selector);
+
+// Blocks dangerous patterns:
+// - HTML tags
+// - javascript: URLs
+// - data: URLs
+// - Expression functions
+// - Timing functions
+
+ +
+ Important: All inputs are automatically sanitized to prevent XSS and injection attacks. +
+
+ +
+

Theme Management

+

SmartApp.js includes a built-in theme management system that handles light and dark themes:

+ +
Theme Controls
+
+
// Toggle theme programmatically
+appDOM.toggleTheme();
+
+// Using data attributes
+<button data-action="toggle-theme">Toggle Theme</button>
+
+// Check current theme
+const currentTheme = document.documentElement.getAttribute('data-bs-theme');
+
+// Theme is automatically saved to localStorage and restored on page load
+// Supports Bootstrap's data-bs-theme attribute
+// Toggles between 'light' and 'dark' modes
+
+ +
+ Pro Tip: Theme preferences are automatically persisted across sessions using localStorage. +
+
+ +
+

Event Handlers

+ +
Available Actions
+
+
// Theme toggling
+<button data-action="toggle-theme">Toggle Theme</button>
+
+// Toggle class
+<button data-action="toggle" data-class="active">Toggle</button>
+
+// Replace class
+<button data-action="toggle-replace" 
+    data-target="#element"
+    data-removeclass="hidden"
+    data-addclass="visible">Show Element</button>
+
+// Swap class
+<button data-action="toggle-swap"
+    data-target="#drawer"
+    data-toggleclass="open">Toggle Drawer</button>
+
+// Programmatic usage
+// Theme
+appDOM.toggleTheme();
+
+// Class manipulation
+appDOM.toggleClass('html', 'nav-function-hidden');
+appDOM.toggleReplace('.button', 'btn-default', 'btn-primary');
+appDOM.toggleSwap('.drawer', 'active');
+
+// Method chaining
+appDOM
+    .toggleTheme()
+    .toggleClass('html', 'nav-function-hidden')
+    .toggleSwap('.drawer', 'active');
+
+ +
+ Pro Tip: All methods support chaining and include built-in error handling and logging. +
+
+ +
+

Panel Actions

+ +
Available Panel Controls
+
+
// Panel action methods
+handlers.panelActions.collapse(element);
+handlers.panelActions.fullscreen(element);
+handlers.panelActions.close(element);
+
+// Example usage
+document.querySelector('.panel-collapse-btn').addEventListener('click', function() {
+handlers.panelActions.collapse(this);
+});
+
+// Using data attributes
+<button data-action="panel-collapse">Collapse</button>
+<button data-action="panel-fullscreen">Fullscreen</button>
+<button data-action="panel-close">Close</button>
+
+ +
+ Pro Tip: Panel actions automatically handle tooltips and transitions. +
+
+ +
+

Fullscreen Mode

+ +
Fullscreen Controls
+
+
// Fullscreen methods
+fullscreenHandler.enter();
+fullscreenHandler.exit();
+fullscreenHandler.isFullscreen();
+
+// Example usage
+document.querySelector('.fullscreen-btn').addEventListener('click', function() {
+handlers.appFullscreen();
+});
+
+
+ +
+

Audio Features

+ +
Sound Management
+
+
// Play sound
+<button data-action="playsound" data-soundfile="click.mp3">Play Sound</button>
+
+// Pause sound
+<button data-action="pausesound">Pause Sound</button>
+
+// Preload sound
+appDOM.preloadSound('background.mp3');
+
+// Play and pause sounds programmatically
+handlers.playSound(element);
+handlers.pauseSound(element);
+
+ +
+ Note: Sound files are automatically cached for better performance. +
+
+ +
+

Utilities

+ +
Debounce Function
+
+
const debouncedFunction = utils.debounce(() => {
+// Your code here
+}, 300);
+
+ +
Element Validation
+
+
if (utils.validateElement(element, 'Button')) {
+// Element exists, proceed
+}
+
+
+ +
+

Color Extraction

+

SmartApp.js includes a powerful color extraction system that automatically extracts Bootstrap colors and theme variables. This feature is particularly useful for dynamic theme switching and color management.

+ +
Color Map Structure
+
+
window.colorMap = {
+    // Bootstrap category colors (primary, danger, success, warning, info)
+    primary: {
+        50: { 
+            hex: "#e6f1fe", 
+            rgb: "rgb(230, 241, 254)",
+            rgba: function(opacity) { return "rgba(230, 241, 254, " + opacity + ")"; },
+            values: "230, 241, 254"
+        },
+        100: { 
+            hex: "#cce3fd", 
+            rgb: "rgb(204, 227, 253)",
+            rgba: function(opacity) { return "rgba(204, 227, 253, " + opacity + ")"; },
+            values: "204, 227, 253"
+        },
+        // ... more shades up to 900
+    },
+    // ... other categories
+
+    // Bootstrap theme variables
+    bootstrapVars: {
+        bodyBg: { 
+            hex: "#ffffff", 
+            rgb: "rgb(255, 255, 255)",
+            rgba: function(opacity) { return "rgba(255, 255, 255, " + opacity + ")"; },
+            values: "255, 255, 255" 
+        },
+        bodyColor: { 
+            hex: "#212529", 
+            rgb: "rgb(33, 37, 41)",
+            rgba: function(opacity) { return "rgba(33, 37, 41, " + opacity + ")"; },
+            values: "33, 37, 41"
+        },
+        // ... other variables
+    }
+};
+
+ +
Automatic Color Extraction
+

Colors are automatically extracted in these scenarios:

+
    +
  • On initial page load
  • +
  • When theme is toggled between light and dark modes
  • +
  • When manually calling the extraction function
  • +
+ +
+
// Manual color extraction
+utils.extractColors();
+
+// Listen for color extraction completion
+window.addEventListener('colorMapReady', () => {
+    console.log('Colors extracted:', window.colorMap);
+});
+
+ +
Using Extracted Colors
+
+
// Access primary color at different shades
+const primaryLight = window.colorMap.primary[100].hex;
+const primaryMain = window.colorMap.primary[500].hex;
+const primaryDark = window.colorMap.primary[900].hex;
+
+// Access theme variables
+const bodyBg = window.colorMap.bootstrapVars.bodyBg.hex;
+const bodyColor = window.colorMap.bootstrapVars.bodyColor.hex;
+
+// Use colors with opacity (rgba)
+const primaryWithOpacity = window.colorMap.primary[500].rgba(0.7); // 70% opacity
+const bgWithOpacity = window.colorMap.bootstrapVars.bodyBg.rgba(0.3); // 30% opacity
+
+// Use in CSS properties
+element.style.backgroundColor = window.colorMap.primary[500].hex;
+element.style.color = window.colorMap.bootstrapVars.bodyColor.hex;
+element.style.boxShadow = "0 5px 15px " + window.colorMap.primary[500].rgba(0.5);
+
+ +
+ Pro Tip: Use the rgba() function for elements that need transparency. It accepts a single parameter for opacity between 0 and 1. +
+ +
Usage with Libraries like ApexCharts
+
+
// Example usage with chart libraries
+const chartOptions = {
+    colors: [window.colorMap.primary[500].hex],
+    grid: {
+        borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.2) // 20% opacity
+    },
+    tooltip: {
+        style: {
+            backgroundColor: window.colorMap.bootstrapVars.bodyBg.rgba(0.9)
+        }
+    }
+};
+
+ +
+ Pro Tip: The color extraction system automatically updates when switching themes, ensuring your dynamic color applications stay in sync with the current theme. +
+ +
+ Note: Color extraction relies on Bootstrap classes being properly loaded. Ensure Bootstrap CSS is loaded before attempting to extract colors. +
+
+ +
+

Debugging

+ +
Logger Functions
+
+
// Enable debug mode
+appDOM.debug(true);
+
+// Logger outputs
+logger.log('Info message');
+logger.error('Error message');
+logger.warn('Warning message');
+logger.group('Group name');
+logger.groupEnd();
+
+// Logging methods
+appDOM.log('This is a log message');
+appDOM.warn('This is a warning');
+appDOM.error('This is an error');
+
+ +
+ Pro Tip: Debug messages are prefixed with [AppDOM] for easy identification in the console. +
+
+ +
+

Troubleshooting

+ +
+ Common Issues: +
    +
  • Class manipulation doesn't work?
    + Ensure the target element exists before calling appDOM.addClass().
  • +
  • No sound is playing?
    + Check if the file path is correct and ensure browser autoplay permissions allow playback.
  • +
  • Panel actions not responding?
    + Verify that the data attributes are correctly set and the elements exist in the DOM.
  • +
  • Security restrictions blocking actions?
    + Check the console for security warnings and ensure your selectors and class names meet the security requirements.
  • +
+
+
+ + +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-smartfilterjs.html b/legacy/smartadmin/docs-smartfilterjs.html new file mode 100644 index 0000000..08e0790 --- /dev/null +++ b/legacy/smartadmin/docs-smartfilterjs.html @@ -0,0 +1,2308 @@ + + + + + + + + SmartFilter.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

SmartFilter.js

+ + + + + + +
+ + +
+ +
+
+ + +
+

Find What You Need, Instantly!

+

SmartFilter.js is a powerful JavaScript library that provides advanced filtering capabilities for lists, navigation menus, and other DOM elements. It features fuzzy search with intelligent scoring, performance optimizations, and a robust error handling system.

+ +
+ Pro Tip: SmartFilter.js uses an advanced fuzzy matching algorithm that can find items even when users make typos or only remember part of a name. +
+
+ +
+

Installation

+

Include the SmartFilter.js script in your HTML file:

+ +
+
<script src="scripts/core/smartFilter.js"></script>
+
+ +

Basic initialization

+
+
// Initialize with default options
+var filter = new ListFilter('#navigation-list', '#search-input');
+
+// Or with custom options
+var filter = new ListFilter('#navigation-list', '#search-input', {
+    debounceWait: 300,
+    minLength: 2,
+    caseSensitive: false,
+    onFilter: function(value) {
+        console.log('Filtering with:', value);
+    }
+});
+
+ +

HTML Structure

+
+
<input type="text" id="search-input" placeholder="Search...">
+<span class="js-filter-message"></span>
+
+<nav id="navigation-list">
+    <ul>
+        <li class="nav-title">Category 1</li>
+        <li>
+            <a href="page1.html">
+                <span class="nav-link-text">Page 1</span>
+            </a>
+        </li>
+        <li>
+            <a href="page2.html">
+                <span class="nav-link-text">Page 2</span>
+            </a>
+        </li>
+        <li class="nav-title">Category 2</li>
+        <li>
+            <a href="page3.html">
+                <span class="nav-link-text">Page 3</span>
+            </a>
+        </li>
+    </ul>
+</nav>
+
+ +
+ Important: For the filter to work correctly, each filterable item should have a <span class="nav-link-text"> element containing the text to be filtered. +
+
+ +
+

Configuration Options

+

SmartFilter.js offers several configuration options to customize its behavior:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDefault ValueDescriptionType
anchornullElement to which the filter class will be applied (instead of the list element).Element|string|null
messageSelector'.js-filter-message'Selector for the element that displays the match count.string
debounceWait250Time in milliseconds to wait before filtering after input changes.number
minLength1Minimum number of characters required to trigger filtering.number
maxLength100Maximum number of characters allowed in the search input.number
caseSensitivefalseWhether the filter should be case-sensitive.boolean
onFilternullCallback function that is called when filtering occurs.Function|null
onResetnullCallback function that is called when the filter is reset.Function|null
onErrornullCallback function that is called when an error occurs.Function|null
+
+
+ +
+

Advanced Configuration Example

+

Here's an example of how to configure SmartFilter with advanced options:

+
+
var filter = new ListFilter('#navigation-list', '#search-input', {
+    anchor: '#nav-container',
+    messageSelector: '.filter-results',
+    debounceWait: 300,
+    minLength: 2,
+    maxLength: 50,
+    caseSensitive: false,
+    onFilter: function(value) {
+        console.log('Filtering with:', value);
+        // Update UI or trigger other actions
+    },
+    onReset: function() {
+        console.log('Filter has been reset');
+        // Restore original state or trigger other actions
+    },
+    onError: function(error) {
+        console.error('Filter error:', error);
+        // Handle errors gracefully
+    }
+});
+
+
+ + + +
+

Performance Optimizations

+

SmartFilter.js includes several performance optimizations:

+ +

Debouncing

+
+
// Debounce function with rate limiting
+function debounce(func, wait, immediate) {
+    var timeout;
+    var lastRun = 0;
+    
+    return function() {
+        var context = this;
+        var args = arguments;
+        var now = Date.now();
+        
+        // Rate limiting
+        if (now - lastRun < RATE_LIMIT_MS) {
+            return;
+        }
+        
+        // Debounce implementation
+        clearTimeout(timeout);
+        timeout = setTimeout(function() {
+            timeout = null;
+            if (!immediate) func.apply(context, args);
+        }, wait);
+        
+        if (immediate && !timeout) func.apply(context, args);
+    };
+}
+
+ +

Result Caching

+
+
// Cache for fuzzy match results
+var fuzzyMatchCache = new Map();
+
+// Check cache before computing match
+var cacheKey = pattern + '|' + str;
+if (fuzzyMatchCache.has(cacheKey)) {
+    return fuzzyMatchCache.get(cacheKey);
+}
+
+// Store result in cache
+fuzzyMatchCache.set(cacheKey, score);
+
+ +

DOM Caching

+
+
// Pre-cache DOM elements
+this._cache = {
+    items: this.list.getElementsByTagName('a'),
+    titles: this.list.getElementsByTagName('li'),
+    messageElement: document.querySelector(this.settings.messageSelector),
+    size: 0
+};
+
+ +
+ Important: The filter automatically clears caches when they grow too large to prevent memory issues. The maximum cache size is set to 10,000 items. +
+
+ +
+

API Methods

+

SmartFilter.js exposes several methods for programmatic control:

+ +
+
// Get filter instance
+var filter = new ListFilter('#navigation-list', '#search-input');
+
+// Manually trigger filtering
+filter.filter();
+
+// Reset the filter (clear input and show all items)
+filter.reset();
+
+// Destroy the filter instance and clean up
+filter.destroy();
+
+ +

Internal Methods

+
+
// Find the navigation title associated with an element
+filter.findNavTitle(element);
+
+// Show all parent elements of a given element
+filter.showParents(element);
+
+// Show all child elements of a given element
+filter.showChildren(element);
+
+
+ +
+

Error Handling

+

SmartFilter.js includes a robust error handling system:

+ +
+
// Error handling with auto-recovery
+_handleError: function(error) {
+    console.error('ListFilter error:', error);
+    
+    // Track error frequency
+    var now = Date.now();
+    if (now - this._lastErrorTime > 60000) {
+        this._errorCount = 0;
+    }
+    
+    this._errorCount++;
+    this._lastErrorTime = now;
+    
+    // Call error callback if provided
+    if (this.settings.onError) {
+        this.settings.onError(error);
+    }
+    
+    // Auto-recovery if too many errors
+    if (this._errorCount > 10) {
+        this.reset();
+        this._errorCount = 0;
+    }
+}
+
+ +

The error handling system provides:

+
    +
  • Detailed error logging: Logs errors with context information
  • +
  • Error rate tracking: Monitors error frequency
  • +
  • Custom error callbacks: Allows custom error handling
  • +
  • Auto-recovery: Automatically resets the filter if too many errors occur
  • +
  • Input validation: Prevents common errors by validating inputs
  • +
+
+ +
+

Event Handling

+

SmartFilter.js uses efficient event handling to manage user interactions:

+ +
+
// Bind events with passive listeners for better performance
+bindEvents: function() {
+    var self = this;
+    this.handleFilter = debounce(this.filter.bind(this), this.settings.debounceWait);
+    
+    // Use passive event listeners for better performance
+    this.input.addEventListener('input', this._validateEvent.bind(this), { passive: true });
+    this.input.addEventListener('change', this._validateEvent.bind(this), { passive: true });
+
+    // Add ESC key handler
+    document.addEventListener('keydown', function(e) {
+        if (e.key === 'Escape' || e.key === 'Esc') {
+            self.reset();
+        }
+    });
+
+    // Handle window resize for responsive layouts
+    this._resizeHandler = debounce(function() {
+        if (self.input.value.length > self.settings.minLength) {
+            self.filter();
+        }
+    }, 250);
+    
+    window.addEventListener('resize', this._resizeHandler, { passive: true });
+}
+
+ +

The filter responds to the following events:

+
    +
  • input: Triggers filtering when the search input changes
  • +
  • change: Triggers filtering when the search input loses focus
  • +
  • keydown (Escape): Resets the filter when the Escape key is pressed
  • +
  • resize: Re-applies the filter when the window is resized
  • +
  • click: Resets the filter when the message element is clicked
  • +
+
+ +
+

CSS Classes

+

SmartFilter.js uses several CSS classes to manage the visibility of elements:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDescriptionApplied To
js-list-filterIndicates that the element is a filterable listList element or anchor element
js-list-activeIndicates that the filter is currently activeList element
js-filter-hideHides elements that don't match the filterList items
js-filter-showShows elements that match the filterList items
nav-titleIdentifies category titles in the navigationCategory title elements
nav-link-textIdentifies the text content to be filteredText elements inside links
+
+ +
+ Pro Tip: You can style these classes in your CSS to create visual effects when filtering, such as highlighting matched items or fading out hidden items. +
+
+ +
+

Best Practices

+
    +
  • Set an appropriate debounceWait value (200-300ms is recommended) to balance responsiveness and performance
  • +
  • Use the minLength option to prevent filtering on very short inputs
  • +
  • Provide a clear visual indication when filtering is active
  • +
  • Include a way for users to clear the filter (the filter automatically supports the Escape key)
  • +
  • Use the onFilter and onReset callbacks to synchronize other UI elements
  • +
  • Implement proper error handling with the onError callback
  • +
+ +
+ Pro Tip: For large lists, consider increasing the debounceWait value to reduce the frequency of filtering operations and improve performance. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Filter not working? Check that your HTML structure includes <span class="nav-link-text"> elements inside your links.
  • +
  • No matches found? Verify that the text content of your items matches what users are searching for.
  • +
  • Performance issues? Try increasing the debounceWait value and ensure you're not filtering extremely large lists.
  • +
  • Filter showing incorrect results? Check that your navigation titles are properly marked with the nav-title class.
  • +
  • Match count not showing? Verify that you have an element matching the messageSelector option.
  • +
+
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-smartnavigationjs.html b/legacy/smartadmin/docs-smartnavigationjs.html new file mode 100644 index 0000000..cc955ed --- /dev/null +++ b/legacy/smartadmin/docs-smartnavigationjs.html @@ -0,0 +1,2296 @@ + + + + + + + + smartNavigation.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +
+ +

SmartNavigation.js

+ + + + + + +
+ +
+ +
+
+ + +
+

Your GPS, but cooler.

+

SmartNavigation.js is a powerful, accessible, and secure JavaScript library for creating dynamic navigation menus. It provides a comprehensive set of tools for building interactive navigation systems with support for nested menus, accordion behavior, keyboard navigation, and more.

+ +
+ Pro Tip: SmartNavigation.js is built with security in mind, featuring built-in sanitization for URLs and HTML content, making it resistant to XSS attacks. +
+
+ +
+

Installation

+

Include the SmartNavigation.js script in your HTML file:

+ +
+
<script src="scripts/core/smartNavigation.js"></script>
+
+ +

Basic initialization

+
+
// Initialize with default options
+const nav = new Navigation('#navigation');
+
+// Or with custom options
+const nav = new Navigation('#navigation', {
+    accordion: true,
+    slideUpSpeed: 300,
+    slideDownSpeed: 300,
+    debug: false,
+    maxDepth: 10
+});
+
+ +

HTML Structure

+
+
<nav id="navigation">
+    <ul>
+        <li>
+            <a href="#">Parent Item</a>
+            <ul>
+                <li><a href="page1.html">Child Item 1</a></li>
+                <li><a href="page2.html">Child Item 2</a></li>
+                <li>
+                    <a href="#">Child Item 3</a>
+                    <ul>
+                        <li><a href="subpage1.html">Grandchild Item 1</a></li>
+                        <li><a href="subpage2.html">Grandchild Item 2</a></li>
+                    </ul>
+                </li>
+            </ul>
+        </li>
+        <li><a href="about.html">About</a></li>
+        <li><a href="contact.html">Contact</a></li>
+    </ul>
+</nav>
+
+ +
+ Important: The navigation element must contain a <ul> element as its child. Each menu item should be an <li> element containing an <a> element. +
+
+ +
+

Configuration Options

+

SmartNavigation.js offers extensive configuration options to customize its behavior:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDefault ValueDescriptionType
accordiontrueWhen enabled, only one submenu at the same level can be open at a time.boolean
slideUpSpeed200Duration in milliseconds for the submenu collapse animation.number
slideDownSpeed200Duration in milliseconds for the submenu expand animation.number
closedSign'<i class="sa sa-chevron-down"></i>'HTML for the icon displayed next to closed submenus.string
openedSign'<i class="sa sa-chevron-up"></i>'HTML for the icon displayed next to opened submenus.string
initClass'js-nav-built'CSS class added to the navigation element after initialization.string
debugfalseWhen enabled, logs detailed information about the navigation's operations to the console.boolean
instanceIdauto-generatedUnique identifier for the navigation instance, used in debug logs and data attributes.string
maxDepth10Maximum nesting depth allowed for submenus to prevent excessive nesting.number
sanitizetrueWhen enabled, sanitizes URLs and HTML content to prevent XSS attacks.boolean
animationTiming'easeOutExpo'Timing function for animations. Can be any valid CSS timing function.string
debounceTime0Time in milliseconds to debounce click events to prevent rapid repeated clicks.number
onErrornullCallback function that is called when an error occurs.Function|null
showMore.enabledtrueWhen enabled, adds a "Show more" toggle for submenus with many items.boolean
showMore.itemsToShow4Number of items to show before collapsing the rest behind a "Show more" toggle.number
showMore.minItemsForToggle2Minimum number of hidden items required to show the "Show more" toggle.number
showMore.moreText'Show {count} more'Text for the "Show more" toggle, where {count} is replaced with the number of hidden items.string
showMore.lessText'Show less'Text for the "Show less" toggle when hidden items are visible.string
+
+
+ +
+

Advanced Configuration Example

+

Here's an example of how to configure SmartNavigation with advanced options:

+
+
const nav = new Navigation('#navigation', {
+    accordion: true,
+    slideUpSpeed: 300,
+    slideDownSpeed: 300,
+    closedSign: '<i class="fa fa-plus"></i>',
+    openedSign: '<i class="fa fa-minus"></i>',
+    initClass: 'nav-initialized',
+    debug: true,
+    instanceId: 'main-navigation',
+    maxDepth: 5,
+    sanitize: true,
+    animationTiming: 'ease-in-out',
+    debounceTime: 100,
+    onError: function(error) {
+        console.error('Navigation error:', error);
+    },
+    showMore: {
+        enabled: true,
+        itemsToShow: 5,
+        minItemsForToggle: 3,
+        moreText: 'View {count} more items',
+        lessText: 'Collapse items'
+    }
+});
+
+
+ +
+

API Methods

+

SmartNavigation.js exposes several methods for programmatic control:

+ +
+
// Get an existing navigation instance
+const nav = Navigation.getInstance('#navigation');
+
+// Initialize multiple navigation elements at once
+const navs = Navigation.initAll('.navigation', options);
+
+// Initialize navigation on DOM content loaded
+Navigation.initOnLoad(options);
+
+// Destroy all navigation instances
+Navigation.destroyAll();
+
+ +

Instance Methods

+
+
// Create a new menu item
+const parentItem = nav.createMenuItem({
+    text: 'Parent Menu',
+    url: '#',
+    hasSubmenu: true
+});
+
+// Create a child menu item
+const childItem = nav.createMenuItem({
+    text: 'Child Menu',
+    url: 'https://example.com',
+    parent: parentItem
+});
+
+// Update an existing menu item
+nav.updateMenuItem(childItem, {
+    text: 'Updated Text',
+    url: 'https://newurl.com'
+});
+
+// Move a menu item to a new parent
+nav.moveMenuItem(childItem, anotherParent);
+
+// Remove a menu item
+nav.removeMenuItem(childItem);
+
+// Toggle all submenus open or closed
+nav.toggleAll(true);  // Open all
+nav.toggleAll(false); // Close all
+
+// Close all open submenus
+nav.closeAllSubmenus();
+
+// Focus a specific menu item
+nav.focusItem(menuItem);
+
+// Destroy the navigation instance
+nav.destroy();
+
+
+ +
+

Accessibility Features

+

SmartNavigation.js is built with accessibility in mind, providing:

+
    +
  • ARIA attributes: Automatically adds appropriate ARIA roles, states, and properties
  • +
  • Keyboard navigation: Full keyboard support for navigating the menu
  • +
  • Focus management: Proper focus handling for screen readers
  • +
  • Semantic markup: Uses proper HTML structure for navigation
  • +
+ +
+
// Keyboard navigation support
+// Enter/Space: Toggle submenu
+// Escape: Close submenu and return focus to parent
+// Arrow Down/Up: Navigate between menu items
+// Tab: Navigate through focusable elements
+
+ +
+ Pro Tip: The navigation automatically adds aria-expanded and aria-haspopup attributes to menu items with submenus, making them accessible to screen readers. +
+
+ +
+

Security Features

+

SmartNavigation.js includes several security features to protect against common vulnerabilities:

+ +

HTML Sanitization

+
+
// Sanitizes HTML content to prevent XSS attacks
+const sanitizedHTML = Navigation.sanitizeHTML(htmlString);
+
+// Removes potentially dangerous attributes and scripts
+// Strips event handlers (onclick, onmouseover, etc.)
+// Prevents script injection
+
+ +

URL Validation

+
+
// Validates URLs to prevent javascript: protocol and other unsafe URLs
+const isValid = Navigation.isValidUrl(url);
+
+// Checks for:
+// - Valid URL format
+// - Prevents javascript: URLs
+// - Prevents data: URLs
+// - Prevents other potentially dangerous protocols
+
+ +
+ Important: Always keep the sanitize option enabled in production environments to protect against XSS attacks. +
+
+ +
+

Show More Feature

+

The "Show More" feature helps manage large navigation menus by collapsing excess items:

+ +
+
// Configure the Show More feature
+const nav = new Navigation('#navigation', {
+    showMore: {
+        enabled: true,           // Enable the feature
+        itemsToShow: 4,          // Show first 4 items
+        minItemsForToggle: 2,    // Only show toggle if at least 2 items are hidden
+        moreText: 'Show {count} more items',  // Text for the toggle (expanded)
+        lessText: 'Show fewer items'          // Text when collapsed
+    }
+});
+
+ +

The Show More feature automatically:

+
    +
  • Identifies non-parent items (items without submenus) to collapse
  • +
  • Keeps parent items (with submenus) always visible
  • +
  • Adds a toggle button to show/hide the collapsed items
  • +
  • Automatically expands if any hidden item is active
  • +
+ +
+ Pro Tip: The Show More feature is particularly useful for mobile navigation where space is limited, helping to keep the most important navigation items visible. +
+
+ +
+

Event Handling

+

SmartNavigation.js uses secure event handling to manage user interactions:

+ +
+
// Click event handling
+element.addEventListener('mousedown', nav.handleClick, { passive: true });
+
+// Keyboard event handling
+element.addEventListener('keydown', nav.handleKeydown);
+
+// Debounced event handling to prevent rapid repeated clicks
+const debouncedHandler = nav.debounce(function() {
+    // Handler code
+}, 100);
+
+ +

The navigation responds to the following events:

+
    +
  • mousedown: Toggles submenus when clicking on parent items
  • +
  • keydown: Handles keyboard navigation and accessibility
  • +
  • transitionend: Manages animation completion for smooth transitions
  • +
+
+ +
+

Animation System

+

SmartNavigation.js includes a sophisticated animation system for smooth transitions:

+ +
+
// Animate height of an element
+nav.animateHeight(element, 'down', callback);  // Expand
+nav.animateHeight(element, 'up', callback);    // Collapse
+
+// Animation options
+const nav = new Navigation('#navigation', {
+    slideUpSpeed: 300,           // Collapse animation duration
+    slideDownSpeed: 300,         // Expand animation duration
+    animationTiming: 'ease-in-out'  // CSS timing function
+});
+
+ +

The animation system:

+
    +
  • Uses CSS transitions for smooth, hardware-accelerated animations
  • +
  • Properly measures and animates content height
  • +
  • Handles animation completion with callbacks
  • +
  • Prevents animation conflicts with state tracking
  • +
+
+ +
+

Best Practices

+
    +
  • Keep your navigation structure reasonably flat (avoid excessive nesting)
  • +
  • Use the maxDepth option to prevent performance issues from deep nesting
  • +
  • Enable the showMore feature for large menus to improve usability
  • +
  • Use the debug option during development to troubleshoot issues
  • +
  • Always keep the sanitize option enabled in production
  • +
  • Use semantic HTML structure for your navigation
  • +
+ +
+ Pro Tip: For large applications, use Navigation.initAll() to initialize multiple navigation components with the same configuration. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Navigation not initializing? Check that your HTML structure includes a <ul> element inside the navigation container.
  • +
  • Submenus not expanding? Ensure your HTML structure is correct with proper nesting of <li> and <ul> elements.
  • +
  • Animation issues? Try adjusting the slideUpSpeed and slideDownSpeed options, or check for CSS conflicts.
  • +
  • Security errors? Make sure URLs are valid and HTML content is safe when using createMenuItem or updateMenuItem.
  • +
  • Performance issues? Reduce the depth of your navigation structure or increase the debounceTime to prevent rapid interactions.
  • +
+
+
+ +
+ + + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-smartslimscrolljs.html b/legacy/smartadmin/docs-smartslimscrolljs.html new file mode 100644 index 0000000..2fbec58 --- /dev/null +++ b/legacy/smartadmin/docs-smartslimscrolljs.html @@ -0,0 +1,2317 @@ + + + + + + + + smartSlimScroll.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

SmartSlimScroll.js

+ + + + + + +
+ + +
+ +
+
+ +
+

Smooth Scrolling, No Drama!

+

SmartSlimScroll.js is a lightweight, high-performance JavaScript library that replaces the browser's default scrollbars with elegant, customizable slim scrollbars. It enhances the user experience with smooth scrolling, touch support, and a modern look while maintaining accessibility and performance.

+ +
+ Pro Tip: SmartSlimScroll.js is built with security and performance in mind, featuring input sanitization, event throttling, and passive event listeners for smooth scrolling even on low-end devices. +
+
+ +
+

Installation

+

Include the SmartSlimScroll.js script in your HTML file:

+ +
+
<script src="scripts/core/smartSlimscroll.js"></script>
+
+ +

Basic initialization

+
+
// Initialize with default options
+new smartSlimScroll('#content-container');
+
+// Or with custom options
+new smartSlimScroll('#content-container', {
+    height: '400px',
+    size: '8px',
+    color: '#4285f4',
+    position: 'right',
+    alwaysVisible: true
+});
+
+ +

HTML Structure

+
+
<div id="content-container" style="height: 300px;">
+    <!-- Your scrollable content here -->
+    <p>Lorem ipsum dolor sit amet...</p>
+    <p>More content...</p>
+</div>
+
+ +
+ Important: The target element should have a fixed height or a max-height set either via CSS or through the plugin options. Without a defined height, the scrollbar won't appear. +
+
+ +
+

Configuration Options

+

SmartSlimScroll.js offers extensive configuration options to customize its appearance and behavior:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDefault ValueDescriptionType
width'auto'Width of the scrollable area. 'auto' uses the element's width.string
height'250px'Height of the scrollable area.string
size'7px'Width of the scrollbar.string
color'#000'Color of the scrollbar.string
position'right'Position of the scrollbar ('right' or 'left').string
offsetX'1px'Horizontal offset of the scrollbar from the edge.string
offsetY'0px'Vertical offset of the scrollbar from the top.string
start'top'Initial scroll position ('top', 'bottom', or a CSS selector).string
opacity0.4Opacity of the scrollbar when visible.number
fadeOutSpeed500Time in milliseconds for the scrollbar to fade out.number
alwaysVisiblefalseWhether the scrollbar should always be visible.boolean
disableFadeOutfalsePrevents the scrollbar from fading out after use.boolean
railVisiblefalseWhether the scrollbar rail should be visible.boolean
railColor'#333'Color of the scrollbar rail.string
railOpacity0.2Opacity of the scrollbar rail when visible.number
railClass'slimScrollRail'CSS class for the scrollbar rail.string
barClass'slimScrollBar'CSS class for the scrollbar.string
wrapperClass'slimScrollDiv'CSS class for the wrapper element.string
allowPageScrollfalseWhether to allow the page to scroll when reaching the end of the content.boolean
wheelStep20Scroll distance for each mouse wheel step (in percentage).number
touchScrollStep200Scroll distance for touch events.number
borderRadius'7px'Border radius of the scrollbar.string
railBorderRadius'7px'Border radius of the scrollbar rail.string
+
+
+ +
+

Advanced Configuration Example

+

Here's an example of how to configure SmartSlimScroll with advanced options:

+
+
new smartSlimScroll('#content-container', {
+    width: '100%',
+    height: '500px',
+    size: '10px',
+    color: '#4285f4',
+    position: 'right',
+    offsetX: '2px',
+    offsetY: '5px',
+    start: '#section-2', // Scroll to an element with id "section-2"
+    opacity: 0.7,
+    fadeOutSpeed: 1000,
+    alwaysVisible: false,
+    disableFadeOut: false,
+    railVisible: true,
+    railColor: '#e0e0e0',
+    railOpacity: 0.5,
+    railClass: 'custom-rail',
+    barClass: 'custom-bar',
+    wrapperClass: 'custom-wrapper',
+    allowPageScroll: false,
+    wheelStep: 10,
+    touchScrollStep: 100,
+    borderRadius: '5px',
+    railBorderRadius: '5px'
+});
+
+
+ +
+

Key Features

+ +

Security Enhancements

+
    +
  • Input Sanitization: All user-provided options are sanitized to prevent XSS attacks
  • +
  • Bounds Checking: Touch and scroll inputs are validated to prevent manipulation
  • +
  • Safe DOM Manipulation: Uses modern DOM APIs with proper validation
  • +
+ +

Performance Optimizations

+
    +
  • Event Throttling: Scroll and touch events are throttled to improve performance
  • +
  • Passive Event Listeners: Uses passive listeners where appropriate for smoother scrolling
  • +
  • Intersection Observer: Uses modern APIs to efficiently check element visibility
  • +
  • Efficient DOM Operations: Minimizes reflows and repaints
  • +
+ +

Memory Management

+
    +
  • WeakMap for State: Uses WeakMap for private state to prevent memory leaks
  • +
  • Proper Cleanup: Includes a destroy method to remove event listeners and DOM elements
  • +
  • Event Listener Management: Properly removes event listeners to prevent memory leaks
  • +
+ +
+ Pro Tip: The use of WeakMap for private state management ensures that memory is automatically reclaimed when elements are removed from the DOM, preventing memory leaks in long-running applications. +
+
+ +
+

Usage Examples

+ +

Basic Usage

+
+
// Initialize with default options
+new smartSlimScroll('#content-container');
+
+ +

Multiple Elements

+
+
// Initialize on multiple elements with the same options
+new smartSlimScroll('.scrollable-content', {
+    height: '300px',
+    color: '#4285f4'
+});
+
+ +

Different Positions

+
+
// Left-positioned scrollbar
+new smartSlimScroll('#left-content', {
+    position: 'left',
+    color: '#db4437'
+});
+
+// Right-positioned scrollbar (default)
+new smartSlimScroll('#right-content', {
+    position: 'right',
+    color: '#0f9d58'
+});
+
+ +

Always Visible Scrollbar

+
+
// Scrollbar that never fades out
+new smartSlimScroll('#important-content', {
+    alwaysVisible: true,
+    opacity: 0.8,
+    color: '#4285f4'
+});
+
+ +

Custom Styling

+
+
// Fully customized scrollbar
+new smartSlimScroll('#styled-content', {
+    size: '12px',
+    color: 'rgba(66, 133, 244, 0.8)',
+    railVisible: true,
+    railColor: 'rgba(0, 0, 0, 0.1)',
+    borderRadius: '6px',
+    railBorderRadius: '6px'
+});
+
+
+ +
+

Event Handling

+

SmartSlimScroll.js handles various user interaction events:

+ +
+
// Mouse wheel events
+wrapper.addEventListener('wheel', handleWheel, { 
+    passive: false, 
+    capture: true 
+});
+
+// Touch events
+wrapper.addEventListener('touchmove', handleTouchMove, { 
+    passive: false, 
+    capture: true 
+});
+
+// Mouse drag events
+bar.addEventListener('mousedown', onMouseDown);
+
+// Mouse hover events
+wrapper.addEventListener('mouseenter', function() {
+    state.isOverPanel = true;
+    showBar();
+});
+
+// Rail click events
+rail.addEventListener('mousedown', function(e) {
+    // Calculate and scroll to clicked position
+});
+
+ +

The scrollbar responds to the following interactions:

+
    +
  • Mouse wheel: Scrolls the content up or down
  • +
  • Touch movement: Scrolls the content on touch devices
  • +
  • Scrollbar drag: Allows direct manipulation of the scrollbar
  • +
  • Rail click: Jumps to the clicked position
  • +
  • Mouse hover: Shows the scrollbar when hovering over the content
  • +
+
+ +
+

Scrollbar Visibility

+

SmartSlimScroll.js intelligently manages scrollbar visibility:

+ +
+
// Show scrollbar
+var showBar = function() {
+    getBarHeight();
+    clearTimeout(state.queueHide);
+
+    // Show bar if content is scrollable and we're either:
+    // 1. Over the content panel
+    // 2. Over the bar/rail
+    // 3. Currently dragging
+    // 4. Currently scrolling
+    if (me.scrollHeight > wrapper.offsetHeight && 
+        (state.isOverPanel || state.isOverBar || state.isOverRail || state.isDragg || state.isScrolling)) {
+        bar.style.opacity = o.opacity;
+        rail.style.opacity = o.railOpacity;
+
+        // If only hovering over panel (not interacting), hide after delay
+        if (state.isOverPanel && 
+            !state.isOverBar && 
+            !state.isOverRail && 
+            !state.isDragg && 
+            !state.isScrolling) {
+            clearTimeout(state.queueHide);
+            state.queueHide = setTimeout(function() {
+                hideBar();
+            }, o.fadeOutSpeed);
+        }
+    }
+};
+
+ +

The scrollbar visibility is controlled by:

+
    +
  • Mouse hover: Shows when hovering over the content
  • +
  • Interaction: Shows during scrolling or dragging
  • +
  • Fade out: Automatically fades out after a delay
  • +
  • Configuration: Can be set to always visible
  • +
  • Intersection Observer: Shows/hides based on element visibility in viewport
  • +
+ +
+ Pro Tip: For important content where users need to be aware of scrollability, set alwaysVisible: true to ensure the scrollbar is always visible. +
+
+ +
+

Cleanup and Destruction

+

SmartSlimScroll.js provides a clean way to remove the custom scrollbar and restore the original element:

+ +
+
// Get the instance
+var scroll = new smartSlimScroll('#content-container');
+
+// Later, when you want to destroy it:
+scroll.destroy();
+
+ +

The destroy method:

+
    +
  • Removes all event listeners to prevent memory leaks
  • +
  • Disconnects the Intersection Observer
  • +
  • Removes the custom scrollbar elements from the DOM
  • +
  • Restores the original element to its pre-initialization state
  • +
  • Cleans up internal state and references
  • +
+ +
+ Important: Always call the destroy() method before removing elements with SmartSlimScroll from the DOM to prevent memory leaks, especially in single-page applications. +
+
+ +
+

Best Practices

+
    +
  • Always specify a height for the container element, either via CSS or the plugin options
  • +
  • For touch devices, consider increasing the touchScrollStep value for better usability
  • +
  • Use alwaysVisible: true for content where scrollability needs to be obvious
  • +
  • For dark themes, use lighter scrollbar colors with higher opacity for better visibility
  • +
  • Call destroy() when removing elements from the DOM to prevent memory leaks
  • +
  • Use the railVisible option to provide better visual cues for scrollable areas
  • +
+ +
+ Pro Tip: For the best user experience, match the scrollbar color to your application's accent color and use a subtle, semi-transparent rail color to indicate the scrollable area. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Scrollbar not appearing? Ensure your container has a fixed height and contains content that exceeds this height.
  • +
  • Scrollbar not working on mobile? Check that touch events are not being prevented by other scripts or CSS properties like touch-action: none.
  • +
  • Content not scrollable? Verify that the content's height is correctly calculated and exceeds the container's height.
  • +
  • Performance issues? Reduce the complexity of the scrollable content or increase the fadeOutSpeed to reduce animation overhead.
  • +
  • Memory leaks? Ensure you call destroy() when removing elements with SmartSlimScroll from the DOM.
  • +
+
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-smarttablesjs.html b/legacy/smartadmin/docs-smarttablesjs.html new file mode 100644 index 0000000..d3d445d --- /dev/null +++ b/legacy/smartadmin/docs-smarttablesjs.html @@ -0,0 +1,4073 @@ + + + + + + + + smartTables.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

smartTables.js

+ + + + + + +
+ + +
+ +
+
+ +
+

Smarter Tables, Less Hassle!

+

SmartTables.js is a powerful, feature-rich JavaScript plugin designed to enhance HTML tables with advanced + functionality such as sorting, searching, pagination, responsive behavior, and data export capabilities. + It is built with modern web development practices in mind, offering a flexible and extensible API for developers + to customize and extend its functionality.

+

+ This plugin is ideal for developers who need to manage large datasets in a user-friendly way, providing a seamless + experience for end-users while maintaining a high level of customization and control. +

+
+ Pro Tip: SmartTables works with your existing HTML tables and automatically adapts to different screen sizes by hiding less important columns on smaller screens. +
+
+ +
+

Installation

+

SmartTables.js is now available as an ES6 module. You can include it in your project in several ways:

+ +

1. Using ES6 Modules (Recommended)

+
+
// Import the SmartTables class
+import { SmartTables } from './optional/smartTables/smartTables.bundle.js';
+
+// Initialize with empty options object (required)
+const myTable = new SmartTables('tableId', {});
+
+// Or with custom options
+const myTable = new SmartTables('tableId', {
+    perPage: 15,
+    search: true,
+    sort: true,
+    pagination: true,
+    export: true
+});
+
+ +
+ Important: +
    +
  • You must pass an empty options object ({}) as the second parameter when initializing SmartTables, even if you don't need any custom options.
  • +
  • This is required because the constructor expects an options object to properly initialize default values.
  • +
  • If you don't pass the options object, you'll get an error: Cannot read properties of undefined (reading 'responsive').
  • +
+
+ +

2. Using NPM (for modern build systems)

+
+
// Install via npm
+npm install smarttables
+
+// Import in your JavaScript/TypeScript file
+import { SmartTables } from 'smarttables';
+
+// Use in your component
+const myTable = new SmartTables('tableId', {
+    data: {
+        type: 'json',
+        source: myData,
+        columns: [
+            { data: 'id', title: 'ID' },
+            { data: 'name', title: 'Name' },
+            { data: 'position', title: 'Position' }
+        ]
+    }
+});
+
+ +

3. Using with TypeScript

+
+
import { SmartTables, SmartTablesOptions } from 'smarttables';
+
+interface CustomOptions extends SmartTablesOptions {
+    customFeature?: boolean;
+}
+
+const options: CustomOptions = {
+    perPage: 10,
+    search: true,
+    customFeature: true
+};
+
+const myTable = new SmartTables('tableId', options);
+
+ +

HTML Structure

+
+
<table id="myTable" class="table">
+    <thead>
+        <tr>
+            <th data-priority="1">ID</th>
+            <th data-priority="2">Name</th>
+            <th data-priority="3">Position</th>
+            <th data-priority="4">Office</th>
+            <th data-priority="5">Age</th>
+        </tr>
+    </thead>
+    <tbody>
+        <tr>
+            <td>1</td>
+            <td>John Doe</td>
+            <td>Developer</td>
+            <td>New York</td>
+            <td>32</td>
+        </tr>
+        <!-- More rows... -->
+    </tbody>
+</table>
+
+ +
+ Important: +
    +
  • Use the data-priority attribute on table headers to control which columns are hidden first when the table becomes too narrow for the viewport.
  • +
  • When using ES6 modules, make sure your server is configured to serve JavaScript files with the correct MIME type (application/javascript).
  • +
  • For older browsers, you'll need to use a bundler like Webpack, Rollup, or Parcel to transpile the ES6 code.
  • +
+
+
+ +
+

Configuration Options

+

SmartTables.js provides extensive configuration options to customize its behavior. All options are optional and will fall back to sensible defaults.

+ +
+
// Basic configuration
+const table = new SmartTables('myTable', {
+    perPage: 10,
+    search: true,
+    sort: true
+});
+
+// Advanced configuration with TypeScript
+interface CustomOptions extends SmartTablesOptions {
+    customFeature?: boolean;
+}
+
+const options: CustomOptions = {
+    perPage: 25,
+    search: true,
+    sort: true,
+    pagination: true,
+    export: true,
+    loading: {
+        enabled: true,
+        duration: 500,
+        minDuration: 300
+    },
+    responsive: {
+        enabled: true,
+        breakpoint: 992,
+        columnPriorities: {
+            0: 1,  // ID column - highest priority
+            1: 2,  // Name column - second highest priority
+            2: 3,  // Position
+            3: 4,  // Office
+            4: 5   // Age - lowest priority
+        }
+    },
+    debug: false,
+    fuzzyMatch: {
+        threshold: 0.6,
+        minMatchLength: 2,
+        multiWordThreshold: 0.5,
+        maxDistance: 3
+    },
+    customFeature: true
+};
+
+const table = new SmartTables('myTable', options);
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDefault ValueDescriptionType
perPage10Number of rows to display per page in pagination.number
searchtrueEnables or disables the search functionality for the table.boolean
sorttrueEnables or disables sorting functionality for table columns.boolean
paginationtrueEnables or disables pagination controls for the table.boolean
exporttrueEnables or disables export functionality (e.g., Excel, CSV, Copy).boolean
loading.enabledtrueEnables or disables the loading spinner/indicator during data loading or processing.boolean
loading.duration0Duration (in milliseconds) of an artificial delay for the loading indicator.number
loading.minDuration300Minimum duration (in milliseconds) to display the loading indicator.number
responsive.enabledtrueEnables or disables responsive behavior (e.g., hiding columns on small screens).boolean
responsive.breakpoint768Breakpoint (in pixels) at which responsive behavior starts.number
responsive.columnPriorities{}Object mapping column indices to their priority (1 being highest).Object<number, number>
responsive.details.type'column'Type of detail display for hidden columns.string
responsive.details.target0Target column index for the detail control.number
debugfalseEnables or disables debug logging for development and troubleshooting.boolean
fuzzyMatch.threshold0.7Threshold for fuzzy matching (0.0–1.0).number
fuzzyMatch.minMatchLength2Minimum number of characters required for fuzzy matching.number
fuzzyMatch.multiWordThreshold0.5Threshold for multi-word search matches.number
fuzzyMatch.maxDistance2Maximum Levenshtein distance allowed for typo tolerance.number
classes.wrapper'st-wrapper'Class for the wrapper div containing the table.string
classes.table'st-table table table-striped table-hover'Class for the table element.string
classes.toolbar'st-toolbar d-flex justify-content-between mb-3'Class for the toolbar containing controls.string
classes.search'st-search form-control'Class for the search input field.string
classes.pagination'st-pagination pagination justify-content-center'Class for the pagination controls.string
classes.export'st-export btn-group'Class for the export button group.string
data.typenullType of data source ('json', 'csv', 'ajax', or null for DOM-based tables).string|null
data.sourcenullSource of the data (URL, string, or object depending on type).string|null|Object
data.columns[]Array of column definitions.Array
data.processingfalseEnables or disables a processing indicator during data operations.boolean
data.serverSidefalseEnables or disables server-side processing for large datasets.boolean
data.method'GET'HTTP method for AJAX requests.string
data.headers{}Custom headers for AJAX requests.Object
data.params{}Additional parameters for AJAX requests.Object
data.parsernullCustom parser function for transforming raw data.Function|null
data.prefetchtrueEnables prefetching of the next page data for smoother pagination.boolean
data.cacheDuration300000Duration in milliseconds to keep cached data (default: 5 minutes).number
data.withCredentialsfalseWhether to include credentials in cross-domain requests.boolean
data.urlnullThe URL to fetch data from (aliased with source for compatibility).string|null
hooks{}Object containing various lifecycle and event hooks.Object
plugins[]Array of plugin objects to extend functionality.Array
+
+ +
+ Pro Tip: You can extend the default options by creating a custom interface that extends SmartTablesOptions when using TypeScript. This provides better type safety and autocompletion. +
+
+ +
+

Advanced Configuration Example

+

Here's an example of how to configure SmartTables with advanced options:

+
+
var myTable = new SmartTables('tableId', {
+    perPage: 25,
+    search: true,
+    sort: true,
+    pagination: true,
+    export: true,
+    loading: {
+        enabled: true,
+        duration: 500, // Show loading for at least 500ms
+        minDuration: 300
+    },
+    responsive: {
+        enabled: true,
+        breakpoint: 992,
+        columnPriorities: {
+            0: 1,  // ID column - highest priority
+            1: 2,  // Name column - second highest priority
+            2: 3,  // Position
+            3: 4,  // Office
+            4: 5   // Age - lowest priority
+        }
+    },
+    debug: false,
+    fuzzyMatch: {
+        threshold: 0.6,      // Lower threshold = more matches
+        minMatchLength: 2,   // Minimum characters to match
+        multiWordThreshold: 0.5,
+        maxDistance: 3       // Higher distance = more tolerance for typos
+    }
+});
+
+
+ +
+

Data Loading Methods

+

SmartTables supports various data loading methods:

+
+
// Load from JSON data
+var myTable = new SmartTables('tableId', {
+    data: {
+        type: 'json',
+        source: [
+            { id: 1, name: 'John Doe', position: 'Developer', office: 'New York', age: 32 },
+            { id: 2, name: 'Jane Smith', position: 'Designer', office: 'London', age: 28 }
+        ],
+        columns: [
+            { data: 'id', title: 'ID' },
+            { data: 'name', title: 'Name' },
+            { data: 'position', title: 'Position' },
+            { data: 'office', title: 'Office' },
+            { data: 'age', title: 'Age' }
+        ]
+    }
+});
+
+// Load from AJAX
+var myTable = new SmartTables('tableId', {
+    data: {
+        type: 'ajax',
+        source: 'api/users',
+        method: 'GET',
+        headers: { 'Authorization': 'Bearer token123' },
+        params: { limit: 100 }
+    }
+});
+
+// Load from CSV
+var myTable = new SmartTables('tableId', {
+    data: {
+        type: 'csv',
+        source: 'data/employees.csv'
+    }
+});
+
+
+ +
+

Data Import Functionality

+

SmartTables provides built-in data import capabilities that allow users to import data from various file formats directly into the table. This feature can be enabled by setting the import: true option.

+ +
+
// Initialize table with import enabled
+var myTable = new SmartTables('tableId', {
+    import: true,  // Enable import functionality
+    data: {
+        type: 'json',
+        source: initialData,
+        columns: [
+            { data: 'id', title: 'ID' },
+            { data: 'name', title: 'Name' },
+            { data: 'position', title: 'Position' }
+        ]
+    }
+});
+
+ +

Supported Import Formats

+
    +
  • CSV Files: Import data from comma-separated value files
  • +
  • JSON Files: Import data from JSON format files
  • +
  • Excel Files: Import data from Excel spreadsheets (.xlsx)
  • +
  • Text Files: Import data from plain text files with custom delimiters
  • +
+ +

Import Options

+
+
var myTable = new SmartTables('tableId', {
+    import: {
+        enabled: true,
+        formats: ['csv', 'json', 'xlsx'],  // Specify allowed formats
+        maxFileSize: 5 * 1024 * 1024,      // 5MB max file size
+        onImportStart: function() {
+            console.log('Import started');
+        },
+        onImportComplete: function(data) {
+            console.log('Import completed', data);
+        },
+        onImportError: function(error) {
+            console.error('Import failed', error);
+        }
+    }
+});
+
+ +

Example Usage

+
+
<!-- HTML Structure -->
+<table id="myTable" class="table">
+    <thead>
+        <tr>
+            <th data-priority="1">ID</th>
+            <th data-priority="2">Name</th>
+            <th data-priority="3">Position</th>
+        </tr>
+    </thead>
+    <tbody>
+        <!-- Data will be populated by SmartTables -->
+    </tbody>
+</table>
+
+<!-- JavaScript -->
+import { SmartTables } from 'smarttables';
+
+const table = new SmartTables('myTable', {
+    import: true,
+    data: {
+        type: 'json',
+        source: [],  // Start with empty data
+        columns: [
+            { data: 'id', title: 'ID' },
+            { data: 'name', title: 'Name' },
+            { data: 'position', title: 'Position' }
+        ]
+    }
+});
+
+ +
+ Pro Tip: When importing data, SmartTables automatically detects the column structure and maps the imported data to the appropriate columns. You can also provide custom column mappings for more control over the import process. +
+ +
+ Important: +
    +
  • Make sure your server is configured to handle file uploads if you're using the file import feature
  • +
  • Consider implementing file size limits and format validation on both client and server side
  • +
  • For large files, consider implementing chunked uploads or progress indicators
  • +
  • Always validate imported data before processing to prevent security issues
  • +
+
+
+ +
+

Event Hooks

+

SmartTables provides hooks for various events in the table lifecycle:

+ +
+
var myTable = new SmartTables('tableId', {
+    hooks: {
+        // Table lifecycle hooks
+        beforeInit: function(instance) {
+            console.log('Before table initialization');
+        },
+        afterInit: function(instance) {
+            console.log('Table initialized!');
+        },
+        
+        // Data hooks
+        beforeDataLoad: function(data, instance) {
+            console.log('About to load data');
+        },
+        afterDataLoad: function(data, instance) {
+            console.log('Data loaded successfully');
+        },
+        
+        // Action hooks
+        onSort: function(column, direction, instance) {
+            console.log('Table sorted by column', column, 'in', direction, 'direction');
+        },
+        onFilter: function(searchTerm, filteredRows, instance) {
+            console.log('Table filtered with term:', searchTerm);
+        },
+        onPaginate: function(pageNumber, instance) {
+            console.log('Page changed to', pageNumber);
+        }
+    }
+});
+
+
+ +
+

Search Capabilities

+

SmartTables includes powerful search capabilities with support for:

+
    +
  • Fuzzy matching: Finds results even with typos or partial matches
  • +
  • Special data types: Intelligently searches dates, numbers, emails, phone numbers
  • +
  • Comparison operators: Support for >, <, = with numeric values
  • +
  • Multi-word search: Matches records containing any or all search terms
  • +
+ +
+ Pro Tip: Users can search with operators like ">30" to find all numeric values greater than 30, or use "@gmail.com" to find all Gmail addresses. +
+
+ +
+

Responsive Behavior

+

SmartTables automatically adapts to different screen sizes by:

+
    +
  • Hiding less important columns on smaller screens based on priority
  • +
  • Providing an expand/collapse interface to view hidden column data
  • +
  • Automatically measuring and optimizing column widths
  • +
+ +
+
<!-- Set column priorities with data attributes -->
+<th data-priority="1">ID</th> <!-- Highest priority (last to hide) -->
+<th data-priority="2">Name</th>
+<th data-priority="3">Position</th>
+<th data-priority="4">Office</th>
+<th data-priority="5">Age</th> <!-- Lowest priority (first to hide) -->
+
+<!-- Force columns to always remain visible -->
+<th class="always-visible">Actions</th>
+
+
+ +
+

Export Options

+

SmartTables provides built-in export functionality:

+
    +
  • Excel: Export to XLSX format
  • +
  • CSV: Export to CSV format
  • +
  • Copy: Copy table data to clipboard
  • +
+ +
+
// Get table instance
+var table = document.getElementById('myTable').__smartTable;
+
+// Export to different formats
+table.exportData('excel');
+table.exportData('csv');
+table.exportData('copy');
+
+
+ +
+

API Methods

+

SmartTables exposes several methods for programmatic control:

+ +
+
// Get table instance
+var table = document.getElementById('myTable').__smartTable;
+
+// Redraw the table
+table.draw();
+
+// Sort by column
+table.sortBy(2, 'asc'); // Sort by 3rd column ascending
+
+// Filter the table
+table.handleSearch('developer');
+
+// Export data
+table.exportData('excel');
+
+// Hide/show columns
+table.hideColumn(3);
+table.showColumn(3);
+
+// Clear AJAX cache for server-side tables
+table.clearAjaxCache();
+
+// Manually trigger prefetch of next page
+table.prefetchNextPage();
+
+// Generate a unique cache key for current parameters
+const cacheKey = table.generateCacheKey();
+
+// Destroy the instance
+table.destroy();
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescriptionParametersReturn Value
draw()Redraws the table with current settingsNonevoid
sortBy(columnIndex, direction)Sorts the table by specified columncolumnIndex: number, direction: 'asc'|'desc'void
handleSearch(query)Filters the table using the search queryquery: stringvoid
exportData(format)Exports table data in the specified formatformat: 'excel'|'csv'|'copy'void
hideColumn(index)Hides the specified columnindex: numbervoid
showColumn(index)Shows the specified columnindex: numbervoid
clearAjaxCache()Clears all cached AJAX responsesNonevoid
prefetchNextPage()Manually fetches and caches the next page dataNonevoid
generateCacheKey()Generates a unique cache key for current parametersNonestring
destroy()Destroys the table instance and removes event listenersNonevoid
+
+
+ +
+

Plugin System

+

SmartTables supports plugins to extend its functionality:

+ +
+
// Define a plugin
+var myPlugin = {
+    name: 'myPlugin',
+    init: function() {
+        console.log('Plugin initialized for table:', this.instance.table.id);
+    },
+    afterDraw: function() {
+        console.log('Table was redrawn');
+    }
+};
+
+// Initialize table with the plugin
+var myTable = new SmartTables('tableId', {
+    plugins: [myPlugin]
+});
+
+
+ +
+

Performance Tips

+
    +
  • For large datasets (1000+ rows), consider using server-side processing
  • +
  • Set appropriate perPage values to limit the number of rows rendered at once
  • +
  • Use the loading.duration option to show a loading indicator for long operations
  • +
  • Disable features you don't need (search, sort, pagination) for simpler tables
  • +
+
+ +
+

Framework Integrations

+

SmartTables.js can be seamlessly integrated with various modern frameworks and backend technologies. Here's how to implement it in different environments:

+ +
+ +
+

+ +

+
+
+ +
+

React Integration

+
+
import { useEffect, useRef } from 'react';
+import { SmartTables } from 'smarttables';
+
+const DataTable = ({ data, columns }) => {
+    const tableRef = useRef(null);
+    const tableInstance = useRef(null);
+
+    useEffect(() => {
+        if (tableRef.current) {
+            // Initialize table
+            tableInstance.current = new SmartTables(tableRef.current, {
+                data: {
+                    type: 'json',
+                    source: data,
+                    columns
+                },
+                hooks: {
+                    afterDraw: () => {
+                        console.log('Table redrawn');
+                    }
+                }
+            });
+
+            // Cleanup on unmount
+            return () => {
+                if (tableInstance.current) {
+                    tableInstance.current.destroy();
+        }
+            };
+        }
+    }, [data, columns]);
+
+    return (
+        '' +
+            '' +
+                '' +
+                    '{columns.map(column => (' +
+                        '' +
+                    '))}' +
+                '' +
+            '' +
+            '' +
+                '{/* Data will be populated by SmartTables */}' +
+            '' +
+        '
' + + '{column.title}' + + '
' + ); +}; + +// Usage example +const App = () => { + const columns = [ + { data: 'id', title: 'ID', priority: 1 }, + { data: 'name', title: 'Name', priority: 2 }, + { data: 'position', title: 'Position', priority: 3 } + ]; + + const data = [ + { id: 1, name: 'John Doe', position: 'Developer' }, + { id: 2, name: 'Jane Smith', position: 'Designer' } + ]; + + return +};
+
+
+ React-Specific Tips: +
    +
  • Use useRef to maintain a stable reference to both the table element and instance
  • +
  • Initialize the table in useEffect to ensure the DOM is ready
  • +
  • Clean up the table instance in the effect's cleanup function
  • +
  • Consider using React's Context API for global table state management
  • +
  • Use TypeScript for better type safety
  • +
+
+
+
+
+
+ +
+

+ +

+
+
+ +
+

Vue.js Integration (Composition API)

+
+
import { onMounted, onBeforeUnmount, ref } from 'vue';
+import { SmartTables } from 'smarttables';
+
+export default {
+    setup(props) {
+        const tableRef = ref(null);
+        const tableInstance = ref(null);
+
+        onMounted(() => {
+            if (tableRef.value) {
+                tableInstance.value = new SmartTables(tableRef.value, {
+                    data: {
+                        type: 'json',
+                        source: props.data,
+                        columns: props.columns
+                    },
+                    hooks: {
+                        afterDraw: () => {
+                            console.log('Table redrawn');
+                        }
+                    }
+                });
+            }
+        });
+
+        onBeforeUnmount(() => {
+            if (tableInstance.value) {
+                tableInstance.value.destroy();
+            }
+        });
+
+        return {
+            tableRef
+        };
+    }
+}
+
+// Usage example
+const App = {
+    template: '',
+    setup() {
+        const columns = [
+            { data: 'id', title: 'ID', priority: 1 },
+            { data: 'name', title: 'Name', priority: 2 },
+            { data: 'position', title: 'Position', priority: 3 }
+        ];
+
+        const tableData = ref([
+            { id: 1, name: 'John Doe', position: 'Developer' },
+            { id: 2, name: 'Jane Smith', position: 'Designer' }
+        ]);
+
+        return {
+            columns,
+            tableData
+        };
+    }
+};
+
+
+ Vue.js-Specific Tips: +
    +
  • Use ref for template references and instance management
  • +
  • Initialize in onMounted hook
  • +
  • Clean up in onBeforeUnmount hook
  • +
  • Consider using Pinia for state management
  • +
  • Use TypeScript for better type safety
  • +
+
+
+
+
+
+ +
+

+ +

+
+
+ +
+

Angular Integration

+
+
import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';
+import { SmartTables } from 'smarttables';
+
+@Component({
+    selector: 'app-data-table',
+    template: '
{{column.title}}
' +}) +export class DataTableComponent implements OnInit, OnDestroy { + @ViewChild('dataTable') tableRef: ElementRef; + private tableInstance: SmartTables; + + columns = [ + { data: 'id', title: 'ID', priority: 1 }, + { data: 'name', title: 'Name', priority: 2 }, + { data: 'position', title: 'Position', priority: 3 } + ]; + + tableData = [ + { id: 1, name: 'John Doe', position: 'Developer' }, + { id: 2, name: 'Jane Smith', position: 'Designer' } + ]; + + ngOnInit() { + if (this.tableRef.nativeElement) { + this.tableInstance = new SmartTables(this.tableRef.nativeElement, { + data: { + type: 'json', + source: this.tableData, + columns: this.columns + }, + hooks: { + afterDraw: () => { + console.log('Table redrawn'); + } + } + }); + } + } + + ngOnDestroy() { + if (this.tableInstance) { + this.tableInstance.destroy(); + } + } +}
+
+
+ Angular-Specific Tips: +
    +
  • Use @ViewChild for template references
  • +
  • Initialize in ngOnInit lifecycle hook
  • +
  • Clean up in ngOnDestroy lifecycle hook
  • +
  • Consider using NgRx for state management
  • +
  • Use TypeScript for better type safety
  • +
+
+
+
+
+
+ + +
+

+ +

+
+
+ +
+

ASP.NET Core Integration

+
+
// Controller
+[ApiController]
+[Route("api/[controller]")]
+public class DataController : ControllerBase
+{
+    private readonly IDataService _service;
+
+    public DataController(IDataService service)
+    {
+        _service = service;
+    }
+
+    [HttpGet]
+    public async Task GetData([FromQuery] DataTableRequest request)
+    {
+        var data = await _service.GetDataAsync();
+        
+        // Apply server-side processing
+        var result = data
+            .Skip(request.Start)
+            .Take(request.Length)
+            .ToList();
+
+        return Ok(new {
+            draw = request.Draw,
+            recordsTotal = data.Count,
+            recordsFiltered = data.Count,
+            data = result
+        });
+    }
+}
+
+// JavaScript/TypeScript
+import { SmartTables } from 'smarttables';
+
+const table = new SmartTables('myTable', {
+    data: {
+        type: 'ajax',
+        source: '/api/data',
+        serverSide: true,
+        method: 'GET',
+        headers: {
+            'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
+        }
+    }
+});
+
+
+ ASP.NET Core-Specific Tips: +
    +
  • Use dependency injection for services
  • +
  • Implement proper error handling and logging
  • +
  • Consider using Entity Framework Core for data access
  • +
  • Use middleware for authentication and authorization
  • +
  • Consider using SignalR for real-time updates
  • +
+
+
+
+
+
+ + +
+

+ +

+
+
+
+ Pro Tip: When integrating with any framework, always ensure proper cleanup by calling the destroy() method when the component is unmounted or the table is no longer needed. This prevents memory leaks and ensures proper event cleanup. +
+ +
+

Framework-Specific Considerations:

+
    +
  • Modern JavaScript: Use ES6+ features like arrow functions, destructuring, and async/await for cleaner code.
  • +
  • TypeScript: Leverage TypeScript for better type safety and developer experience.
  • +
  • State Management: Consider using your framework's state management solution (Redux, Vuex, etc.) to handle table data and state.
  • +
  • CSRF Protection: Include appropriate CSRF tokens in AJAX requests when required by your backend framework.
  • +
  • Error Handling: Implement proper error handling both on the frontend and backend.
  • +
  • Performance: Use appropriate caching strategies and optimize database queries.
  • +
  • Security: Implement proper authentication and authorization mechanisms.
  • +
  • Testing: Write unit tests for both frontend and backend components.
  • +
  • Real-time Updates: Consider using WebSocket or similar technologies for real-time data updates.
  • +
  • Accessibility: Ensure your table implementation follows WCAG guidelines for accessibility.
  • +
+
+
+
+
+
+
+ +
+

Server-side Processing

+

SmartTables provides robust server-side processing for handling large datasets efficiently. By enabling data.serverSide: true, data filtering, sorting, and pagination are offloaded to the server, ideal for datasets with thousands or millions of records. The server processes requests and returns only the necessary data for display, ensuring fast performance.

+ +

Server-side Configuration

+

Configure SmartTables to fetch data from a server endpoint using AJAX with server-side processing enabled:

+
+
import { SmartTables } from 'smarttables';
+const serverTable = new SmartTables('serverTable', {
+    data: {
+        type: 'ajax',
+        source: '/api/employees',
+        serverSide: true,
+        method: 'GET',
+        prefetch: true,
+        cacheDuration: 300000, // 5 minutes cache duration
+        columns: [
+            { data: 'id', title: 'ID' },
+            { data: 'name', title: 'Name' },
+            { data: 'department', title: 'Department' },
+            { data: 'age', title: 'Age' },
+            { data: 'salary', title: 'Salary' },
+            { data: 'bonus', title: 'Bonus' }
+        ]
+    }
+});
+
+
+ +

Server Response Format

+

The server must return data in the following JSON format, compatible with SmartTables' expectations:

+
+
{
+    "data": [
+        { "id": 1, "name": "John Doe", "department": "Finance", "age": 32, "salary": 85000, "bonus": 5000 },
+        { "id": 2, "name": "Jane Smith", "department": "HR", "age": 28, "salary": 65000, "bonus": 3000 }
+        // ... more records
+    ],
+    "total": 1000 // Total records after filtering
+}
+
+
+ +
+ Important: Unlike some table libraries, SmartTables expects total instead of recordsTotal or recordsFiltered. Ensure your server returns the correct field to avoid pagination issues. +
+ +

Request Parameters

+

SmartTables sends the following query parameters in GET requests to the server:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescriptionExample
pageCurrent page number (1-based)2
perPageNumber of records per page10
searchGlobal search valueFinance
sortColumnName of the column being sorteddepartment
sortDirectionDirection of sortasc or desc
+
+ +
+ Pro Tip: Use the data.params option to customize parameter names if your server expects different ones (e.g., limit instead of perPage): +
+
data: {
+    type: 'ajax',
+    source: '/api/employees',
+    serverSide: true,
+    params: {
+        limit: function() { return this.perPage; },
+        offset: function() { return (this.currentPage - 1) * this.perPage; },
+        query: 'search'
+    }
+}
+ + +

Advanced Caching for Server-side Data

+

SmartTables enhances performance with client-side caching and prefetching:

+
    +
  • Cache Keys: Unique keys are generated based on page, search, sortColumn, and sortDirection.
  • +
  • Prefetching: Automatically loads the next page when prefetch: true, reducing wait times.
  • +
  • Cache Invalidation: Clears cache on parameter changes (e.g., new search term).
  • +
  • Cache Duration: Configurable via cacheDuration (default: 5 minutes).
  • +
+ +
+
const serverTable = new SmartTables('serverTable', {
+    data: {
+        type: 'ajax',
+        source: '/api/employees',
+        serverSide: true,
+        prefetch: true,
+        cacheDuration: 600000, // 10 minutes
+        withCredentials: true,
+        headers: { 'X-API-Key': 'your-api-key' }
+    },
+    debug: true // Log cache operations
+});
+
+ +

Implementing a Server-side Endpoint

+

Below are example implementations in multiple languages to demonstrate flexibility. Your server should handle pagination, filtering, and sorting based on the request parameters and return the expected response format.

+ +
+ +
+

+ +

+
+
+

This example uses ASP.NET Core with Entity Framework Core for database access, implementing server-side processing with caching.

+
+
using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Caching.Memory;
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+
+public class Employee
+{
+    public int Id { get; set; }
+    public string Name { get; set; }
+    public string Department { get; set; }
+    public int Age { get; set; }
+    public decimal Salary { get; set; }
+    public decimal Bonus { get; set; }
+}
+
+public class PaginatedResponse<T>
+{
+    public T[] Data { get; set; }
+    public int Total { get; set; }
+}
+
+[ApiController]
+[Route("api/[controller]")]
+public class EmployeesController : ControllerBase
+{
+    private readonly AppDbContext _context;
+    private readonly IMemoryCache _cache;
+
+    public EmployeesController(AppDbContext context, IMemoryCache cache)
+    {
+        _context = context;
+        _cache = cache;
+    }
+
+    [HttpGet]
+    public async Task<IActionResult> GetEmployees(
+        [FromQuery] int page = 1,
+        [FromQuery] int perPage = 10,
+        [FromQuery] string search = "",
+        [FromQuery] string sortColumn = "",
+        [FromQuery] string sortDirection = "asc")
+    {
+        try
+        {
+            // Generate cache key
+            string cacheKey = $"employees_{page}_{perPage}_{search}_{sortColumn}_{sortDirection}";
+
+            // Try to get from cache
+            if (!_cache.TryGetValue(cacheKey, out PaginatedResponse<Employee> response))
+            {
+                // Base query
+                var query = _context.Employees.AsQueryable();
+
+                // Apply search
+                if (!string.IsNullOrEmpty(search))
+                {
+                    query = query.Where(e =>
+                        e.Name.Contains(search, StringComparison.OrdinalIgnoreCase) ||
+                        e.Department.Contains(search, StringComparison.OrdinalIgnoreCase) ||
+                        e.Age.ToString().Contains(search) ||
+                        e.Salary.ToString().Contains(search) ||
+                        e.Bonus.ToString().Contains(search));
+                }
+
+                // Get total count
+                int total = await query.CountAsync();
+
+                // Apply sorting
+                if (!string.IsNullOrEmpty(sortColumn))
+                {
+                    query = sortDirection.ToLower() == "asc"
+                        ? query.OrderBy(e => EF.Property<object>(e, sortColumn))
+                        : query.OrderByDescending(e => EF.Property<object>(e, sortColumn));
+                }
+
+                // Apply pagination
+                query = query.Skip((page - 1) * perPage).Take(perPage);
+
+                // Execute query
+                var data = await query.ToArrayAsync();
+
+                response = new PaginatedResponse<Employee>
+                {
+                    Data = data,
+                    Total = total
+                };
+
+                // Cache the result
+                _cache.Set(cacheKey, response, TimeSpan.FromMinutes(5));
+            }
+
+            return Ok(response);
+        }
+        catch (Exception ex)
+        {
+            return StatusCode(500, new { data = Array.Empty<Employee>(), total = 0, error = "Internal server error" });
+        }
+    }
+}
+
+
+
+ ASP.NET Core Tips: +
    +
  • Use IMemoryCache or IDistributedCache for caching responses.
  • +
  • Validate sortColumn to prevent SQL injection when using dynamic sorting.
  • +
  • Consider using dependency injection for database context and logging.
  • +
+
+
+
+
+ + +
+

+ +

+
+
+

A simple Express.js implementation with in-memory data, adaptable to any database.

+
+
const express = require('express');
+const cors = require('cors');
+const app = express();
+
+app.use(cors());
+app.use(express.json());
+
+// Mock data (replace with database)
+const employees = [
+    { id: 1, name: 'John Doe', department: 'Engineering', age: 32, salary: 85000, bonus: 5000 },
+    { id: 2, name: 'Jane Smith', department: 'Marketing', age: 28, salary: 65000, bonus: 3000 }
+    // ... more records
+];
+
+app.get('/api/employees', async (req, res) => {
+    try {
+        const { page = 1, perPage = 10, search = '', sortColumn = '', sortDirection = 'asc' } = req.query;
+        const pageNum = parseInt(page);
+        const perPageNum = parseInt(perPage);
+
+        // Filter data
+        let filteredData = employees;
+        if (search) {
+            const searchLower = search.toLowerCase();
+            filteredData = employees.filter(item =>
+                Object.values(item).some(val =>
+                    String(val).toLowerCase().includes(searchLower)
+                )
+            );
+        }
+
+        // Get total
+        const total = filteredData.length;
+
+        // Sort data
+        if (sortColumn) {
+            filteredData.sort((a, b) => {
+                const aVal = a[sortColumn];
+                const bVal = b[sortColumn];
+                if (typeof aVal === 'number' && typeof bVal === 'number') {
+                    return sortDirection === 'asc' ? aVal - bVal : bVal - aVal;
+                }
+                const aStr = String(aVal).toLowerCase();
+                const bStr = String(bVal).toLowerCase();
+                return sortDirection === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr);
+            });
+        }
+
+        // Paginate
+        const offset = (pageNum - 1) * perPageNum;
+        const paginatedData = filteredData.slice(offset, offset + perPageNum);
+
+        res.json({
+            data: paginatedData,
+            total
+        });
+    } catch (error) {
+        console.error(error);
+        res.status(500).json({ data: [], total: 0, error: 'Internal server error' });
+    }
+});
+
+app.listen(3000, () => console.log('Server running on port 3000'));
+
+
+
+ Node.js Tips: +
    +
  • Integrate with a database like MongoDB or PostgreSQL for production.
  • +
  • Use a caching layer like Redis for better performance.
  • +
  • Add middleware for authentication if needed.
  • +
+
+
+
+
+ + +
+

+ +

+
+
+

A FastAPI implementation using SQLAlchemy for database operations.

+
+
from fastapi import FastAPI, Depends
+from sqlalchemy.orm import Session
+from sqlalchemy import or_, desc, asc
+from typing import Optional
+from pydantic import BaseModel
+import models
+from database import SessionLocal
+
+app = FastAPI()
+
+# Pydantic model for response
+class PaginatedResponse(BaseModel):
+    data: list
+    total: int
+
+def get_db():
+    db = SessionLocal()
+    try:
+        yield db
+    finally:
+        db.close()
+
+@app.get("/api/employees", response_model=PaginatedResponse)
+async def get_employees(
+    page: int = 1,
+    perPage: int = 10,
+    search: Optional[str] = None,
+    sortColumn: Optional[str] = None,
+    sortDirection: str = "asc",
+    db: Session = Depends(get_db)
+):
+    try:
+        # Base query
+        query = db.query(models.Employee)
+
+        # Apply search
+        if search:
+            query = query.filter(
+                or_(
+                    models.Employee.name.ilike(f"%{search}%"),
+                    models.Employee.department.ilike(f"%{search}%"),
+                    models.Employee.age.cast(str).ilike(f"%{search}%"),
+                    models.Employee.salary.cast(str).ilike(f"%{search}%"),
+                    models.Employee.bonus.cast(str).ilike(f"%{search}%")
+                )
+            )
+
+        # Get total
+        total = query.count()
+
+        # Apply sorting
+        if sortColumn:
+            column = getattr(models.Employee, sortColumn, None)
+            if column:
+                query = query.order_by(asc(column) if sortDirection == "asc" else desc(column))
+
+        # Apply pagination
+        offset = (page - 1) * perPage
+        query = query.offset(offset).limit(perPage)
+
+        # Execute
+        data = query.all()
+
+        return {
+            "data": data,
+            "total": total
+        }
+    except Exception as e:
+        return {"data": [], "total": 0, "error": str(e)}
+
+
+
+ Python Tips: +
    +
  • Use Pydantic models for response validation.
  • +
  • Implement caching with libraries like cachetools.
  • +
  • Secure endpoints with FastAPI's security utilities.
  • +
+
+
+
+
+
+ +

Handling Pagination with Search

+

Ensure consistent total counts across requests to prevent pagination issues:

+
+
const table = new SmartTables('myTable', {
+    data: {
+        serverSide: true,
+        source: '/api/employees',
+        method: 'GET'
+    },
+    hooks: {
+        afterDataLoad: function(response) {
+            console.log('Total records:', response.total);
+        }
+    }
+});
+
+
+ +
+ Important Considerations: +
    +
  • Calculate total after applying filters but before pagination.
  • +
  • Reset to page 1 when search changes to avoid invalid page requests.
  • +
  • Validate sortColumn to ensure it matches valid fields.
  • +
  • Use logging to debug inconsistencies in counts or data.
  • +
+
+ +

Real-time Debugging

+

Enable debug: true to log AJAX requests, responses, and cache operations:

+
    +
  • Request parameters sent to the server.
  • +
  • Cache hits, misses, and key generation.
  • +
  • Prefetching status and errors.
  • +
  • Total counts and pagination calculations.
  • +
+ +
+ Pro Tip: Combine client-side debug logs with server-side logging to troubleshoot issues. Check that total remains consistent across pages for the same search query. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Table not responsive? Make sure you've set data-priority attributes on your table headers.
  • +
  • Search not working as expected? Check your fuzzyMatch settings and try adjusting the threshold.
  • +
  • Export not working? Ensure you have the required dependencies for Excel export.
  • +
  • Performance issues? Try reducing the number of rows per page or use server-side processing.
  • +
+
+ +

Server-side Processing Issues

+

When working with server-side processing, you might encounter these common challenges:

+ +
+
+

+ +

+
+
+

Symptoms: The table shows different total counts when navigating between pages. For example, page 1 shows "Showing 1 to 10 of 25 entries" but page 2 shows "Showing 11 to 20 of 13 entries".

+ +

Solutions:

+
    +
  • Server-side: Ensure the search filter is applied consistently before calculating the total count. Apply the search once to the entire dataset before pagination.
  • +
  • Client-side: Clear the cache when search parameters change using clearAjaxCache(), and ensure the total from the server response is stored consistently.
  • +
  • Debug: Add logging on both server and client to track the search term, filtered count, and total count across requests.
  • +
+ +
+
// Server-side fix (PHP example)
+// Apply search filter once to get consistent count
+$filteredData = [];
+$totalRecords = count($data);
+
+if (!empty($search)) {
+    $searchLower = strtolower($search);
+    foreach ($data as $item) {
+        $found = false;
+        foreach ($item as $key => $value) {
+            $strValue = strtolower((string)$value);
+            if (strpos($strValue, $searchLower) !== false) {
+                $found = true;
+                break;
+            }
+        }
+        if ($found) {
+            $filteredData[] = $item;
+        }
+    }
+} else {
+    $filteredData = $data;
+}
+
+// Get TOTAL filtered count BEFORE pagination
+$totalFiltered = count($filteredData);
+
+// Now apply pagination
+$offset = ($page - 1) * $perPage;
+$paginatedData = array_slice($filteredData, $offset, $perPage);
+
+// Return consistent counts
+return [
+    'recordsTotal' => $totalRecords,
+    'recordsFiltered' => $totalFiltered,
+    'data' => $paginatedData
+];
+
+
+
+
+ +
+

+ +

+
+
+

Symptoms: Stale data appears after changing search parameters, or prefetching doesn't seem to work.

+ +

Solutions:

+
    +
  • Cache keys: Ensure cache keys include all relevant parameters (search term, sort column, sort direction)
  • +
  • Cache invalidation: Clear the cache when search or sort parameters change
  • +
  • Cache debugging: Enable debug mode to see cache operations in the console
  • +
+ +
+
// Client-side cache key generation
+generateCacheKey() {
+    // Include ALL parameters that affect the results in the key
+    const params = {
+        url: this.options.data.url,
+        page: this.currentPage,
+        perPage: this.options.perPage,
+        search: this.searchQuery || '',
+        sort: this.currentSort
+    };
+    
+    this.log('Generating cache key with params:', JSON.stringify(params));
+    return JSON.stringify(params);
+}
+
+
+
+
+ +
+

+ +

+
+
+

Symptoms: Columns sort incorrectly, especially numeric, date, or special format columns.

+ +

Solutions:

+
    +
  • Column mapping: Implement direct column mapping between column indices and field names
  • +
  • Data type detection: Sort different data types appropriately (numbers, dates, strings)
  • +
  • Normalization: Normalize values before comparison for consistent sorting
  • +
+ +
+
// Server-side sorting solution (PHP)
+// Define column map for sorting
+$columnMap = [
+    0 => 'id',
+    1 => 'name',
+    2 => 'position',
+    3 => 'office',
+    4 => 'age',
+    5 => 'startDate',
+    6 => 'salary'
+];
+
+// Identify data types for special handling
+$numericFields = ['id', 'age', 'salary', 'bonus', 'progress'];
+$dateFields = ['startDate', 'hireDate'];
+
+// Apply sorting with data type awareness
+if ($order) {
+    $columnIndex = $order['column'];
+    $columnKey = isset($columnMap[$columnIndex]) ? $columnMap[$columnIndex] : null;
+    $direction = $order['dir'];
+    
+    if ($columnKey) {
+        usort($filteredData, function($a, $b) use ($columnKey, $direction, $numericFields, $dateFields) {
+            // Handle numeric fields
+            if (in_array($columnKey, $numericFields)) {
+                $aVal = (float)$a[$columnKey];
+                $bVal = (float)$b[$columnKey];
+                return $direction === 'asc' ? $aVal - $bVal : $bVal - $aVal;
+            }
+            // Handle date fields
+            else if (in_array($columnKey, $dateFields)) {
+                $aDate = strtotime($a[$columnKey]);
+                $bDate = strtotime($b[$columnKey]);
+                return $direction === 'asc' ? $aDate - $bDate : $bDate - $aDate;
+            }
+            // Default string comparison
+            else {
+                $aVal = strtolower($a[$columnKey]);
+                $bVal = strtolower($b[$columnKey]);
+                $result = strcmp($aVal, $bVal);
+                return $direction === 'asc' ? $result : -$result;
+            }
+        });
+    }
+}
+
+
+
+
+ +
+

+ +

+
+
+

Symptoms: Empty results when navigating to a page, or "No matching records found" errors when searching.

+ +

Solutions:

+
    +
  • Max page calculation: Ensure the max page is calculated based on filtered results
  • +
  • Page clamping: If requested page exceeds max page, clamp to max page
  • +
  • Search resets: Reset to page 1 when search query changes
  • +
+ +
+
// Server-side page validation (PHP)
+// Calculate maximum page based on filtered count
+$maxPage = ceil($totalFiltered / $perPage);
+
+// Ensure page is valid
+if ($page < 1) {
+    $page = 1;
+} else if ($page > $maxPage && $maxPage > 0) {
+    $page = $maxPage;
+}
+
+// Calculate offset based on validated page
+$offset = ($page - 1) * $perPage;
+
+// Client-side search reset
+handleSearch(value) {
+    this.searchQuery = value;
+
+    if (this.options.data.serverSide) {
+        // Reset the cache when search changes
+        this.clearAjaxCache();
+        
+        this.currentPage = 1; // Reset to first page on new search
+        this.loadAjax(); // Fetch new data with search query
+    } else {
+        // Client-side search logic
+    }
+}
+
+
+
+
+
+
+ +
+

Managing Records with SmartTables

+

SmartTables provides powerful functionality for managing records with full CRUD (Create, Read, Update, Delete) operations. This allows you to build interactive data management interfaces with minimal effort.

+ +

Basic Setup for Record Management

+
+
// Import the SmartTables module
+import { SmartTables } from './optional/smartTables/smartTables.bundle.js';
+
+document.addEventListener('DOMContentLoaded', () => {
+    // Initialize SmartTables with data management options
+    const clientTable = new SmartTables('clientTable', {
+        // Data configuration
+        data: {
+            type: 'json',
+            source: sampleData,  // Your data array
+            idField: 'id',       // Field that uniquely identifies each record
+            columns: [
+                { data: 'id', title: 'ID', editable: false },
+                { data: 'name', title: 'Name', required: true },
+                { data: 'email', title: 'Email', type: 'email', required: true },
+                { data: 'phone', title: 'Phone', type: 'tel' },
+                { data: 'active', title: 'Active', type: 'boolean' },
+                { 
+                    data: 'actions',
+                    title: 'Actions',
+                    sortable: false,
+                    editable: false,
+                    render: (data, row) => 
+                        '<button type="button" class="btn btn-primary btn-xs edit-btn" data-id="' + row.id + '">Edit</button> ' + 
+                        '<button type="button" class="btn btn-danger btn-xs delete-btn" data-id="' + row.id + '">Del</button>'
+                }
+            ]
+        },
+        // Enable record management features
+        addRecord: true,  // Shows an Add Record button
+        // Other options...
+    });
+
+    // Handle edit and delete button clicks with event delegation
+    clientTable.table.addEventListener('click', e => {
+        if (e.target.classList.contains('edit-btn')) {
+            const rowId = e.target.getAttribute('data-id');
+            clientTable.edit(rowId);
+        } else if (e.target.classList.contains('delete-btn')) {
+            const rowId = e.target.getAttribute('data-id');
+            clientTable.delete(rowId);
+        }
+    });
+});
+
+ +

Advanced Record Management with Hooks

+

SmartTables provides a comprehensive hooks system to customize the behavior of record management operations:

+
+
const table = new SmartTables('myTable', {
+    // ... other options
+    hooks: {
+        // Edit operation hooks
+        beforeEdit(rowId) {
+            // Called before edit mode is entered
+            console.log('Editing row: ' + rowId);
+            return true; // Return false to prevent editing
+        },
+        afterEdit(rowId, rowData, success) {
+            // Called after edit is completed
+            console.log('Edit completed: ' + success);
+        },
+        onEditModalCreated(modalHTML, rowId, rowData) {
+            // Customize the edit modal HTML
+            return modalHTML;
+        },
+        onEditModalBeforeShow(modalElement, rowId, rowData) {
+            // Access the modal DOM before it's shown
+        },
+        onEditDataCollected(updatedData, rowId, originalData) {
+            // Process and validate form data
+            return updatedData;
+        },
+        onEditSuccess(rowId, updatedRecord, submittedData) {
+            // Handle successful update
+            console.log('Record updated successfully');
+        },
+        onEditError(rowId, error, attemptedData) {
+            // Handle update errors
+            console.error('Update failed', error);
+        },
+
+        // Delete operation hooks
+        beforeDelete(rowId) {
+            // Called before deletion
+            return confirm('Are you sure you want to delete this record?');
+        },
+        afterDelete(rowId, data, success) {
+            // Called after deletion attempt
+            if (success) console.log('Deletion successful');
+        },
+        onDeleteModalCreated(modalHtml, rowId) {
+            // Customize deletion confirmation modal
+            return modalHtml;
+        },
+        onDeleteSuccess(rowId, deletedRecord) {
+            // Handle successful deletion
+        },
+
+        // Add record operation hooks
+        beforeAddRecord(initialData, options) {
+            // Called before add form is shown
+            return initialData; // Return modified initial data
+        },
+        afterAddRecord(newRecordData, success) {
+            // Called after add operation completes
+            if (success) console.log('Record added');
+        },
+        onAddModalCreated(modalHTML, initialData, options) {
+            // Customize add record modal
+            return modalHTML;
+        },
+        onAddModalBeforeShow(modalElement, initialData, options) {
+            // DOM access before modal shows
+        },
+        onAddDataCollected(newRecordData, options) {
+            // Process and validate new record data
+            return newRecordData;
+        },
+        onAddRecordSuccess(newRecord) {
+            // Handle successful addition
+        },
+        onAddRecordError(error, attemptedData) {
+            // Handle addition errors
+        },
+        onAddCancelled(options) {
+            // Called when add is cancelled
+        }
+    }
+});
+
+ +

Column Type Configuration

+

SmartTables supports various input types for different data fields:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeDescriptionAdditional Options
textDefault text inputmaxlength, pattern
numberNumeric inputmin, max, step
emailEmail input with validationpattern
telTelephone inputformat, placeholder
dateDate pickermin, max
selectDropdown selectionoptions (array)
booleanCheckbox-
passwordPassword inputminlength
+
+ +
+
// Column configuration examples for different types
+columns: [
+    { 
+        data: 'salary', 
+        title: 'Salary', 
+        type: 'number',     // Numeric input
+        min: 0,             // Minimum value
+        step: 500,          // Increment by 500
+        render: data => '$' + data.toLocaleString() // Format with $ and commas
+    },
+    { 
+        data: 'department', 
+        title: 'Department', 
+        type: 'select',     // Dropdown select input
+        options: [          // Available options
+            'Engineering',
+            'Sales',
+            'Marketing',
+            'Human Resources'
+        ]
+    },
+    { 
+        data: 'joinDate', 
+        title: 'Join Date',  
+        type: 'date',       // Date input
+        render: data => new Date(data).toLocaleDateString() // Format date
+    },
+    { 
+        data: 'active', 
+        title: 'Active', 
+        type: 'boolean',    // Boolean/checkbox
+        render: data => data ? 
+            '<span class="badge bg-success">Yes</span>' : 
+            '<span class="badge bg-danger">No</span>'
+    }
+]
+
+ +

Visual Feedback for Row States

+

Implement visual feedback for different row states during CRUD operations:

+
+
// Track row states
+const rowStates = {
+    editing: null,     // ID of the row being edited
+    saved: new Set(),  // Set of recently saved row IDs
+    adding: false      // Flag for adding operation
+};
+
+// Apply classes in hooks
+hooks: {
+    beforeEdit(rowId) {
+        rowStates.editing = rowId;
+        const rowElement = this.table.querySelector('tbody tr[data-id="' + rowId + '"]');
+        if (rowElement) {
+            rowElement.classList.add('editing');
+        }
+        return true;
+    },
+    
+    afterEdit(rowId, rowData, success) {
+        rowStates.editing = null;
+        if (success) {
+            rowStates.saved.add(rowId);
+            setTimeout(() => {
+                rowStates.saved.delete(rowId);
+                const row = this.table.querySelector('tbody tr[data-id="' + rowId + '"]');
+                if (row) row.classList.remove('saved');
+            }, 3000);
+        }
+        this.draw();
+    }
+}
+
+ +
+ Pro Tip: When implementing CRUD operations, consider using a custom modal system for consistency across the application. SmartTables hooks make it easy to integrate with custom UI components. +
+ +
+ +
+ + +
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-sortablejs.html b/legacy/smartadmin/docs-sortablejs.html new file mode 100644 index 0000000..2d2743f --- /dev/null +++ b/legacy/smartadmin/docs-sortablejs.html @@ -0,0 +1,2303 @@ + + + + + + + + SortableJS | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

SortableJS

+ + + + + + +
+ + +
+ +
+
+ +

Turning Chaos into Click-and-Drag Order!

+ +
+

+ Sortable.js is a powerful JavaScript library that enables drag-and-drop interactions for reordering elements within lists and grids. It provides a smooth, intuitive way for users to reorganize content with minimal code implementation. +

+
+ Key Features: +
    +
  • Drag and drop sorting for lists, grids, and nested structures
  • +
  • Touch device support for mobile-friendly interactions
  • +
  • Cross-list sorting capabilities
  • +
  • Animation effects during sorting operations
  • +
  • Customizable drag handles
  • +
  • Event hooks for complete control over the sorting process
  • +
  • Support for multiple item selection and manipulation
  • +
+
+
+ +
+

Installation

+

+ Include Sortable.js in your project by adding the script to your HTML file: +

+
+
<script src="plugins/sortablejs/sortable.js"</script>
+
+

+ Initialize Sortable on any container element that holds sortable items: +

+
+
// Basic initialization
+new Sortable(document.getElementById('list'), {
+    // options
+});
+
+
+ Pro Tip: For optimal performance, apply Sortable to the container element rather than individual items. The library will automatically handle the draggable behavior for all child elements. +
+
+ +
+

HTML Structure

+

+ Sortable.js works with virtually any HTML structure. The most common pattern is a list of items: +

+
+

+<!-- Simple list -->
+<ul id="simple-list">
+    <li>Item 1</li>
+    <li>Item 2</li>
+    <li>Item 3</li>
+    <li>Item 4</li>
+</ul>
+
+<!-- Grid layout -->
+<div id="grid-demo" class="row">
+    <div class="col-3">Item 1</div>
+    <div class="col-3">Item 2</div>
+    <div class="col-3">Item 3</div>
+    <div class="col-3">Item 4</div>
+</div>
+
+<!-- Nested lists -->
+<ul id="nested-demo">
+    <li>Item 1
+        <ul>
+            <li>Subitem 1.1</li>
+            <li>Subitem 1.2</li>
+        </ul>
+    </li>
+    <li>Item 2</li>
+</ul>
+
+
+ Note: Sortable works with any element type, not just lists. You can use divs, cards, or any other container structure. +
+
+ +
+

Configuration Options

+

+ Sortable.js offers numerous configuration options to customize its behavior: +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDefaultDescription
groupString or ObjectnullGroup name or configuration for shared lists. Enables drag between lists with the same group name.
sortBooleantrueEnables sorting within list.
delayNumber0Time in milliseconds to define when the sorting should start.
delayOnTouchOnlyBooleanfalseOnly delay if user is using touch.
animationNumber150Animation speed in milliseconds.
handleStringnullCSS selector for the drag handle element within list items.
filterStringnullCSS selector for elements that should not be draggable.
draggableString>*CSS selector for draggable items within the container.
ghostClassStringsortable-ghostClass name for the drop placeholder.
chosenClassStringsortable-chosenClass name for the chosen item.
dragClassStringsortable-dragClass name for the dragging item.
swapThresholdNumber1Threshold of the swap zone (0 to 1).
invertSwapBooleanfalseInverts the swap zone if set to true.
directionStringnullDirection of sorting ('vertical', 'horizontal').
+
+
+ Pro Tip: Use the group option with { name: 'shared', pull: true, put: true } to enable drag-and-drop between multiple lists. +
+
+ +
+

Events

+

+ Sortable.js provides a rich set of events to hook into the sorting lifecycle: +

+
+
new Sortable(element, {
+    // Event callbacks
+    onStart: function(evt) {
+        // Element dragging started
+        console.log('Drag started', evt.oldIndex);
+    },
+    onEnd: function(evt) {
+        // Element dragging ended
+        console.log('Drag ended', evt.oldIndex, evt.newIndex);
+    },
+    onAdd: function(evt) {
+        // Element is dropped into the list from another list
+        console.log('Item added', evt.item);
+    },
+    onUpdate: function(evt) {
+        // Changed position within list
+        console.log('Item position changed', evt.oldIndex, evt.newIndex);
+    },
+    onSort: function(evt) {
+        // Called during sorting
+        console.log('Sorting in progress');
+    },
+    onRemove: function(evt) {
+        // Element is removed from the list into another list
+        console.log('Item removed', evt.item);
+    },
+    onChange: function(evt) {
+        // Element changed list or position
+        console.log('Change occurred', evt);
+    }
+});
+
+
+ Event Object Properties: +
    +
  • item: The dragged element
  • +
  • from: Source list
  • +
  • to: Destination list
  • +
  • oldIndex: Element's old index within the source list
  • +
  • newIndex: Element's new index within the destination list
  • +
  • oldDraggableIndex: Element's old index within the source list, only counting draggable elements
  • +
  • newDraggableIndex: Element's new index within the destination list, only counting draggable elements
  • +
+
+
+ +
+

Methods

+

+ Sortable.js provides several methods for programmatic control: +

+
+
// Create a Sortable instance
+const sortable = new Sortable(document.getElementById('list'), {
+    // options
+});
+
+// Get the order of items as an array of IDs
+const order = sortable.toArray();
+
+// Sort elements in a predefined order
+sortable.sort(['item-3', 'item-1', 'item-2']);
+
+// Destroy the Sortable instance
+sortable.destroy();
+
+// Save the current order
+const savedOrder = sortable.save();
+
+// Option getter/setter
+const currentAnimation = sortable.option('animation'); // getter
+sortable.option('animation', 300); // setter
+
+
+ Pro Tip: Use the toArray() method to get the current order of items, which is useful for saving the state to a database. +
+
+ +
+

Plugins

+

+ Sortable.js includes several built-in plugins that extend its functionality: +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PluginDescription
AutoScrollAutomatically scrolls the window when dragging near the edges.
MultiDragEnables selecting and dragging multiple items simultaneously.
SwapAllows direct swapping of items instead of sorting.
RevertReverts items to their original position if dropped outside valid targets.
RemoveRemoves items when dropped outside valid targets.
+
+

+ To use a plugin, you need to activate it and configure it in your Sortable initialization: +

+
+
// Enable MultiDrag plugin
+Sortable.mount(new MultiDrag());
+
+// Initialize with plugin options
+new Sortable(element, {
+    multiDrag: true,
+    selectedClass: 'selected',
+    multiDragKey: 'CTRL'
+});
+
+
+ Note: Some plugins may require additional CSS to properly style the interaction states. +
+
+ +
+

Usage Examples

+

Basic Sortable List

+
+
// Simple sortable list
+new Sortable(document.getElementById('simple-list'), {
+    animation: 150,
+    ghostClass: 'blue-background-class'
+});
+
+ +

Shared Lists with Drag Between

+
+
// List A
+new Sortable(document.getElementById('list-a'), {
+    group: 'shared',
+    animation: 150
+});
+
+// List B
+new Sortable(document.getElementById('list-b'), {
+    group: 'shared',
+    animation: 150
+});
+
+ +

Kanban Board

+
+
// Initialize each column as a Sortable list
+document.querySelectorAll('.kanban-column').forEach(column => {
+    new Sortable(column, {
+        group: 'kanban',
+        animation: 150,
+        ghostClass: 'blue-background-class',
+        onEnd: function(evt) {
+            // Update task status based on the column it was moved to
+            const taskId = evt.item.dataset.id;
+            const newStatus = evt.to.dataset.status;
+            updateTaskStatus(taskId, newStatus);
+        }
+    });
+});
+
+ +

Nested Lists

+
+
// Initialize parent list
+new Sortable(document.getElementById('nested-parent'), {
+    group: 'nested',
+    animation: 150
+});
+
+// Initialize all child lists
+document.querySelectorAll('.nested-child').forEach(list => {
+    new Sortable(list, {
+        group: 'nested',
+        animation: 150
+    });
+});
+
+ +

Using MultiDrag Plugin

+
+
// Mount the MultiDrag plugin
+Sortable.mount(new MultiDrag());
+
+// Initialize with MultiDrag options
+new Sortable(document.getElementById('multi-list'), {
+    animation: 150,
+    multiDrag: true,
+    selectedClass: 'selected',
+    multiDragKey: 'CTRL'
+});
+
+
+ Pro Tip: For complex applications, consider using the store option to automatically save and restore the sort order using localStorage or a server API. +
+
+ +
+

Best Practices

+
+
    +
  • Performance: For large lists (100+ items), consider using the animation: 0 option to improve performance.
  • +
  • Mobile Support: Set delayOnTouchOnly: true and delay: 100 for better touch device experience.
  • +
  • Accessibility: Add appropriate ARIA attributes to sortable elements to improve accessibility.
  • +
  • Feedback: Use the chosenClass and ghostClass options to provide visual feedback during drag operations.
  • +
  • Nested Lists: When working with nested lists, ensure each list has the same group name but unique IDs.
  • +
  • Saving State: Use the onEnd event to save the new order to your database or localStorage.
  • +
  • Drag Handles: For complex items, use the handle option to specify a drag handle to prevent accidental dragging when interacting with other elements.
  • +
+
+
+ +
+

Browser Support

+

+ Sortable.js supports all modern browsers including: +

+
    +
  • Chrome
  • +
  • Firefox
  • +
  • Safari
  • +
  • Edge
  • +
  • IE11 (with polyfills)
  • +
  • Mobile browsers (iOS Safari, Chrome for Android)
  • +
+
+ Note: For IE11 support, you may need to include additional polyfills for ES6 features. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Items not draggable? Check that your selector matches the items and that they don't have position: static.
  • +
  • Can't drag between lists? Ensure both lists have the same group name and that pull and put options are correctly set.
  • +
  • Dragging starts immediately on touch devices? Add a delay and set delayOnTouchOnly: true.
  • +
  • Ghost element looks wrong? Customize the appearance with ghostClass or adjust your CSS.
  • +
  • Events not firing? Check that your event handlers are properly bound and that the Sortable instance is correctly initialized.
  • +
  • Nested sortable not working? Ensure each nested list has its own Sortable instance with the same group name.
  • +
  • Performance issues with large lists? Reduce or disable animation, or implement virtual scrolling for very large datasets.
  • +
+
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-streamlinejs.html b/legacy/smartadmin/docs-streamlinejs.html new file mode 100644 index 0000000..af68f2a --- /dev/null +++ b/legacy/smartadmin/docs-streamlinejs.html @@ -0,0 +1,2367 @@ + + + + + + + + Streamline.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Streamline.js

+ + + + + + +
+ + +
+ +
+
+ +
+

Sleek Data Visualization in Micro Format!

+

Streamline.js is a lightweight, dependency-free JavaScript library for generating micro charts, often called sparklines. These small, simple charts are designed to be embedded inline with text or in small spaces where a full-sized chart would be impractical.

+

+ These compact visualizations are perfect for dashboards, reports, and anywhere you need to show + trends or data patterns at a glance, without the overhead of a full charting library. +

+
+ Pro Tip: Streamline works with your existing HTML elements and automatically adapts to different screen sizes through its responsive design capabilities. +
+
+ +
+

Installation

+

Streamline.js is available as a modern ES6 module. You can include it in your project in several ways:

+ +

1. Using ES6 Modules (Recommended)

+
+
// Import the streamline function and initialization utility
+import { streamline, initStreamlines } from './../thirdparty/streamline.es6.js';
+
+// To initialize all elements with .streamline class
+initStreamlines();
+
+// Or to manually create a chart on a specific element
+const element = document.getElementById('myChart');
+streamline(element, {
+    type: 'line',
+    lineColor: 'var(--primary-500)',
+    fillColor: 'var(--primary-200)',
+    height: 40,
+    width: 200
+});
+
+ +

2. Using in an HTML file

+
+
<!-- Include the script -->
+<script type="module">
+    import { initStreamlines } from './thirdparty/streamline.es6.js';
+    
+    document.addEventListener('DOMContentLoaded', function() {
+        // Initialize all streamline charts
+        initStreamlines();
+    });
+</script>
+
+ +

HTML Structure

+
+
<!-- Basic line chart -->
+<span class="streamline" data-type="line" data-line-color="var(--success-500)" 
+    data-fill-color="var(--success-200)" data-height="40" data-width="110" data-line-width="2">
+    5,3,9,6,5,9,7,3,5,2
+</span>
+
+<!-- Bar chart with negative values -->
+<span class="streamline" data-type="bar" data-bar-color="var(--success-500)" 
+    data-neg-bar-color="var(--danger-500)" data-height="40" data-width="110" 
+    data-bar-width="4" data-bar-spacing="1">
+    4,-3,-6,-4,-5,-4,7,-3,-5,2
+</span>
+
+<!-- Pie chart -->
+<span class="streamline" data-type="pie" data-width="80" data-height="80" 
+    data-slice-colors="var(--info-500),var(--warning-500),var(--success-200)">
+    7,6,3
+</span>
+
+ +
+ Important: +
    +
  • Streamline.js uses data attributes prefixed with data- to configure chart options directly in HTML.
  • +
  • Values can be provided either inside the element or using a data-values attribute.
  • +
  • CSS variable support allows for easy theming that matches your site's color scheme.
  • +
+
+
+ +
+

Configuration Options

+

Streamline.js provides extensive configuration options to customize your charts. All options are optional and will fall back to sensible defaults.

+ +
+
// Programmatic configuration
+streamline(element, {
+    type: 'line',
+    width: 200,
+    height: 40,
+    lineColor: 'var(--primary-500)',
+    fillColor: 'var(--primary-200)',
+    lineWidth: 2,
+    responsive: true,
+    disableTooltips: false,
+    tooltipPrefix: 'Value: ',
+    tooltipSuffix: ' units'
+});
+
+// HTML data attributes configuration
+<span class="streamline"
+    data-type="line"
+    data-width="200"
+    data-height="40"
+    data-line-color="var(--primary-500)"
+    data-fill-color="var(--primary-200)"
+    data-line-width="2"
+    data-responsive="true"
+    data-disable-tooltips="false"
+    data-tooltip-prefix="Value: "
+    data-tooltip-suffix=" units">
+    5,3,9,6,5,9,7,3,5,2
+</span>
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDefault ValueDescriptionApplicable Types
type'line'Chart type: line, bar, tristate, discrete, pieAll
width'auto'Width of the chart in pixels. 'auto' uses container width.All
height'auto'Height of the chart in pixels. 'auto' uses container height.All
responsivetrueEnables/disables responsive resizing when container changes.All
lineColor'var(--primary-500)'Color of the line in line charts.line, discrete
fillColor'var(--primary-100)'Fill color below the line. Set to 'transparent' for no fill.line
lineWidth2Width of the line in pixels.line, discrete
barColor'var(--primary-500)'Color of the bars in bar charts.bar
negBarColor'var(--danger-500)'Color of negative value bars.bar
barWidth4Width of each bar in pixels.bar, tristate
barSpacing1Space between bars in pixels.bar, tristate
posBarColor'var(--success-500)'Color for positive (1) values in tristate charts.tristate
zeroBarColor'var(--bs-secondary)'Color for neutral (0) values in tristate charts.tristate
thresholdValue0Threshold value for discrete charts. Lines with values above this will use the main color.discrete
thresholdColor'var(--bs-secondary)'Color for lines below the threshold value.discrete
sliceColors[]Array of colors for pie chart slices. Can be a comma-separated string in HTML attributes.pie
disableTooltipsfalseDisables interactive tooltips on hover.All
tooltipPrefix''Text to display before the value in tooltips.All
tooltipSuffix''Text to display after the value in tooltips.All
tooltipOffsetX10Horizontal offset for tooltips in pixels.All
tooltipOffsetY-20Vertical offset for tooltips in pixels.All
+
+ +
+ Pro Tip: When using CSS variables for colors, Streamline.js automatically resolves them to their actual color values for proper rendering in SVG elements. +
+
+ +
+

Chart Types

+

Streamline.js supports various chart types to visualize different kinds of data:

+ +

Line Charts

+

Line charts display data points connected by straight line segments. They're perfect for showing trends over time.

+
+
<span class="streamline" data-type="line" data-line-color="var(--success-500)" 
+    data-fill-color="var(--success-200)" data-height="40" data-width="110" data-line-width="2">
+    5,3,9,6,5,9,7,3,5,2
+</span>
+
+ +

Area Charts

+

Area charts are line charts with the area below the line filled with a color, emphasizing volume or magnitude.

+
+
<span class="streamline" data-type="line" data-line-color="var(--info-500)" 
+    data-fill-color="var(--info-200)" data-height="40" data-width="110">
+    5,3,2,-1,-3,-2,2,3,5,2
+</span>
+
+ +

Bar Charts

+

Bar charts display data as vertical bars, great for comparing values across categories.

+
+
<span class="streamline" data-type="bar" data-bar-color="var(--primary-500)" 
+    data-height="40" data-width="110" data-bar-width="4" data-bar-spacing="1">
+    5,3,9,6,5,9,7,3,5,2
+</span>
+
+ +

Tristate Charts

+

Tristate charts represent data with three possible states: positive (1), neutral (0), and negative (-1).

+
+
<span class="streamline" data-type="tristate" data-height="40" data-width="110" 
+    data-bar-width="8" data-bar-spacing="2" data-pos-bar-color="var(--success-500)" 
+    data-neg-bar-color="var(--danger-500)" data-zero-bar-color="var(--secondary)">
+    1,1,0,1,-1,-1,1,-1,0,0,1,1
+</span>
+
+ +

Discrete Charts

+

Discrete charts display data as individual vertical lines, useful for showing distribution or frequency.

+
+
<span class="streamline" data-type="discrete" data-line-color="var(--primary-500)" 
+    data-threshold-color="var(--danger-500)" data-threshold-value="5" 
+    data-height="40" data-width="110" data-line-width="2">
+    5,9,7,6,5,3,2,5,8,9,7,5
+</span>
+
+ +

Pie Charts

+

Pie charts show data as proportional slices of a whole, ideal for displaying part-to-whole relationships.

+
+
<span class="streamline" data-type="pie" data-width="80" data-height="80" 
+    data-slice-colors="var(--info-500),var(--warning-500),var(--success-200)">
+    7,6,3
+</span>
+
+
+ +
+

API Methods

+

Streamline.js exposes several methods for programmatic control:

+ +
+
// Import the library
+import { streamline, initStreamlines } from './thirdparty/streamline.es6.js';
+
+// Initialize all streamline charts
+initStreamlines();
+
+// Create a chart on a specific element
+const element = document.getElementById('myChart');
+streamline(element, {
+    type: 'line',
+    lineColor: 'var(--primary-500)'
+});
+
+// Update an existing chart with new data
+element.textContent = '5,8,9,3,5,7,2,6';
+streamline(element, {
+    type: 'line',
+    lineColor: 'var(--success-500)'
+});
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescriptionParametersReturn Value
streamline(element, options)Creates or updates a chart on the specified elementelement: HTMLElement or CSS selector, options: ObjectHTMLElement
streamline(element, values, options)Creates a chart with specific valueselement: HTMLElement, values: Array, options: ObjectHTMLElement
initStreamlines()Initializes all elements with class "streamline" on the pageNonevoid
+
+
+ +
+

Dynamic Updates

+

Streamline.js makes it easy to create real-time updating charts to display live data:

+ +
+
// HTML
+<span id="updating-chart" class="streamline" data-type="line" data-line-color="var(--success-500)" 
+    data-fill-color="var(--success-200)" data-height="40" data-width="200" data-line-width="2">
+    5,3,9,6,5,9,7,3,5,2
+</span>
+
+// JavaScript
+document.addEventListener('DOMContentLoaded', function() {
+    // Initialize all streamline charts
+    initStreamlines();
+    
+    // Get the updating chart element
+    const updatingChart = document.getElementById('updating-chart');
+    if (updatingChart) {
+        let values = updatingChart.textContent.split(',').map(Number);
+        
+        setInterval(function() {
+            // Generate a new random value between 1 and 10
+            const newValue = Math.floor(Math.random() * 10) + 1;
+            
+            // Add the new value and remove the oldest one
+            values.push(newValue);
+            values.shift();
+            
+            // Update the chart with new data
+            updatingChart.textContent = values.join(',');
+            
+            // Re-initialize the chart
+            initStreamlines();
+        }, 500);
+    }
+});
+
+ +
+ Pro Tip: For performance-critical applications with many charts, consider using requestAnimationFrame for smoother updates and debounce the resize listener to prevent layout thrashing. +
+
+ +
+

Advanced Examples

+ +

Creating Gauges with Pie Charts

+

Pie charts can be used as simple gauge visualizations:

+
+
<!-- 25% Completion Gauge -->
+<span class="streamline" data-type="pie" data-width="80" data-height="80" 
+    data-slice-colors="var(--primary-500),var(--bs-border-color)">1/4</span>
+
+<!-- 50% Completion Gauge -->
+<span class="streamline" data-type="pie" data-width="80" data-height="80" 
+    data-slice-colors="var(--success-500),var(--bs-border-color)">1/2</span>
+
+<!-- 75% Completion Gauge -->
+<span class="streamline" data-type="pie" data-width="80" data-height="80" 
+    data-slice-colors="var(--info-500),var(--bs-border-color)">3/4</span>
+
+ +

Combining Charts with Text

+

Streamline charts are perfect for embedding directly within text:

+
+
<p>
+    Revenue has been trending upward 
+    <span class="streamline" data-type="line" data-height="20" data-width="60" 
+        data-line-color="var(--success-500)">1,3,5,6,8,7,9</span> 
+    over the last quarter, while costs have remained relatively stable 
+    <span class="streamline" data-type="line" data-height="20" data-width="60" 
+        data-line-color="var(--info-500)">4,4,3,5,4,3,5</span>.
+</p>
+
+ +

Custom Tooltips

+

Enhance user experience with descriptive tooltips:

+
+
<span class="streamline" data-type="line" data-line-color="var(--primary-500)" 
+    data-tooltip-prefix="Temperature: " data-tooltip-suffix="°C" 
+    data-height="40" data-width="150">
+    18,22,26,30,28,24,20
+</span>
+
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Chart not displaying? Ensure your container has sufficient width and height, or specify them explicitly.
  • +
  • Colors not showing? If using CSS variables, make sure they're correctly defined in your CSS.
  • +
  • Pie chart slices all black? Ensure your slice-colors is set properly - use comma-separated format without spaces: data-slice-colors="color1,color2,color3".
  • +
  • Chart not updating? Verify that you're reinitializing the chart after changing the data.
  • +
+
+ +

Pie Chart Color Issues

+

If you're having issues with pie chart slice colors, ensure the format is correct:

+ +
+
// Incorrect - using array notation in HTML attribute
+<span class="streamline" data-type="pie" data-slice-colors='["var(--primary-500)", "var(--success-500)"]'>
+    30,70
+</span>
+
+// Correct - using comma-separated format without spaces
+<span class="streamline" data-type="pie" data-slice-colors="var(--primary-500),var(--success-500)">
+    30,70
+</span>
+
+// Correct - when using JavaScript
+streamline(element, {
+    type: 'pie',
+    sliceColors: ['var(--primary-500)', 'var(--success-500)']
+});
+
+ +

Debugging Tips

+
    +
  • Check your browser console for any JavaScript errors
  • +
  • Inspect the generated SVG elements to see if they're being created correctly
  • +
  • Try with explicit width and height values to rule out sizing issues
  • +
  • Verify that your data values are correctly parsed by using console.log
  • +
+
+
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/docs-wavesjs.html b/legacy/smartadmin/docs-wavesjs.html new file mode 100644 index 0000000..f9d3241 --- /dev/null +++ b/legacy/smartadmin/docs-wavesjs.html @@ -0,0 +1,2241 @@ + + + + + + + + Waves.js | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Waves.js

+ + + + + + +
+ + +
+ +
+
+ +
+

Click. Splash. Repeat.

+

Waves.js is a lightweight JavaScript library that adds a Material Design-inspired ripple effect to UI elements. It creates a subtle, tactile feedback animation when users interact with buttons, cards, and other clickable elements, enhancing the overall user experience with visual confirmation of touch interactions.

+ +
+ Pro Tip: Waves.js works with both mouse and touch events, making it perfect for creating consistent interaction feedback across desktop and mobile interfaces. +
+
+ +
+

Installation

+

Include the Waves.js script and CSS in your HTML file:

+ +
+
<!-- Include Waves CSS -->
+<link rel="stylesheet" href="plugins/waves/waves.min.css">
+
+<!-- Include Waves JS -->
+<script src="plugins/waves/waves.min.js"></script>
+
+ +

Basic initialization

+
+
// Initialize Waves with default options
+document.addEventListener('DOMContentLoaded', function() {
+    Waves.init();
+});
+
+// Or with custom options
+Waves.init({
+    duration: 500,
+    delay: 200
+});
+
+ +

HTML Structure

+
+
<!-- Basic button with waves effect -->
+<button class="waves-effect">Click me</button>
+
+<!-- Button with waves effect and color -->
+<button class="waves-effect waves-light">Light Effect</button>
+
+<!-- Other elements with waves effect -->
+<div class="card waves-effect">Card with ripple</div>
+<a href="#" class="waves-effect waves-teal">Teal Ripple Link</a>
+
+ +
+ Important: The waves-effect class is required for any element you want to apply the ripple effect to. Additional classes like waves-light or waves-teal modify the appearance of the effect. +
+
+ +
+

Configuration Options

+

Waves.js offers several configuration options to customize the ripple effect:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
OptionDefault ValueDescriptionType
duration750Duration of the ripple animation in milliseconds.number
delay200Delay before showing the ripple effect on touch devices, in milliseconds.number
+
+
+ +
+

CSS Classes

+

Waves.js uses several CSS classes to control the appearance of the ripple effect:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ClassDescription
waves-effectBase class required for any element to have the ripple effect.
waves-lightCreates a light-colored ripple (white), ideal for dark backgrounds.
waves-red, waves-yellow, waves-orange, waves-purple, waves-green, waves-tealColored ripple effects matching the specified color.
waves-circleCreates a circular ripple effect, ideal for round buttons.
waves-floatAdds a subtle floating animation when hovering over the element.
waves-blockMakes the ripple effect fill the entire element (useful for block elements).
+
+ +
+ Pro Tip: You can combine multiple classes for different effects. For example, waves-effect waves-light waves-circle creates a light circular ripple effect. +
+
+ +
+

API Methods

+

Waves.js exposes several methods for programmatic control:

+ +
+
// Initialize Waves with options
+Waves.init({
+    duration: 500,
+    delay: 200
+});
+
+// Attach Waves effect to elements
+Waves.attach('.my-button');
+Waves.attach('.my-card', ['waves-light', 'waves-block']);
+
+// Programmatically create a ripple
+Waves.ripple(document.querySelector('.my-button'), {
+    wait: 1000,                // Wait 1000ms before hiding the ripple
+    position: {x: 20, y: 20}   // Position of the ripple (default is center)
+});
+
+// Remove all ripples from elements
+Waves.calm('.my-button');
+
+ +

Method Details

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodParametersDescription
Waves.init(options)options: Object with configuration optionsInitializes Waves.js with the specified options.
Waves.attach(elements, classes) + elements: DOM element, selector, or array of elements
+ classes: String or array of additional classes +
Attaches the Waves effect to the specified elements with optional additional classes.
Waves.ripple(elements, options) + elements: DOM element, selector, or array of elements
+ options: Object with ripple options (wait, position) +
Programmatically triggers a ripple effect on the specified elements.
Waves.calm(elements)elements: DOM element, selector, or array of elementsRemoves all ripples from the specified elements.
Waves.displayEffect(options)options: Object with configuration optionsDeprecated. Use Waves.init() instead.
+
+
+ +
+

Special Elements Handling

+

Waves.js includes special handling for certain HTML elements:

+ +

Input Elements

+
+
<!-- Input with waves effect -->
+<input type="button" class="waves-effect" value="Input Button">
+
+ +

When applied to <input> elements, Waves.js automatically wraps the input in a container to properly display the ripple effect.

+ +

Image Elements

+
+
<!-- Image with waves effect -->
+<img src="image.jpg" class="waves-effect" alt="Image with ripple">
+
+ +

Similar to inputs, images are wrapped in a container to properly display the ripple effect.

+ +
+ Note: For SVG elements, Waves.js has special handling to ensure the ripple effect works correctly. +
+
+ +
+

Touch Device Handling

+

Waves.js includes sophisticated touch event handling to ensure a smooth experience on mobile devices:

+ +
+
// Touch handling in Waves.js
+var TouchHandler = {
+    touches: 0,
+    
+    allowEvent: function(e) {
+        var allow = true;
+        
+        if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) {
+            allow = false;
+        }
+        
+        return allow;
+    },
+    
+    registerEvent: function(e) {
+        var eType = e.type;
+        
+        if (eType === 'touchstart') {
+            TouchHandler.touches += 1; // push
+        } else if (/^(touchend|touchcancel)$/.test(eType)) {
+            setTimeout(function() {
+                if (TouchHandler.touches) {
+                    TouchHandler.touches -= 1; // pop after 500ms
+                }
+            }, 500);
+        }
+    }
+};
+
+ +

Key features of the touch handling include:

+
    +
  • Touch and mouse event coordination: Prevents duplicate events when both touch and mouse events are triggered
  • +
  • Delay for touch devices: Adds a configurable delay before showing the ripple on touch devices
  • +
  • Touch movement detection: Cancels the ripple effect if the user moves their finger (for scrolling)
  • +
  • Multi-touch support: Properly handles multiple simultaneous touches
  • +
+
+ +
+

Usage Examples

+ +

Basic Buttons

+
+
<!-- Default ripple effect -->
+<button class="btn waves-effect">Default</button>
+
+<!-- Light ripple effect (for dark backgrounds) -->
+<button class="btn btn-dark waves-effect waves-light">Light Effect</button>
+
+<!-- Colored ripple effects -->
+<button class="btn waves-effect waves-red">Red Effect</button>
+<button class="btn waves-effect waves-yellow">Yellow Effect</button>
+<button class="btn waves-effect waves-orange">Orange Effect</button>
+<button class="btn waves-effect waves-purple">Purple Effect</button>
+<button class="btn waves-effect waves-green">Green Effect</button>
+<button class="btn waves-effect waves-teal">Teal Effect</button>
+
+ +

Cards and Panels

+
+
<!-- Card with ripple effect -->
+<div class="card waves-effect">
+    <div class="card-body">
+        This entire card has a ripple effect
+    </div>
+</div>
+
+<!-- Panel with block ripple effect -->
+<div class="panel waves-effect waves-block">
+    <div class="panel-heading">Panel Title</div>
+    <div class="panel-body">
+        This panel has a block ripple effect
+    </div>
+</div>
+
+ +

Circular Buttons

+
+
<!-- Circular button with ripple effect -->
+<button class="btn btn-circle waves-effect waves-circle">
+    <i class="fa fa-plus"></i>
+</button>
+
+<!-- Circular button with light ripple effect -->
+<button class="btn btn-dark btn-circle waves-effect waves-circle waves-light">
+    <i class="fa fa-check"></i>
+</button>
+
+ +

Dynamic Attachment

+
+
// Dynamically add waves effect to elements created after page load
+document.addEventListener('DOMContentLoaded', function() {
+    // Initialize Waves
+    Waves.init();
+    
+    // Create a new button
+    var button = document.createElement('button');
+    button.textContent = 'Dynamic Button';
+    document.body.appendChild(button);
+    
+    // Attach waves effect to the new button
+    Waves.attach(button, ['waves-light']);
+    
+    // Attach to multiple elements with additional classes
+    Waves.attach('.dynamic-elements', ['waves-green', 'waves-float']);
+});
+
+
+ +
+

Best Practices

+
    +
  • Apply the ripple effect only to interactive elements that users can click or tap
  • +
  • Use appropriate colors for the ripple effect that complement your UI design
  • +
  • For dark-colored elements, use the waves-light class for better visibility
  • +
  • For circular buttons, use the waves-circle class for a more natural-looking effect
  • +
  • Initialize Waves.js after the DOM is fully loaded to ensure all elements are properly processed
  • +
  • For dynamically created elements, use Waves.attach() to add the ripple effect
  • +
  • Consider using waves-float for elements that should have additional hover feedback
  • +
+ +
+ Pro Tip: For the best user experience, keep the ripple effect subtle and quick. A duration of 500-750ms is usually ideal for most interfaces. +
+
+ +
+

Browser Support

+

Waves.js supports all modern browsers including:

+
    +
  • Chrome
  • +
  • Firefox
  • +
  • Safari
  • +
  • Edge
  • +
  • Opera
  • +
  • Mobile browsers (iOS Safari, Android Chrome)
  • +
+ +

For older browsers like IE11, Waves.js includes fallbacks to ensure basic functionality.

+ +
+ Note: For optimal performance on mobile devices, consider adjusting the duration and delay options to match the responsiveness of your target devices. +
+
+ +
+

Troubleshooting

+
+ Common Issues: +
    +
  • Ripple effect not showing? Ensure the element has the waves-effect class and is properly initialized.
  • +
  • Ripple effect not visible on dark elements? Add the waves-light class for better contrast.
  • +
  • Effect not working on dynamically created elements? Use Waves.attach() after creating the elements.
  • +
  • Ripple effect looks distorted? For non-rectangular elements, try adding the waves-circle class.
  • +
  • Performance issues on mobile? Reduce the duration value when initializing Waves.js.
  • +
+
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/easy-pie-chart.html b/legacy/smartadmin/easy-pie-chart.html new file mode 100644 index 0000000..bf3bf68 --- /dev/null +++ b/legacy/smartadmin/easy-pie-chart.html @@ -0,0 +1,2107 @@ + + + + + + + + Easy Pie Chart | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Easy Pie Chart

+ + + + + + +
Lightweight plugin to render simple, animated and retina optimized pie charts.
+ + +
+
+
+
+
+

+ Color Change +

+
+ + + +
+
+
+
+
+ Colors are inherited from the parent font color, so you could literally change the any of the font colors available within this WebApp .js-easy-pie-chart.color-danger-500 +
+
+
+
+
+
+ +
+
+
+
+
+

+ Scale & Color +

+
+ + + +
+
+
+
+
+ Change the size of the chart using data-piesize and the line width by using data-linewidth +
+
+
+
+
+
+
+
+
+
+
+
+

+ Data Percentage +

+
+ + + +
+
+
+
+
+ Data percentage is displayed by using various class utilities and a container with the class .js-percent +
+
+
+
+ +
+ Memory +
+
+
+
+
+ +
+ CPU +
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Avatar Usage +

+
+ + + +
+
+
+
+
+ Here we nested the image using various class utilities to center it within the graph. The graph is also using data-scalelength to change the scales to various sizes +
+
+
+
+ Dr. Codex Lantern +
+
+
+
+ Dr. Codex Lantern +
+
+ +
+
+ Dr. Codex Lantern +
+
+
+
+
+
+
+
+

+ Nested Charts +

+
+ + + +
+
+
+
+
+ Just as the example above, we can create nested charts by using the position-absolute utility +
+
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+
+
+

+ Dynamic Usage +

+
+ + + +
+
+
+
+
+
+
+ +
+ Random +
+
+
+ + +
+ +
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/emaildesign.html b/legacy/smartadmin/emaildesign.html new file mode 100644 index 0000000..e053377 --- /dev/null +++ b/legacy/smartadmin/emaildesign.html @@ -0,0 +1,1878 @@ + + + + + + + + Email Design | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Email Design

+ + + + + + +
Variety of email designs for different scenarios.
+ + +
+
+

+ You can find your email templates inside the source directory SmartAdmin/src/e-templates +

+
+ +
+
+ +
+
+ Order Confirmation +
+
+ Login Page +
+
+ +
+
+ New Device Detected +
+
+ New Device Detected +
+
+ +
+
+ Verify Email +
+
+ Verify Email +
+
+ +
+ +
+ +
+
+ Password Change Request +
+
+ Password Change Request +
+
+ +
+
+ One Time Code +
+
+ Password Reset +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/error-404-2.html b/legacy/smartadmin/error-404-2.html new file mode 100644 index 0000000..30c722e --- /dev/null +++ b/legacy/smartadmin/error-404-2.html @@ -0,0 +1,95 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/error-404.html b/legacy/smartadmin/error-404.html new file mode 100644 index 0000000..afbeb04 --- /dev/null +++ b/legacy/smartadmin/error-404.html @@ -0,0 +1,1840 @@ + + + + + + + + Error Pages | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

+ ERROR 404 + + + Our AI servers are overloaded! + +

+

+ We are sorry, but the page you are looking for does not exist. +

+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/error-500.html b/legacy/smartadmin/error-500.html new file mode 100644 index 0000000..8480571 --- /dev/null +++ b/legacy/smartadmin/error-500.html @@ -0,0 +1,86 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forms-checkbox-radio.html b/legacy/smartadmin/forms-checkbox-radio.html new file mode 100644 index 0000000..637f8bf --- /dev/null +++ b/legacy/smartadmin/forms-checkbox-radio.html @@ -0,0 +1,2074 @@ + + + + + + + + Checkbox & Radio | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Checkbox & Radio

+ + + + + + +
Checkboxes and radio buttons form elements with support for custom designs using classes like .form-check and .form-check-input.
+ + +
+ +
+
+
+
+

+ Checkbox inputs +

+
+ + + +
+
+
+
+
+ Add .form-check wrapper to your input and label to create a custom checkbox component. You can add .rounded-circle to the input to make it circular. +
+ + +
Block alignment
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
Inline alignment
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+

+ Radio inputs +

+
+ + + +
+
+
+
+
+ Add .form-check wrapper to your input and label to + create a custom radio component. You can add .rounded to change it to a rounded radio +
+ +
Block alignment
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
Inline alignment
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+

+ Switch radio and checkbox +

+
+ + + +
+
+
+
+
+ A switch has the markup of a custom checkbox but uses .form-switch to render a toggle switch. Switches also support the disabled attribute +
+
+
+
+ Switch checkbox +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
Switch Radio
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forms-groups.html b/legacy/smartadmin/forms-groups.html new file mode 100644 index 0000000..3d700f0 --- /dev/null +++ b/legacy/smartadmin/forms-groups.html @@ -0,0 +1,2739 @@ + + + + + + + + Groups | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Groups

+ + + + + + +
Input groups allow you to combine input fields with additional elements like text, icons, or buttons for enhanced functionality and design.
+ + +
+ +
+
+
+
+

+ Basic example +

+
+ + + +
+
+
+
+
+

Place one add-on or button on either side of an input. You may also place one on both sides of an input. Remember to place <label>s outside the input group.

+
+ +
+ +
+ @ + +
+
Some help content goes here
+
+ +
+ +
+ + @example.com +
+
+ +
+ +
+ https://example.com/users/ + +
+
+ +
+ +
+ $ + + .00 +
+
+ +
+ +
+ Comment + +
+
+ +
+
+
+
+
+

+ Wrapping inputs +

+
+ + + +
+
+
+
+
+ Input groups wrap by default via flex-wrap: wrap in order to accommodate custom form field validation within an input group. You may disable this with .flex-nowrap +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+

+ Various sizing +

+
+ + + +
+
+
+
+
+ Add the relative form sizing classes to the .input-group itself and contents within will automatically resize—no need for repeating the form control size classes on each element. Sizing on the individual input group elements isn't supported +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ Some help content goes here +
+
+ +
+ + 0.00% + + + + + +
+
+
+ +
+ + + + +
+
+
+ +
+ + + + +
+
+
+
+
+
+
+

+ Checkboxes and radios +

+
+ + + +
+
+
+
+
+ Place any checkbox or radio option within an input group's addon instead of text +
+
+ +
+ + + + +
+
+
+ +
+ +
+ + +
+
+ + $ + + +
+
+
+ +
+ + + + + +
+ + +
+
+
+
+
+ +
+ + +
+ + +
+
+ +
+ + +
+
+
+
+ +
+ +
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+ +
+
+
+ + +
+
+
+ $ +
+ +
+
+ + +
+
+
+
+
+
+
+
+
+

+ Multiple inputs +

+
+ + + +
+
+
+
+
+ Add the relative form sizing classes to the .input-group itself and contents within will automatically resize—no need for repeating the form control size classes on each element. You can add .input-group-multi-transition to .input-group to animate focused inputs +
+
+ +
+ + + + + +
+
+
+ +
+ @ + + + + 0.00 +
+
+
+ +
+ + + + + +
+
+
+
+
+
+
+

+ Segmented buttons +

+
+ + + +
+
+
+
+
+ Dropdown with action buttons +
+
+ +
+ + + + +
+
+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+

+ Seamless icon +

+
+ + + +
+
+
+
+
+ Add seamless icons using various utility classes +
+
+ +
+ + + + +
+ Some help content goes here +
+
+ +
+ + + + +
+
+
+ +
+ +
+
+ +
+
+ + + +
+
+
+ +
+
+
+ +
+ + + + + +
+
+
+
+
+
+
+

+ Button addon +

+
+ + + +
+
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + + + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+

+ Buttons with dropdown +

+
+ + + +
+
+
+
+
+ Dropdowns are easily integrated just like buttons, you can have more than one dropdowns +
+
+ + + Some help content goes here +
+
+ + + Some help content goes here +
+
+ + + Some help content goes here +
+
+
+
+
+
+

+ Custom forms +

+
+ + + +
+
+
+
+
+ Input groups include support for custom selects and custom file inputs. Browser default versions of these are not supported +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+

+ File upload +

+
+ + + +
+
+
+
+
+ Combine file upload with addon elements +
+
+ +
+ Upload + +
+
Some help content goes here
+
+
+ +
+ + Upload +
+
+
+ +
+ + +
+
Some help content goes here
+
+
+ +
+ + +
+
+
+
+
+
+
+

+ Kitchen sink +

+
+ + + +
+
+
+
+
+ A combination of elements working in harmony +
+
+ +
+ + + + + + + + + + + +
+
Some help content goes here
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forms-inputs.html b/legacy/smartadmin/forms-inputs.html new file mode 100644 index 0000000..81319b0 --- /dev/null +++ b/legacy/smartadmin/forms-inputs.html @@ -0,0 +1,2356 @@ + + + + + + + + Inputs | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Inputs

+ + + + + + +
Form inputs styled and customizable input elements using classes like .form-control, .form-check, and .form-select for consistent design and functionality.
+ + +
+ +
+
+
+
+

+ General inputs +

+
+ + + +
+
+
+
+
+

Be sure to use an appropriate type attribute on all inputs (e.g., code email for email address or number for numerical information) to take advantage of newer input controls like email verification, number selection, and more.

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ A block of help text that breaks onto a new line and may extend beyond one line. +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+

+ General inputs (disabled) +

+
+ + + +
+
+
+
+
+

+ Add disabled to an <input>, <select>, or <button> to block interactions, with Bootstrap styling them + accordingly. Controls inside a <fieldset disabled> are also disabled. For <a> elements, Bootstrap + uses pointer-events: none; and reduced opacity instead. +

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ A block of help text that breaks onto a new line and may extend beyond one line. +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+

+ Floating Labels +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+
+
+

+ Floating Labels (Disabled) +

+
+ + + +
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+
+
+

+ Input Sizes +

+
+ + + +
+
+
+
+
+ Set heights using classes like .form-control-lg, .form-control-sm and for custom inputs, you can use .form-select-sm, .form-select-lg, and set widths using grid column classes like .col-lg-* +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+

+ Altering with utilities +

+
+ + + +
+
+
+
+
+ You can easily alter the border, border-radius and padding using the utility classes. +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forms-validation.html b/legacy/smartadmin/forms-validation.html new file mode 100644 index 0000000..83f003c --- /dev/null +++ b/legacy/smartadmin/forms-validation.html @@ -0,0 +1,2453 @@ + + + + + + + + Validation | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Validation

+ + + + + + +
Provide valuable, actionable feedback to your users with HTML5 form validation.
+ + +
+ +
+ Validation styles are available for the following form controls and components: <input> and <textarea> with .form-control, <select> with .form-select, and .form-check inputs. +
+
+
+
+
+

+ Invalid form styles +

+
+ + + +
+
+
+
+
+
+ + +
+ Please enter a message in the textarea. +
+
+
+ + +
+ Please enter a message in the textarea. +
+
+
+ +
+ + +
Example invalid feedback text
+
+
+ + +
+
+ + +
More example invalid feedback text
+
+
+
+ +
+ + +
+
+
+ + +
Example invalid custom select feedback
+
+
+ + +
Please select at least one option
+
+
+ + +
Please choose a file
+
+
+
+
+
+
+
+

+ Custom Styles +

+
+ + + +
+
+
+
+
+

For custom Bootstrap form validation messages, you'll need to add the novalidate boolean attribute to your <form>. This disables the browser default feedback tooltips, but still provides access to the form validation APIs in JavaScript. Try to submit the form below; our JavaScript will intercept the submit button and relay feedback to you. When attempting to submit, you'll see the :invalid and :valid styles applied to your form controls.

+

Custom feedback styles apply custom colors, borders, focus styles, and background icons to better communicate feedback. Background icons for <select>s are only available with .custom-select, and not .form-control.

+
+
+
+
+
+
+ + +
Looks good!
+
+
+ + +
Looks good!
+
+
+ +
+ @ + +
Please choose a username.
+
+
+
+
+
+ + +
Please provide a valid city.
+
+
+ + +
Please select a valid state.
+
+
+ + +
Please provide a valid zip.
+
+
+
+
+
+ + +
+ You must agree before submitting. +
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+

+ Server side +

+
+ + + +
+
+
+
+
+ We recommend using client-side validation, but in case you require server-side validation, you can indicate invalid and valid form fields with .is-invalid and .is-valid. Note that .invalid-feedback is also supported with these classes +
+
+
+
+ + +
+ Looks good! +
+
+
+ + +
+ Looks good! +
+
+
+ +
+ @ + +
+ Please choose a username. +
+
+
+
+
+
+ + +
+ Please provide a valid city. +
+
+
+ + +
+ Please provide a valid state. +
+
+
+ + +
+ Please provide a valid zip. +
+
+
+
+
+ + +
+ You must agree before submitting. +
+
+
+ +
+
+
+
+
+
+
+
+

+ Valid form styles +

+
+ + + +
+
+
+
+
+
+ + +
+ Please enter a message in the textarea. +
+
+
+ + +
+ Please enter a message in the textarea. +
+
+
+ +
+
+ + +
Example valid feedback text
+
+
+
+ + +
+
+ + +
More example valid feedback text
+
+
+
+ +
+ + +
+
+
+ + +
Example valid custom select feedback
+
+
+ + +
+
+ + +
Please choose a file
+
+
+
+
+
+
+
+

+ Tooltip Styles +

+
+ + + +
+
+
+
+
+

If your form layout allows it, you can swap the .{valid|invalid}-feedback classes for .{valid|invalid}-tooltip classes to display validation feedback in a styled tooltip. Be sure to have a parent with position: relative on it for tooltip positioning. In the example below, our column classes have this already, but your project may require an alternative setup.

+
+
+
+
+
+
+
+ + +
+ Looks good! +
+
+
+ + +
+ Looks good! +
+
+
+ +
+ @ + +
+ Please choose a username. +
+
+
+
+
+
+ + +
+ Please provide a valid city. +
+
+
+ + +
Please select a valid state.
+
+
+ + +
+ Please provide a valid zip. +
+
+
+ + +
+ Please enter a message in the textarea. +
+
+
+ +
+ + +
+
+ + +
+
+ + +
Please select at least one
+
+
+
+
+
+
+ + +
+ You must agree before submitting. +
+
+ + +
+
+ +
+
+
+
+
+

+ Browser defaults +

+
+ + + +
+
+
+
+
+

+ Not interested in custom validation or JavaScript? No problem—use browser defaults. + Try submitting the form below to see built-in feedback styles, which vary by browser and OS. + While CSS can't style them, you can customize the text with JavaScript. +

+
+
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+ @ + +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ +
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forum-discussion.html b/legacy/smartadmin/forum-discussion.html new file mode 100644 index 0000000..0574b2c --- /dev/null +++ b/legacy/smartadmin/forum-discussion.html @@ -0,0 +1,2248 @@ + + + + + + + + Forum: Discussion | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Forum: Discussion

+ + + + + + +
Discussion view with short and long reply action buttons, jump to dropdown, pagination, likes and star rating system.
+ + +
+
+
+ +
+ + +
+ +
+
+ Account information & Security / Package location +
+ +
+ +
+
+
+
+
+ +
+
+ Sunny A. Thread Owner +
+ + + + + + + + + + + + + + + + + (140 votes) + +
+
+
+
+ 55 +
+
+
+
+

+ Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus quis sem diam. Sed commodo metus in ultrices consequat. Vestibulum eu orci ante. Mauris vel tincidunt mauris. Cras finibus, purus eu pharetra molestie, orci felis lacinia orci, ac congue quam turpis a nibh +

+

+ Nam viverra diam magna, eget lobortis orci tincidunt sed. Donec et lobortis est. Morbi eget massa est. In iaculis odio lectus, sed efficitur nunc viverra non. Nullam molestie eros magna, eu posuere mauris posuere sit amet. Pellentesque hendrerit condimentum ipsum, euismod ornare lectus pharetra eget. Praesent semper est erat, commodo mollis arcu efficitur vitae. Maecenas gravida sit amet nisi vel interdum. +

+

+ Vestibulum molestie, ipsum vitae feugiat lacinia, nisi magna accumsan velit, ac semper nisi felis vitae augue. Vivamus mattis quis erat eu gravida. Integer venenatis risus vitae ullamcorper cursus. Proin sodales odio sed aliquet pulvinar. Duis ipsum erat, ultricies a dolor non, tempor dictum ante. Morbi vel metus lectus +

+
+ +
+ + + +
+
+
+
+ +
+
+ RE: Package location + Oliver Kopyov +
+ + + + + + + + + + + + + + + + + (90 votes) + +
+
+
+ +
+
+
+
+
+ Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus quis sem diam. Sed commodo metus in ultrices consequat. Vestibulum eu orci ante. Mauris vel tincidunt mauris. Cras finibus, purus eu pharetra molestie, orci felis lacinia orci, ac congue quam turpis a nibh... +
+

+ Proin vehicula nibh a nisl porta laoreet. Etiam quis massa quam. Etiam elementum nunc accumsan ullamcorper viverra. Sed aliquam ligula eu porta posuere. Nullam in dictum lacus. Nulla auctor hendrerit purus, sit amet lacinia tellus placerat nec. Nunc condimentum urna sit amet blandit egestas. Nam non placerat nisi. Sed sit amet massa porta, porttitor tellus porttitor, sagittis ex. Duis vitae dolor sit amet sem mattis molestie. Aliquam id pharetra leo. +

+
+ +
+ + + +
+
+
+
+ +
+
+
Replying to Oliver Kopyov
+ Dr. John Cook PhD +
+ + + + + + + + + + + + + + + + + (77 votes) + +
+
+
+ +
+
+
+
+

+ Proin vehicula nibh a nisl porta laoreet. Etiam quis massa quam. Etiam elementum nunc accumsan ullamcorper viverra. Sed aliquam ligula eu porta posuere. Nullam in dictum lacus. Nulla auctor hendrerit purus, sit amet lacinia tellus placerat nec. Nunc condimentum urna sit amet blandit egestas. Nam non placerat nisi. Sed sit amet massa porta, porttitor tellus porttitor, sagittis ex. Duis vitae dolor sit amet sem mattis molestie. Aliquam id pharetra leo. +

+

+ Vivamus at sapien eget lorem suscipit laoreet. Donec tincidunt augue auctor, ullamcorper urna ac, bibendum odio. Donec ac facilisis mauris. Quisque egestas quam libero, in vulputate purus accumsan vitae +

+
+ +
+ + + +
+
+
+
+ +
+
+ RE: Package location + Sarah McBrook +
+ + + + + + + + + + + + + + + + + (146 votes) + +
+
+
+ 3 +
+
+
+
+

+ Curabitur sollicitudin eros eget nibh commodo posuere. Aenean non diam at massa accumsan elementum eget in arcu. Cras vestibulum ornare nulla, vel porttitor turpis tristique at. In laoreet eleifend dolor, ac eleifend nunc porttitor et. Praesent volutpat risus in metus lacinia porttitor +

+
+ +
+ + + + + + +
+ +
+ + +
+
+
+
Post a Reply
+
+
+
+
+
+
+
+ + + +
+
+ + + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + + +
+
+
+ + + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forum-threads.html b/legacy/smartadmin/forum-threads.html new file mode 100644 index 0000000..6ffa5b3 --- /dev/null +++ b/legacy/smartadmin/forum-threads.html @@ -0,0 +1,2290 @@ + + + + + + + + Forum: Threads | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Forum: Threads

+ + + + + + +
Thread view with posts, replies, pagination, etc, with a functional "New Thread" button.
+ + +
+
+
+ +
+ + +
+ +
+
+
+
+ + + + + Account information & Security + +
+ +
+
+
+
+
+
Title
+
+
+
Replies
+
+
+
Last update
+
+
+
+
+
+ +
+
+
+
+
+ + Package location Sticky + +
+ Started by c_lantern on January 21, 2019 @12:30PM +
+
+
+ +
+
+
+
+
+ 72 Replies + 4314 Views +
+
+ +
+
+ + +
+
+
+
+
+ + Vestibulum molestie, ipsum vitae feugiat lacinia + +
+ Started by jamie on January 12, 2019 @4:23PM +
+
+
+
+
+
+ 15 Replies + 4314 Views +
+
+ +
+
+ + +
+
+
+
+
+ + Nam viverra diam magna, eget lobortis orci tincidunt sed Locked + +
+ Started by maggie on February 17, 2019 @8:01AM +
+
+
+
+
+
+ 764 Replies + 534 Views +
+
+ +
+
+ + +
+
+
+
+
+ Proin vehicula nibh a nisl porta laoreet Disabled + +
Started by larry85 on December 12, 2019 @12:30PM
+
+
+
+
+
+ 87 Replies + 674 Views +
+
+
+
+
+
+ Praesent mollis congue bibendum. Etiam ipsum augue, sodales id metus a, molestie hendrerit felis. +
Today, 05:25 lambert +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ 731Replies + 1246 Views +
+
+ +
+
+ + +
+
+
+
+
+ + Donec tincidunt augue auctor, ullamcorper urna ac + +
+ Started by zico03 on August 25, 2019 @7:45PM +
+
+
+
+
+
+ 3943Replies + 9843 Views +
+
+ +
+
+ + +
+
+ +
+
+ 38Replies + 55 Views +
+
+ +
+
+ + + + +
+
+
+ + +
+
+
+ + + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/forum.html b/legacy/smartadmin/forum.html new file mode 100644 index 0000000..5ed006a --- /dev/null +++ b/legacy/smartadmin/forum.html @@ -0,0 +1,2422 @@ + + + + + + + + Forum View | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Forum View

+ + + + + + +
Full forum view system, with threads and posts.
+ + +
+
+
+
+ + +
+
+
+
+
+ General +
+
+ Add + Edit +
+
+
+
+
+
+
Title
+
+
+
Status
+
+
+
Last posts
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+ Account information & Security Sticky + +
Fusce at velit viverra, luctus augue nec, dapibus urna
+
+
+
+
+
+
+ 243 Topics + 407 Posts +
+
+ +
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+ Global Stats +
Sed felis eros, facilisis eu cursus at, efficitur et felis
+
+
+
+
+
+
+ 64 Topics + 102 Posts +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+
+ Global Accouncements +
Curabitur scelerisque ipsum nec dui lacinia bibendum
+
+
+
+
+
+
+ 124 Topics + 314 Posts +
+
+ +
+
+ +
+
+
+
+
+
+
+ Policy +
+
+ Add + Edit +
+
+
+
+
+
+
Title
+
+
+
Status
+
+
+
Last posts
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ Clients & Staff +
Fusce at velit viverra, luctus augue nec, dapibus urna
+
+
+
+
+
+
+ 72 Topics + 89 Posts +
+
+ +
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+ Software & Hardware Equipments +
Nulla laoreet dignissim justo, id viverra nibh suscipit in.
+
+
+
+
+
+
+ 99 Topics + 72 Posts +
+
+ +
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+ Billing Department +
Curabitur scelerisque ipsum nec dui lacinia bibendum
+
+
+
+
+
+
+ 88 Topics + 109 Posts +
+
+ +
+
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+ Miscellaneous, Lost & Found +
Phasellus pharetra felis et leo malesuada
+
+
+
+
+
+
+ 50 Topics + 66 Posts +
+
+ +
+
+ +
+
+
+
+
+
+
+ Password Protected Threads +
+
+ Add + Edit +
+
+
+
+
+
+
Title
+
+
+
Status
+
+
+
Last posts
+
+
+
+
+
+ +
+
+
+
+
+
+ Design Interns (UI/UX, Visual, Interaction) Has Access + +
Proin pellentesque laoreet ligula pharetra semper
+
+
+
+
+
+
+ 1024 Topics + 5431 Posts +
+
+ +
+
+ + +
+
+
+
+
+
+ Frontend Developers (React, Vue, Angular) Has Access + +
Nulla laoreet dignissim justo, id viverra nibh suscipit in.
+
+
+
+
+
+
+ 1205 Topics + 4314 Posts +
+
+ +
+
+ + +
+
+
+
+
+
+ Backend Developers (Node.js, Python, Ruby) Password + +
Curabitur scelerisque ipsum nec dui lacinia bibendum
+
+
+
+
+
+
+ 764 Topics + 534 Posts +
+
+ +
+
+ + +
+
+
+
+
+
+ UX Researchers Password + +
Duis placerat in sapien et placerat
+
+
+
+
+
+
+ 87 Topics + 674 Posts +
+
+ +
+
+ + +
+
+
+
+
+
+ Product Designers Has Access + +
Duis placerat in sapien et placerat
+
+
+
+
+
+
+ 731Topics + 1246 Posts +
+
+ +
+
+ + +
+
+
+
+
+
+ DevOps & QA Engineers Has Access + +
Sit amet luctus nulla suscipit. Phasellus pharetra felis
+
+
+
+
+
+
+ 3943Topics + 9843 Posts +
+
+ +
+
+ +
+
+
+
+
+
+ + +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/fullcalendar.html b/legacy/smartadmin/fullcalendar.html new file mode 100644 index 0000000..4eda138 --- /dev/null +++ b/legacy/smartadmin/fullcalendar.html @@ -0,0 +1,2030 @@ + + + + + + + + FullCalendar | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Full Calendar

+ + + + + + +
Interactive event calendar with drag and drop
+ + +
+
+
+
+
+
+
+
+
+
+ +
+
+
Actions
+
+
+
+ + + + +
+
+
+ +
+
+
Draggable Events
+
+
+
+

Drag these events to the calendar

+
Team Standup
+
Coffee Break
+
Performance Review
+
Focus Time
+
Lunch
+
+ + +
+
+
+
+ +
+
+
Filter by Category
+ +
+
+
+ +
+
+
+ +
+
+ + +
+ + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons-fontawesome.html b/legacy/smartadmin/icons-fontawesome.html new file mode 100644 index 0000000..8b34923 --- /dev/null +++ b/legacy/smartadmin/icons-fontawesome.html @@ -0,0 +1,1882 @@ + + + + + + + + Fontawesome Icons | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+
+ +
+ + +

Fontawesome Icons

+ + + + + + +
Collection of over 7k+ icons, with a variety of styles, ranging from solid, regular, light and duotone.
+ + +
+
+
+ + +
+ + + + + + +
+ + +
+
+

+
+ + +
+ + +
    + + +
    +
    + No icons found. Try searching with different keywords +
    +
    +
    +
    + + +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + + +
    + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons-smartadmin.html b/legacy/smartadmin/icons-smartadmin.html new file mode 100644 index 0000000..d5e6389 --- /dev/null +++ b/legacy/smartadmin/icons-smartadmin.html @@ -0,0 +1,1879 @@ + + + + + + + + SmartAdmin Icons | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    +
    + +
    + + +

    SmartAdmin Icons

    + + + + + + +
    An extreamly lightweight icon set, to meet your basic needs.
    + + +
    +
    +
    + + +
    + + + + + +
    + + +
    +
    +

    +
    + + +
    + + +
      + + +
      +
      + No icons found. Try searching with different keywords +
      +
      +
      +
      + + +
      + +
      + +
      + +
      + +
      + +
      + +
      + +
      + + + +
      + + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons-stackgenerator.html b/legacy/smartadmin/icons-stackgenerator.html new file mode 100644 index 0000000..51f6360 --- /dev/null +++ b/legacy/smartadmin/icons-stackgenerator.html @@ -0,0 +1,1990 @@ + + + + + + + + Stack Generator | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + + + + + +
      +
      + +
      + + +

      Stack Generator

      + + + + + + +
      Create custom, unqiue, layered icons from various libraries for projects, offering flexibility and scalability. See Video Tutorial
      + + +
      + +
      +
      +
      + +
      + + +
      +
      +
      +
      +
      +
      + + + +
      +
      + +
      +
      +

      Controls

      +
      + +
      +
      +
      +
      + +
      +
      + + + +
      +
      + fal fa-car + + Layer 1 + +
      +
      + +
      +
      + +
      +
      + sa base-2 + + Layer 2 + +
      +
      +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
      + + + +
      +
      + + + +
      +
      +
      +

      To get started

      +

      Add Layer to your icon stack from Controls

      +
      +
      +
      + + + + +
      +
      + +
      + +
      + +
      + +
      + + + +
      + + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons-stacklibrary.html b/legacy/smartadmin/icons-stacklibrary.html new file mode 100644 index 0000000..ad1373d --- /dev/null +++ b/legacy/smartadmin/icons-stacklibrary.html @@ -0,0 +1,1833 @@ + + + + + + + + Stack Library | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + +
      + + + + + +
      +
      + +
      + + +

      Stack Library

      + + + + + + +
      Your saved stacked icons collection
      + + +
      +
      +
      +
      + +
      +
      + +
        +
        +
        +
        +
        +
        + +
        + +
        + +
        + +
        + + + +
        + + + +
        + +
        + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons-system.html b/legacy/smartadmin/icons-system.html new file mode 100644 index 0000000..0487710 --- /dev/null +++ b/legacy/smartadmin/icons-system.html @@ -0,0 +1,1898 @@ + + + + + + + + System Icons | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + + + +
        + + + + + +
        +
        + +
        + + +

        System Icons

        + + + + + + +
        Fully customizable system icons with a variety of weights, colors, and styles.
        + + +
        +
        +
        + + +
        + + + +
        + + +
        +
        + + +
        +
        +

        +
        + + +
        + + +
          + + +
          +
          + No icons found. Try searching with different keywords +
          +
          +
          +
          + + +
          + +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons/sprite.svg b/legacy/smartadmin/icons/sprite.svg new file mode 100644 index 0000000..2bbca9b --- /dev/null +++ b/legacy/smartadmin/icons/sprite.svg @@ -0,0 +1,867 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/icons_fontawesome_duotone.html b/legacy/smartadmin/icons_fontawesome_duotone.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/icons_fontawesome_duotone.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/img/app-logo.svg b/legacy/smartadmin/img/app-logo.svg new file mode 100644 index 0000000..749d7d0 --- /dev/null +++ b/legacy/smartadmin/img/app-logo.svg @@ -0,0 +1,19 @@ + + + + diff --git a/legacy/smartadmin/img/apple-touch-icon.png b/legacy/smartadmin/img/apple-touch-icon.png new file mode 100644 index 0000000..53088a4 Binary files /dev/null and b/legacy/smartadmin/img/apple-touch-icon.png differ diff --git a/legacy/smartadmin/img/backgrounds/bg-1.html b/legacy/smartadmin/img/backgrounds/bg-1.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/img/backgrounds/bg-1.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/img/backgrounds/bg-4.html b/legacy/smartadmin/img/backgrounds/bg-4.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/img/backgrounds/bg-4.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/img/cardcovers/cover-1-lg.png b/legacy/smartadmin/img/cardcovers/cover-1-lg.png new file mode 100644 index 0000000..a458d4a Binary files /dev/null and b/legacy/smartadmin/img/cardcovers/cover-1-lg.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-a.png b/legacy/smartadmin/img/demo/avatars/avatar-a.png new file mode 100644 index 0000000..1268fed Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-a.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-admin-xl.png b/legacy/smartadmin/img/demo/avatars/avatar-admin-xl.png new file mode 100644 index 0000000..9457cf4 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-admin-xl.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-admin.png b/legacy/smartadmin/img/demo/avatars/avatar-admin.png new file mode 100644 index 0000000..8af46e5 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-admin.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-b.png b/legacy/smartadmin/img/demo/avatars/avatar-b.png new file mode 100644 index 0000000..ee0a010 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-b.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-c.png b/legacy/smartadmin/img/demo/avatars/avatar-c.png new file mode 100644 index 0000000..b5f97a5 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-c.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-d.png b/legacy/smartadmin/img/demo/avatars/avatar-d.png new file mode 100644 index 0000000..2bfea57 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-d.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-e.png b/legacy/smartadmin/img/demo/avatars/avatar-e.png new file mode 100644 index 0000000..530c699 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-e.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-f.png b/legacy/smartadmin/img/demo/avatars/avatar-f.png new file mode 100644 index 0000000..64804af Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-f.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-g.png b/legacy/smartadmin/img/demo/avatars/avatar-g.png new file mode 100644 index 0000000..87612fa Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-g.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-h.png b/legacy/smartadmin/img/demo/avatars/avatar-h.png new file mode 100644 index 0000000..8385187 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-h.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-i.png b/legacy/smartadmin/img/demo/avatars/avatar-i.png new file mode 100644 index 0000000..c478315 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-i.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-j.png b/legacy/smartadmin/img/demo/avatars/avatar-j.png new file mode 100644 index 0000000..9a5b112 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-j.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-k.png b/legacy/smartadmin/img/demo/avatars/avatar-k.png new file mode 100644 index 0000000..475df3d Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-k.png differ diff --git a/legacy/smartadmin/img/demo/avatars/avatar-m.png b/legacy/smartadmin/img/demo/avatars/avatar-m.png new file mode 100644 index 0000000..85dda36 Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/avatar-m.png differ diff --git a/legacy/smartadmin/img/demo/avatars/ng.jpg b/legacy/smartadmin/img/demo/avatars/ng.jpg new file mode 100644 index 0000000..84872ea Binary files /dev/null and b/legacy/smartadmin/img/demo/avatars/ng.jpg differ diff --git a/legacy/smartadmin/img/demo/pages/email-order.html b/legacy/smartadmin/img/demo/pages/email-order.html new file mode 100644 index 0000000..2dcf71a Binary files /dev/null and b/legacy/smartadmin/img/demo/pages/email-order.html differ diff --git a/legacy/smartadmin/img/demo/pages/new-device.html b/legacy/smartadmin/img/demo/pages/new-device.html new file mode 100644 index 0000000..24b8694 Binary files /dev/null and b/legacy/smartadmin/img/demo/pages/new-device.html differ diff --git a/legacy/smartadmin/img/demo/pages/password-request.html b/legacy/smartadmin/img/demo/pages/password-request.html new file mode 100644 index 0000000..2830ce8 Binary files /dev/null and b/legacy/smartadmin/img/demo/pages/password-request.html differ diff --git a/legacy/smartadmin/img/demo/pages/password-reset.html b/legacy/smartadmin/img/demo/pages/password-reset.html new file mode 100644 index 0000000..fc0c010 Binary files /dev/null and b/legacy/smartadmin/img/demo/pages/password-reset.html differ diff --git a/legacy/smartadmin/img/demo/pages/side-panel-demo.gif b/legacy/smartadmin/img/demo/pages/side-panel-demo.gif new file mode 100644 index 0000000..833251a Binary files /dev/null and b/legacy/smartadmin/img/demo/pages/side-panel-demo.gif differ diff --git a/legacy/smartadmin/img/demo/pages/verify-email.html b/legacy/smartadmin/img/demo/pages/verify-email.html new file mode 100644 index 0000000..6b75d51 Binary files /dev/null and b/legacy/smartadmin/img/demo/pages/verify-email.html differ diff --git a/legacy/smartadmin/img/demo/peace-full.jpg b/legacy/smartadmin/img/demo/peace-full.jpg new file mode 100644 index 0000000..70bafd6 Binary files /dev/null and b/legacy/smartadmin/img/demo/peace-full.jpg differ diff --git a/legacy/smartadmin/img/demo/position-absolute.gif b/legacy/smartadmin/img/demo/position-absolute.gif new file mode 100644 index 0000000..b04cb33 Binary files /dev/null and b/legacy/smartadmin/img/demo/position-absolute.gif differ diff --git a/legacy/smartadmin/img/demo/position-fixed.gif b/legacy/smartadmin/img/demo/position-fixed.gif new file mode 100644 index 0000000..a468bb6 Binary files /dev/null and b/legacy/smartadmin/img/demo/position-fixed.gif differ diff --git a/legacy/smartadmin/img/demo/position-sticky.gif b/legacy/smartadmin/img/demo/position-sticky.gif new file mode 100644 index 0000000..1516afd Binary files /dev/null and b/legacy/smartadmin/img/demo/position-sticky.gif differ diff --git a/legacy/smartadmin/img/demo/relax-full.jpg b/legacy/smartadmin/img/demo/relax-full.jpg new file mode 100644 index 0000000..14a872a Binary files /dev/null and b/legacy/smartadmin/img/demo/relax-full.jpg differ diff --git a/legacy/smartadmin/img/demo/sea-full.jpg b/legacy/smartadmin/img/demo/sea-full.jpg new file mode 100644 index 0000000..ae0af9a Binary files /dev/null and b/legacy/smartadmin/img/demo/sea-full.jpg differ diff --git a/legacy/smartadmin/img/favicon-16x16.png b/legacy/smartadmin/img/favicon-16x16.png new file mode 100644 index 0000000..eb70658 Binary files /dev/null and b/legacy/smartadmin/img/favicon-16x16.png differ diff --git a/legacy/smartadmin/img/favicon-192x192.png b/legacy/smartadmin/img/favicon-192x192.png new file mode 100644 index 0000000..2fbf20c Binary files /dev/null and b/legacy/smartadmin/img/favicon-192x192.png differ diff --git a/legacy/smartadmin/img/favicon-32x32.png b/legacy/smartadmin/img/favicon-32x32.png new file mode 100644 index 0000000..a66d132 Binary files /dev/null and b/legacy/smartadmin/img/favicon-32x32.png differ diff --git a/legacy/smartadmin/img/landing/1.png b/legacy/smartadmin/img/landing/1.png new file mode 100644 index 0000000..2a40de4 Binary files /dev/null and b/legacy/smartadmin/img/landing/1.png differ diff --git a/legacy/smartadmin/img/landing/2.png b/legacy/smartadmin/img/landing/2.png new file mode 100644 index 0000000..3f35a67 Binary files /dev/null and b/legacy/smartadmin/img/landing/2.png differ diff --git a/legacy/smartadmin/img/landing/3.png b/legacy/smartadmin/img/landing/3.png new file mode 100644 index 0000000..d2a06b3 Binary files /dev/null and b/legacy/smartadmin/img/landing/3.png differ diff --git a/legacy/smartadmin/img/landing/4.png b/legacy/smartadmin/img/landing/4.png new file mode 100644 index 0000000..4ef1b54 Binary files /dev/null and b/legacy/smartadmin/img/landing/4.png differ diff --git a/legacy/smartadmin/img/landing/5.png b/legacy/smartadmin/img/landing/5.png new file mode 100644 index 0000000..e9c9241 Binary files /dev/null and b/legacy/smartadmin/img/landing/5.png differ diff --git a/legacy/smartadmin/img/logo-light.svg b/legacy/smartadmin/img/logo-light.svg new file mode 100644 index 0000000..7ceb4cc --- /dev/null +++ b/legacy/smartadmin/img/logo-light.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/img/logo.png b/legacy/smartadmin/img/logo.png new file mode 100644 index 0000000..9f978d0 Binary files /dev/null and b/legacy/smartadmin/img/logo.png differ diff --git a/legacy/smartadmin/img/logo.svg b/legacy/smartadmin/img/logo.svg new file mode 100644 index 0000000..2a1fa68 --- /dev/null +++ b/legacy/smartadmin/img/logo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/img/profile/project-1.png b/legacy/smartadmin/img/profile/project-1.png new file mode 100644 index 0000000..14298ed Binary files /dev/null and b/legacy/smartadmin/img/profile/project-1.png differ diff --git a/legacy/smartadmin/img/profile/project-3.png b/legacy/smartadmin/img/profile/project-3.png new file mode 100644 index 0000000..a0a727e Binary files /dev/null and b/legacy/smartadmin/img/profile/project-3.png differ diff --git a/legacy/smartadmin/img/profile/project-4.png b/legacy/smartadmin/img/profile/project-4.png new file mode 100644 index 0000000..ccfe6bd Binary files /dev/null and b/legacy/smartadmin/img/profile/project-4.png differ diff --git a/legacy/smartadmin/img/search/1.html b/legacy/smartadmin/img/search/1.html new file mode 100644 index 0000000..3dd7c96 Binary files /dev/null and b/legacy/smartadmin/img/search/1.html differ diff --git a/legacy/smartadmin/img/search/10.html b/legacy/smartadmin/img/search/10.html new file mode 100644 index 0000000..6349b5a Binary files /dev/null and b/legacy/smartadmin/img/search/10.html differ diff --git a/legacy/smartadmin/img/search/11.html b/legacy/smartadmin/img/search/11.html new file mode 100644 index 0000000..0adeeaf Binary files /dev/null and b/legacy/smartadmin/img/search/11.html differ diff --git a/legacy/smartadmin/img/search/12.html b/legacy/smartadmin/img/search/12.html new file mode 100644 index 0000000..ef75323 Binary files /dev/null and b/legacy/smartadmin/img/search/12.html differ diff --git a/legacy/smartadmin/img/search/13.html b/legacy/smartadmin/img/search/13.html new file mode 100644 index 0000000..d592b23 Binary files /dev/null and b/legacy/smartadmin/img/search/13.html differ diff --git a/legacy/smartadmin/img/search/14.html b/legacy/smartadmin/img/search/14.html new file mode 100644 index 0000000..c610204 Binary files /dev/null and b/legacy/smartadmin/img/search/14.html differ diff --git a/legacy/smartadmin/img/search/15.html b/legacy/smartadmin/img/search/15.html new file mode 100644 index 0000000..f5458a9 Binary files /dev/null and b/legacy/smartadmin/img/search/15.html differ diff --git a/legacy/smartadmin/img/search/16.html b/legacy/smartadmin/img/search/16.html new file mode 100644 index 0000000..50aee27 Binary files /dev/null and b/legacy/smartadmin/img/search/16.html differ diff --git a/legacy/smartadmin/img/search/17.html b/legacy/smartadmin/img/search/17.html new file mode 100644 index 0000000..4440e35 Binary files /dev/null and b/legacy/smartadmin/img/search/17.html differ diff --git a/legacy/smartadmin/img/search/18.html b/legacy/smartadmin/img/search/18.html new file mode 100644 index 0000000..9eee331 Binary files /dev/null and b/legacy/smartadmin/img/search/18.html differ diff --git a/legacy/smartadmin/img/search/2.html b/legacy/smartadmin/img/search/2.html new file mode 100644 index 0000000..2f64af2 Binary files /dev/null and b/legacy/smartadmin/img/search/2.html differ diff --git a/legacy/smartadmin/img/search/3.html b/legacy/smartadmin/img/search/3.html new file mode 100644 index 0000000..e16fdf3 Binary files /dev/null and b/legacy/smartadmin/img/search/3.html differ diff --git a/legacy/smartadmin/img/search/4.html b/legacy/smartadmin/img/search/4.html new file mode 100644 index 0000000..2a87b52 Binary files /dev/null and b/legacy/smartadmin/img/search/4.html differ diff --git a/legacy/smartadmin/img/search/5.html b/legacy/smartadmin/img/search/5.html new file mode 100644 index 0000000..6e9f7b0 Binary files /dev/null and b/legacy/smartadmin/img/search/5.html differ diff --git a/legacy/smartadmin/img/search/6.html b/legacy/smartadmin/img/search/6.html new file mode 100644 index 0000000..53a664c Binary files /dev/null and b/legacy/smartadmin/img/search/6.html differ diff --git a/legacy/smartadmin/img/search/7.html b/legacy/smartadmin/img/search/7.html new file mode 100644 index 0000000..e3cfdbf Binary files /dev/null and b/legacy/smartadmin/img/search/7.html differ diff --git a/legacy/smartadmin/img/search/8.html b/legacy/smartadmin/img/search/8.html new file mode 100644 index 0000000..6d84587 Binary files /dev/null and b/legacy/smartadmin/img/search/8.html differ diff --git a/legacy/smartadmin/img/search/9.html b/legacy/smartadmin/img/search/9.html new file mode 100644 index 0000000..a89b930 Binary files /dev/null and b/legacy/smartadmin/img/search/9.html differ diff --git a/legacy/smartadmin/img/sprite.svg b/legacy/smartadmin/img/sprite.svg new file mode 100644 index 0000000..d135096 --- /dev/null +++ b/legacy/smartadmin/img/sprite.svg @@ -0,0 +1,867 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/img/thumbs/pic-11.png b/legacy/smartadmin/img/thumbs/pic-11.png new file mode 100644 index 0000000..b01ad1d Binary files /dev/null and b/legacy/smartadmin/img/thumbs/pic-11.png differ diff --git a/legacy/smartadmin/img/thumbs/pic-12.png b/legacy/smartadmin/img/thumbs/pic-12.png new file mode 100644 index 0000000..1203a15 Binary files /dev/null and b/legacy/smartadmin/img/thumbs/pic-12.png differ diff --git a/legacy/smartadmin/img/thumbs/pic-4.png b/legacy/smartadmin/img/thumbs/pic-4.png new file mode 100644 index 0000000..c554511 Binary files /dev/null and b/legacy/smartadmin/img/thumbs/pic-4.png differ diff --git a/legacy/smartadmin/img/thumbs/pic-7.png b/legacy/smartadmin/img/thumbs/pic-7.png new file mode 100644 index 0000000..8d5e9b9 Binary files /dev/null and b/legacy/smartadmin/img/thumbs/pic-7.png differ diff --git a/legacy/smartadmin/img/thumbs/pic-8.png b/legacy/smartadmin/img/thumbs/pic-8.png new file mode 100644 index 0000000..f67f3e3 Binary files /dev/null and b/legacy/smartadmin/img/thumbs/pic-8.png differ diff --git a/legacy/smartadmin/index.html b/legacy/smartadmin/index.html new file mode 100644 index 0000000..0dc5dc4 --- /dev/null +++ b/legacy/smartadmin/index.html @@ -0,0 +1,1901 @@ + + + + + + + + Blank Page | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Blank Page

          + + + + + + + +

          + + Can be the starting page for your application... + + + +

          + +
          +
          + You can start building your application by using this page as a starting point. +
          +
          +
          +
          +
          +
          Card title
          +
          +
          +

          Some quick example text to build on the card title and make up the bulk of the card's content.

          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          NameEmailPhoneAddressCityStateZipCountryAction
          John Doejohn.doe@example.com123-456-7890123 Main StAnytownCA12345USAEdit
          Jane Smithjane.smith@example.com987-654-3210123 Main StAnytownCA12345USAEdit
          Bob Johnsonbob.johnson@example.com555-123-4567123 Main StAnytownCA12345USAEdit
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          + Right content goes here... +
          +
          +
          +
          +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/intel_subscription_dashboard.html b/legacy/smartadmin/intel_subscription_dashboard.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/intel_subscription_dashboard.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/json/MOCK_DATA.json b/legacy/smartadmin/json/MOCK_DATA.json new file mode 100644 index 0000000..34852d6 --- /dev/null +++ b/legacy/smartadmin/json/MOCK_DATA.json @@ -0,0 +1,542 @@ +[ + { + "TradeID": "K9P2M7", + "Symbol": "GFA", + "Qty": 1248, + "BuyPrice": "$998.23", + "SellPrice": "$253.74", + "BuyDate": "April 12, 2006", + "SellDate": "August 4, 2008", + "Profit": "-$744.49", + "Fee": "$98.65", + "Net": "-$843.14", + "Broker": "Plambee", + "Type": "Sell", + "Sector": "Basic Industries", + "Industry": "Homebuilding", + "MktCap": "$649,658,734.99", + "DivYield": "1.91%" + }, + { + "TradeID": "T5R8J9Q", + "Symbol": "IPG", + "Qty": 2081, + "BuyPrice": "$14.90", + "SellPrice": "$191.27", + "BuyDate": "February 1, 2006", + "SellDate": "March 30, 2019", + "Profit": "$176.37", + "Fee": "$50.45", + "Net": "$125.92", + "Broker": "Demimbu", + "Type": "Short Sell", + "Sector": "Technology", + "Industry": "Advertising", + "MktCap": "$190,432,116.44", + "DivYield": "2.40%" + }, + { + "TradeID": "B3N6X2", + "Symbol": "BUSE", + "Qty": 5059, + "BuyPrice": "$74.16", + "SellPrice": "$13.18", + "BuyDate": "March 19, 2005", + "SellDate": "April 20, 2005", + "Profit": "-$60.98", + "Fee": "$2.21", + "Net": "-$63.19", + "Broker": "Youspan", + "Type": "Short Sell", + "Sector": "Finance", + "Industry": "Major Banks", + "MktCap": "$136,277,727.94", + "DivYield": "7.61%" + }, + { + "TradeID": "H7Q1P4M", + "Symbol": "SPH", + "Qty": 4603, + "BuyPrice": "$598.03", + "SellPrice": "$226.70", + "BuyDate": "January 25, 2022", + "SellDate": "April 19, 2022", + "Profit": "-$371.33", + "Fee": "$63.37", + "Net": "-$434.70", + "Broker": "Dazzlesphere", + "Type": "Buy", + "Sector": "Consumer Services", + "Industry": "Other Specialty Stores", + "MktCap": "$676,858,913.93", + "DivYield": "9.02%" + }, + { + "TradeID": "Y2K5V9", + "Symbol": "NVIV", + "Qty": 652, + "BuyPrice": "$693.44", + "SellPrice": "$781.62", + "BuyDate": "August 9, 2008", + "SellDate": "April 26, 2022", + "Profit": "$88.18", + "Fee": "$55.19", + "Net": "$32.99", + "Broker": "Eire", + "Type": "Short Sell", + "Sector": "Health Care", + "Industry": "Medical/Dental Instruments", + "MktCap": "$944,992,962.89", + "DivYield": "2.06%" + }, + { + "TradeID": "W8M3R6T", + "Symbol": "KMX", + "Qty": 7586, + "BuyPrice": "$421.76", + "SellPrice": "$558.49", + "BuyDate": "November 3, 2016", + "SellDate": "January 12, 2005", + "Profit": "$136.73", + "Fee": "$91.14", + "Net": "$45.59", + "Broker": "Eidel", + "Type": "Sell", + "Sector": "Consumer Durables", + "Industry": "Automotive Aftermarket", + "MktCap": "$7,785,071.68", + "DivYield": "4.58%" + }, + { + "TradeID": "J4P9X1", + "Symbol": "ANET", + "Qty": 8614, + "BuyPrice": "$535.84", + "SellPrice": "$388.28", + "BuyDate": "May 12, 2007", + "SellDate": "January 11, 2014", + "Profit": "-$147.56", + "Fee": "$77.03", + "Net": "-$224.59", + "Broker": "Tagchat", + "Type": "Sell", + "Sector": "Technology", + "Industry": "Computer Communications Equipment", + "MktCap": "$947,469,144.30", + "DivYield": "8.33%" + }, + { + "TradeID": "Q6T2N8", + "Symbol": "SAGE", + "Qty": 8054, + "BuyPrice": "$8.37", + "SellPrice": "$938.03", + "BuyDate": "April 20, 2019", + "SellDate": "April 11, 2020", + "Profit": "$929.66", + "Fee": "$44.98", + "Net": "$884.68", + "Broker": "Pixoboo", + "Type": "Sell", + "Sector": "Health Care", + "Industry": "Major Pharmaceuticals", + "MktCap": "$709,307,253.42", + "DivYield": "8.56%" + }, + { + "TradeID": "Z3H7K5P", + "Symbol": "CLA.CL", + "Qty": 7413, + "BuyPrice": "$787.71", + "SellPrice": "$618.43", + "BuyDate": "April 29, 2012", + "SellDate": "June 3, 2017", + "Profit": "-$169.28", + "Fee": "$97.55", + "Net": "-$266.83", + "Broker": "Brightbean", + "Type": "Buy", + "Sector": null, + "Industry": null, + "MktCap": "$761,065,893.03", + "DivYield": "6.17%" + }, + { + "TradeID": "F9R4M2", + "Symbol": "BGC", + "Qty": 2669, + "BuyPrice": "$811.01", + "SellPrice": "$499.43", + "BuyDate": "September 3, 2009", + "SellDate": "April 10, 2019", + "Profit": "-$311.58", + "Fee": "$91.56", + "Net": "-$403.14", + "Broker": "Photobug", + "Type": "Short Sell", + "Sector": "Basic Industries", + "Industry": "Telecommunications Equipment", + "MktCap": "$348,996,212.37", + "DivYield": "4.85%" + }, + { + "TradeID": "V5N1T8Q", + "Symbol": "JPM^A", + "Qty": 6773, + "BuyPrice": "$713.52", + "SellPrice": "$224.17", + "BuyDate": "August 17, 2017", + "SellDate": "June 14, 2017", + "Profit": "-$489.35", + "Fee": "$21.00", + "Net": "-$510.35", + "Broker": "Miboo", + "Type": "Buy", + "Sector": "Finance", + "Industry": "Major Banks", + "MktCap": "$483,664,239.77", + "DivYield": "5.87%" + }, + { + "TradeID": "C7X3P9", + "Symbol": "ACV", + "Qty": 5159, + "BuyPrice": "$915.21", + "SellPrice": "$609.11", + "BuyDate": "March 21, 2011", + "SellDate": "June 12, 2004", + "Profit": "-$306.10", + "Fee": "$22.95", + "Net": "-$329.05", + "Broker": "Gabtune", + "Type": "Short Sell", + "Sector": null, + "Industry": null, + "MktCap": "$766,020,458.69", + "DivYield": "0.55%" + }, + { + "TradeID": "L2Q6K4M", + "Symbol": "UN", + "Qty": 8239, + "BuyPrice": "$660.81", + "SellPrice": "$892.21", + "BuyDate": "November 16, 2016", + "SellDate": "May 25, 2008", + "Profit": "$231.40", + "Fee": "$87.57", + "Net": "$143.83", + "Broker": "Jetpulse", + "Type": "Sell", + "Sector": "Basic Industries", + "Industry": "Package Goods/Cosmetics", + "MktCap": "$890,364,357.89", + "DivYield": "2.82%" + }, + { + "TradeID": "D8T5N1", + "Symbol": "CASY", + "Qty": 3651, + "BuyPrice": "$461.29", + "SellPrice": "$123.45", + "BuyDate": "July 2, 2008", + "SellDate": "March 18, 2015", + "Profit": "-$337.84", + "Fee": "$51.76", + "Net": "-$389.60", + "Broker": "Bubblebox", + "Type": "Sell", + "Sector": "Consumer Durables", + "Industry": "Automotive Aftermarket", + "MktCap": "$621,941,607.38", + "DivYield": "1.70%" + }, + { + "TradeID": "G3P9R7Q", + "Symbol": "HSII", + "Qty": 5373, + "BuyPrice": "$454.50", + "SellPrice": "$612.13", + "BuyDate": "July 9, 2011", + "SellDate": "April 22, 2011", + "Profit": "$157.63", + "Fee": "$56.98", + "Net": "$100.65", + "Broker": "Zooxo", + "Type": "Short Sell", + "Sector": "Technology", + "Industry": "Diversified Commercial Services", + "MktCap": "$316,290,950.71", + "DivYield": "3.13%" + }, + { + "TradeID": "M6K2X4", + "Symbol": "SRLP", + "Qty": 6922, + "BuyPrice": "$256.98", + "SellPrice": "$738.76", + "BuyDate": "August 15, 2009", + "SellDate": "September 23, 2004", + "Profit": "$481.78", + "Fee": "$33.43", + "Net": "$448.35", + "Broker": "Shuffletag", + "Type": "Sell", + "Sector": "Energy", + "Industry": "Oil Refining/Marketing", + "MktCap": "$563,069,843.35", + "DivYield": "0.29%" + }, + { + "TradeID": "N1T7P5R", + "Symbol": "MOD", + "Qty": 5410, + "BuyPrice": "$524.29", + "SellPrice": "$292.07", + "BuyDate": "March 27, 2000", + "SellDate": "June 5, 2017", + "Profit": "-$232.22", + "Fee": "$44.32", + "Net": "-$276.54", + "Broker": "Babbleopia", + "Type": "Sell", + "Sector": "Capital Goods", + "Industry": "Auto Parts:O.E.M.", + "MktCap": "$955,149,643.24", + "DivYield": "7.53%" + }, + { + "TradeID": "R4Q9X2", + "Symbol": "TDI", + "Qty": 8376, + "BuyPrice": "$496.50", + "SellPrice": "$484.70", + "BuyDate": "February 1, 2016", + "SellDate": "April 18, 2019", + "Profit": "-$11.80", + "Fee": "$35.36", + "Net": "-$47.16", + "Broker": "Buzzshare", + "Type": "Short Sell", + "Sector": "Public Utilities", + "Industry": "Telecommunications Equipment", + "MktCap": "$974,339,934.13", + "DivYield": "2.47%" + }, + { + "TradeID": "X7M3K9P", + "Symbol": "HYLS", + "Qty": 8753, + "BuyPrice": "$894.50", + "SellPrice": "$504.38", + "BuyDate": "May 17, 2021", + "SellDate": "April 17, 2007", + "Profit": "-$390.12", + "Fee": "$73.21", + "Net": "-$463.33", + "Broker": "Twitterwire", + "Type": "Buy", + "Sector": null, + "Industry": null, + "MktCap": "$68,768,636.36", + "DivYield": "5.71%" + }, + { + "TradeID": "P2N6T1", + "Symbol": "TDF", + "Qty": 1403, + "BuyPrice": "$374.29", + "SellPrice": "$579.70", + "BuyDate": "December 1, 2013", + "SellDate": "August 18, 2021", + "Profit": "$205.41", + "Fee": "$91.65", + "Net": "$113.76", + "Broker": "Kayveo", + "Type": "Sell", + "Sector": null, + "Industry": null, + "MktCap": "$440,997,336.30", + "DivYield": "2.90%" + }, + { + "TradeID": "S5R8Q3M", + "Symbol": "MGIC", + "Qty": 1720, + "BuyPrice": "$386.88", + "SellPrice": "$305.80", + "BuyDate": "October 22, 2011", + "SellDate": "September 10, 2007", + "Profit": "-$81.08", + "Fee": "$20.39", + "Net": "-$101.47", + "Broker": "Skiba", + "Type": "Short Sell", + "Sector": "Technology", + "Industry": "Computer Software: Prepackaged Software", + "MktCap": "$50,420,944.32", + "DivYield": "5.39%" + }, + { + "TradeID": "U9K2P7", + "Symbol": "CPAH", + "Qty": 1252, + "BuyPrice": "$864.52", + "SellPrice": "$650.09", + "BuyDate": "February 20, 2022", + "SellDate": "August 9, 2011", + "Profit": "-$214.43", + "Fee": "$77.84", + "Net": "-$292.27", + "Broker": "Gigaclub", + "Type": "Buy", + "Sector": "Technology", + "Industry": "Computer Software: Prepackaged Software", + "MktCap": "$76,645,155.67", + "DivYield": "2.84%" + }, + { + "TradeID": "A3T6N1Q", + "Symbol": "LXP", + "Qty": 9639, + "BuyPrice": "$235.59", + "SellPrice": "$463.86", + "BuyDate": "December 8, 2009", + "SellDate": "January 25, 2014", + "Profit": "$228.27", + "Fee": "$91.20", + "Net": "$137.07", + "Broker": "Browsebug", + "Type": "Short Sell", + "Sector": "Consumer Services", + "Industry": "Real Estate Investment Trusts", + "MktCap": "$247,409,013.63", + "DivYield": "3.29%" + }, + { + "TradeID": "E7M4X9", + "Symbol": "MER^P", + "Qty": 214, + "BuyPrice": "$978.95", + "SellPrice": "$32.13", + "BuyDate": "September 22, 2000", + "SellDate": "April 8, 2017", + "Profit": "-$946.82", + "Fee": "$15.94", + "Net": "-$962.76", + "Broker": "Bluezoom", + "Type": "Sell", + "Sector": null, + "Industry": null, + "MktCap": "$87,243,222.94", + "DivYield": "7.30%" + }, + { + "TradeID": "I2P5R8T", + "Symbol": "OTTR", + "Qty": 8360, + "BuyPrice": "$725.97", + "SellPrice": "$663.13", + "BuyDate": "November 3, 2009", + "SellDate": "July 27, 2000", + "Profit": "-$62.84", + "Fee": "$10.39", + "Net": "-$73.23", + "Broker": "Dynava", + "Type": "Buy", + "Sector": "Public Utilities", + "Industry": "Electric Utilities: Central", + "MktCap": "$771,629,200.44", + "DivYield": "1.37%" + }, + { + "TradeID": "O6N9K3", + "Symbol": "AXGN", + "Qty": 665, + "BuyPrice": "$267.72", + "SellPrice": "$597.99", + "BuyDate": "July 25, 2006", + "SellDate": "November 2, 2020", + "Profit": "$330.27", + "Fee": "$15.43", + "Net": "$314.84", + "Broker": "Trilith", + "Type": "Buy", + "Sector": "Health Care", + "Industry": "Biotechnology: Electromedical & Electrotherapeutic Apparatus", + "MktCap": "$87,111,599.66", + "DivYield": "9.75%" + }, + { + "TradeID": "B8T3P6Q", + "Symbol": "RSG", + "Qty": 7894, + "BuyPrice": "$385.27", + "SellPrice": "$406.36", + "BuyDate": "September 30, 2007", + "SellDate": "February 9, 2006", + "Profit": "$21.09", + "Fee": "$52.63", + "Net": "-$31.54", + "Broker": "Rhyzio", + "Type": "Short Sell", + "Sector": "Public Utilities", + "Industry": "Environmental Services", + "MktCap": "$731,279,708.28", + "DivYield": "2.98%" + }, + { + "TradeID": "F4M7X1", + "Symbol": "ANH", + "Qty": 6879, + "BuyPrice": "$344.79", + "SellPrice": "$186.40", + "BuyDate": "July 4, 2000", + "SellDate": "November 19, 2000", + "Profit": "-$158.39", + "Fee": "$41.92", + "Net": "-$200.31", + "Broker": "Layo", + "Type": "Sell", + "Sector": "Consumer Services", + "Industry": "Real Estate Investment Trusts", + "MktCap": "$816,489,491.23", + "DivYield": "0.51%" + }, + { + "TradeID": "H9R2N5P", + "Symbol": "AMBCW", + "Qty": 9462, + "BuyPrice": "$848.38", + "SellPrice": "$966.41", + "BuyDate": "August 12, 2002", + "SellDate": "August 15, 2000", + "Profit": "$118.03", + "Fee": "$84.22", + "Net": "$33.81", + "Broker": "Jabbercube", + "Type": "Sell", + "Sector": "Finance", + "Industry": "Property-Casualty Insurers", + "MktCap": "$641,757,108.47", + "DivYield": "9.77%" + }, + { + "TradeID": "J3K6T8", + "Symbol": "WFC^V", + "Qty": 8937, + "BuyPrice": "$295.02", + "SellPrice": "$728.68", + "BuyDate": "March 16, 2005", + "SellDate": "December 23, 2012", + "Profit": "$433.66", + "Fee": "$60.26", + "Net": "$373.40", + "Broker": "Podcat", + "Type": "Buy", + "Sector": null, + "Industry": null, + "MktCap": "$966,542,896.76", + "DivYield": "9.13%" + } + ] \ No newline at end of file diff --git a/legacy/smartadmin/landing.html b/legacy/smartadmin/landing.html new file mode 100644 index 0000000..46f552a --- /dev/null +++ b/legacy/smartadmin/landing.html @@ -0,0 +1,459 @@ + + + + + + + + SmartAdmin v5 - Modern Admin Dashboard | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          +
          +
          +

          + SmartAdmin v5 built with AI +

          +

          + +

          + +
          +
          +
          +
          +
          + + +
          +
          +
          +

          Powerful Features

          +

          Everything you need to manage your business efficiently

          +
          +
          +
          +
          +
          + Dashboard +
          +

          Smart Dashboard

          +

          Intuitive interface with real-time analytics and customizable widgets.

          +
          +
          +
          +
          +
          + Analytics +
          +

          Advanced Analytics

          +

          Comprehensive reporting tools with AI-powered insights.

          +
          +
          +
          +
          +
          + Automation +
          +

          Workflow Automation

          +

          Streamline processes with intelligent automation tools.

          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Transform Your Workflow

          +
          +
          + 95 +

          Faster development time

          +
          +
          + 80 +

          Better team collaboration

          +
          +
          + 90 +

          Increased productivity

          +
          +
          +
          +
          + img + +
          +
          +
          +
          Real-time Analytics
          +
          Performance Metrics
          +
          + Smart Insights +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +

          See It In Action

          +

          Experience the power of SmartAdmin firsthand

          +
          +
          +
          +
          +
          + Dashboard Preview +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          + Innovation +

          Our Journey and Future Vision

          +

          Explore the timeline of SmartAdmin WebApp's evolution. Witness our milestones and future aspirations.

          + +
          +
          +
          +
          +
          +
          +

          2021

          +

          Launch Phase

          +

          SmartAdmin WebApp was officially launched. It revolutionized the way users manage their tasks.

          +
          +
          + +
          +
          +
          +

          2022

          +

          Feature Expansion

          +

          New features were added based on user feedback. Enhanced functionality led to increased user satisfaction.

          +
          +
          + +
          +
          +
          +

          2023

          +

          Global Reach

          +

          SmartAdmin WebApp expanded its user base globally. We are committed to continuous improvement and innovation.

          +
          +
          + +
          +
          +
          +

          2024

          +

          Future Innovations

          +

          We are excited to unveil new features and enhancements. Join us as we shape the future of productivity.

          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +
          + ⭐⭐⭐⭐⭐ +
          +

          "SmartAdmin has transformed how we manage our business. The AI-powered insights have been game-changing for our decision-making process."

          +
          + John Smith + John Smith, CEO at TechCorp +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Stay Updated with SmartAdmin

          +

          Join our newsletter for exclusive updates, helpful tips, and the latest news from SmartAdmin.

          + +
          + +
          + Newsletter +
          +
          +
          +
          + + +
          +
          +
          +

          Frequently Asked Questions

          +

          Find answers to common questions about SmartAdmin

          +
          + +
          +
          +
          +
          +

          + +

          +
          +
          + SmartAdmin is a powerful web app designed to simplify your workflow and enhance productivity. It offers a wide range of features to streamline your administrative tasks and improve team collaboration. +
          +
          +
          + +
          +

          + +

          +
          +
          + Yes! SmartAdmin features an intuitive interface that's easy to navigate. We've designed it with user experience in mind, making it accessible for both beginners and advanced users. +
          +
          +
          + +
          +

          + +

          +
          +
          + Absolutely! SmartAdmin offers extensive customization options to match your brand and workflow preferences. You can modify layouts, themes, and functionality to suit your needs. +
          +
          +
          + +
          +

          + +

          +
          +
          + Yes, we offer a free trial period so you can explore all features before making a commitment. Sign up today to start your trial! +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +

          Ready to Get Started?

          +

          Join thousands of businesses already using SmartAdmin to transform their workflow.

          + +
          +
          +
          +
          + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/messenger.html b/legacy/smartadmin/messenger.html new file mode 100644 index 0000000..9ff9e73 --- /dev/null +++ b/legacy/smartadmin/messenger.html @@ -0,0 +1,2188 @@ + + + + + + + + Messenger & Chat | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Messenger & Chat

          + + + + + + +
          Can be the starting page for your application...
          + + +
          +
          + +
          +
          +
          +
          +
          + +
          +
          +
          + Oliver Kopyov +
          + Online +
          +
          + +
          +
          +
          +
          + + +
          + +
          + Protect your privacy by never sharing personal details like your phone number, email, or passwords. Stay alert for scams, + suspicious links, or requests for money, and report any inappropriate behavior immediately. Avoid hate speech, harassment, + or any illegal activities, as they are strictly prohibited. For all other rules, please refer to the Terms of Service. +
          + + +
          +
          +

          + Hey Tracey, did you get my files? +

          +
          +
          + 3:00 pm +
          +
          + + + +
          +
          +

          + Hi +

          +

          + Sorry going through a busy time in office. Yes I analyzed the solution. +

          +

          + It will require some resource, which I could not manage. +

          +
          +
          + 3:24 pm +
          +
          + + + +
          +
          +

          + Okay +

          +
          +
          + + + +
          +
          +

          + Sending you some dough today, you can allocate the resources to this project. +

          +
          +
          + 3:26 pm +
          +
          + + + +
          +
          +

          + Perfect. Thanks a lot! +

          +
          +
          + + + +
          +
          +

          + I will have them ready by tonight. +

          +
          +
          + + + +
          +
          +

          + Cheers +

          +
          +
          + + + +
          +
          Jun 20 +
          +
          + + +
          + + +
          +
          + + + +
          +
          + +
          +
          +
          + + +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/miscellaneous_filemanager.html b/legacy/smartadmin/miscellaneous_filemanager.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/miscellaneous_filemanager.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/page_projects.html b/legacy/smartadmin/page_projects.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/page_projects.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/panels.html b/legacy/smartadmin/panels.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/panels.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/peity-charts.html b/legacy/smartadmin/peity-charts.html new file mode 100644 index 0000000..bfb4818 --- /dev/null +++ b/legacy/smartadmin/peity-charts.html @@ -0,0 +1,2193 @@ + + + + + + + + Peity Charts | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Peity Charts

          + + + + + + +
          Lightweight inline SVG mini charts
          + + +
          +
          + Peity turns element text like "5,3,9,6,5,9,7" into simple SVG mini graphs. These lightweight charts can be used inline or as small data visualization elements. +
          +
          + +
          + +
          +
          +

          + Line Chart +

          +
          + + + +
          +
          +
          +
          +
          + You can specify the width of the strokes using strokeWidth inside data-peity attribute +
          +
          +
          + 0,-3,-6,-4,-5,-4,-7,-3,-5,-2 +
          +
          + 0,-3,-6,-4,-5,-4,-7,-3,-5,-2 +
          +
          + 0,1,7,6,4,2,3,5,3,4 +
          +
          + 5,3,9,6,5,3,1,7,6,4 +
          +
          +
          +
          +
          + + +
          +
          +

          + Bar Chart +

          +
          + + + +
          +
          +
          +
          +
          + Bar charts can have positive or negative integers. You can change the bar colors via the following data-peity='{ "fill": ["var(--info-200)","var(--info-500)","var(--info-700)","var(--info-900)"] }' +
          +
          +
          + 5,3,9,6,5,9,7,3,5,2 +
          +
          + 4,-3,-6,-4,-5,-4,7,-3,-5,2 +
          +
          + 0,1,7,6,4,2,3,5,3,4 +
          +
          + 0,-1,-7,-6,-4,-2,-3,-5,-3,-4 +
          +
          +
          +
          +
          + + +
          +
          +

          + Donut Chart +

          +
          + + + +
          +
          +
          +
          +
          + Donut charts can have any values. You can change the colors via CSS variables: data-peity='{ "fill": ["var(--primary-500)","var(--success-500)","var(--info-500)","var(--warning-500)"] }' +
          +
          +
          + 1/3 +
          +
          + 7,6,3,4 +
          +
          + 5/10 +
          +
          + 2,3,4,7,9,10,5,6 +
          +
          +
          +
          +
          + + +
          +
          +

          + Dynamic Colors +

          +
          + + + +
          +
          +
          +
          +
          + Colors, sizes and different settings of the chart can be generated dynamically based on data values. The examples below use the .bar-negative class to show positive/negative values in different colors and .bar-transition class to create a gradient effect across bars. +
          +
          +
          + 5,3,2,-1,-3,-2,2,3,5,2 +
          +
          + 5,3,9,6,5,9,7,3,5,2 +
          +
          +
          +
          +
          +
          + +
          + + +
          +
          +

          + Area Chart +

          +
          + + + +
          +
          +
          +
          +
          + Example of line with filling. You can add fill by using inserting data-peity='{ "fill": "#1dc9b7" }' +
          +
          +
          + 5,3,2,-1,-3,-2,2,3,5,2 +
          +
          + 1,4,4,7,5,9,10,4,4,7,5,9,10 +
          +
          + 5,3,9,6,5,3,1,7,6,4,4,1,5 +
          +
          + 0,1,7,6,4,2,3,5,3,4,3,1,4,6 +
          +
          +
          +
          +
          + + +
          +
          +

          + Pie Chart +

          +
          + + + +
          +
          +
          +
          +
          + Pie charts can have any values. You can change the colors using CSS variables: data-peity='{ "fill": ["var(--primary-500)","var(--success-500)","var(--info-500)","var(--warning-500)"] }' +
          +
          +
          + 1/4 +
          +
          + 7,6,3,4 +
          +
          + 5/10 +
          +
          + 2,3,4,7,9,10,5,6 +
          +
          +
          +
          +
          + + +
          +
          +

          + Updating Chart +

          +
          + + + +
          +
          +
          +
          +
          + This chart is automatically updated every half second using vanilla JavaScript. A new random value is generated, added to the chart data, and the oldest value is removed to create a live data visualization effect. +
          +
          +
          + 5,3,9,6,5,9,7,3,5,2,5,3,9,6,5,9,7,3,5,2 +
          +
          +
          +
          +
          + + +
          +
          +

          + Chart Sizes +

          +
          + + + +
          +
          +
          +
          +
          + Since the chart is just a generated SVG file, you can potentially generate the chart to any sizes using the values innerRadius and radius for pie and donut charts, and width and height for other charts +
          +
          + 1/7 + 2/7 + 3/7 + 4/7 + 5/7 + 6/7 + 7/7 +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/plugins/bootstrap/bootstrap.bundle.min.js b/legacy/smartadmin/plugins/bootstrap/bootstrap.bundle.min.js new file mode 100644 index 0000000..3d91751 --- /dev/null +++ b/legacy/smartadmin/plugins/bootstrap/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.7 (https://getbootstrap.com/) + * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t.call(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function j(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function M(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${M(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${M(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1),e[i]=j(t.dataset[n])}return e},getDataAttribute:(t,e)=>j(t.getAttribute(`data-bs-${M(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.7"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map((t=>n(t))).join(","):null},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="ArrowLeft",lt="ArrowRight",ct="next",ht="prev",dt="left",ut="right",ft=`slide${ot}`,pt=`slid${ot}`,mt=`keydown${ot}`,gt=`mouseenter${ot}`,_t=`mouseleave${ot}`,bt=`dragstart${ot}`,vt=`load${ot}${rt}`,yt=`click${ot}${rt}`,wt="carousel",At="active",Et=".active",Tt=".carousel-item",Ct=Et+Tt,Ot={[at]:ut,[lt]:dt},xt={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},kt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Lt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===wt&&this.cycle()}static get Default(){return xt}static get DefaultType(){return kt}static get NAME(){return"carousel"}next(){this._slide(ct)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(ht)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,pt,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,pt,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ct:ht;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,mt,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,gt,(()=>this.pause())),N.on(this._element,_t,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,bt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(dt)),rightCallback:()=>this._slide(this._directionToOrder(ut)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Ot[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(Et,this._indicatorsElement);e.classList.remove(At),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(At),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===ct,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(ft).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(At),i.classList.remove(At,c,l),this._isSliding=!1,r(pt)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Ct,this._element)}_getItems(){return z.find(Tt,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===dt?ht:ct:t===dt?ct:ht}_orderToDirection(t){return p()?t===ht?dt:ut:t===ht?ut:dt}static jQueryInterface(t){return this.each((function(){const e=Lt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,yt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(wt))return;t.preventDefault();const i=Lt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,vt,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)Lt.getOrCreateInstance(e)})),m(Lt);const St=".bs.collapse",Dt=`show${St}`,$t=`shown${St}`,It=`hide${St}`,Nt=`hidden${St}`,Pt=`click${St}.data-api`,jt="show",Mt="collapse",Ft="collapsing",Ht=`:scope .${Mt} .${Mt}`,Wt='[data-bs-toggle="collapse"]',Bt={parent:null,toggle:!0},zt={parent:"(null|element)",toggle:"boolean"};class Rt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Wt);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Bt}static get DefaultType(){return zt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Rt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Dt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Mt),this._element.classList.add(Ft),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Ft),this._element.classList.add(Mt,jt),this._element.style[e]="",N.trigger(this._element,$t)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,It).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Ft),this._element.classList.remove(Mt,jt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Ft),this._element.classList.add(Mt),N.trigger(this._element,Nt)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(jt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Wt);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(Ht,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Rt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,Pt,Wt,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Rt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Rt);var qt="top",Vt="bottom",Kt="right",Qt="left",Xt="auto",Yt=[qt,Vt,Kt,Qt],Ut="start",Gt="end",Jt="clippingParents",Zt="viewport",te="popper",ee="reference",ie=Yt.reduce((function(t,e){return t.concat([e+"-"+Ut,e+"-"+Gt])}),[]),ne=[].concat(Yt,[Xt]).reduce((function(t,e){return t.concat([e,e+"-"+Ut,e+"-"+Gt])}),[]),se="beforeRead",oe="read",re="afterRead",ae="beforeMain",le="main",ce="afterMain",he="beforeWrite",de="write",ue="afterWrite",fe=[se,oe,re,ae,le,ce,he,de,ue];function pe(t){return t?(t.nodeName||"").toLowerCase():null}function me(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function ge(t){return t instanceof me(t).Element||t instanceof Element}function _e(t){return t instanceof me(t).HTMLElement||t instanceof HTMLElement}function be(t){return"undefined"!=typeof ShadowRoot&&(t instanceof me(t).ShadowRoot||t instanceof ShadowRoot)}const ve={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];_e(s)&&pe(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});_e(n)&&pe(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function ye(t){return t.split("-")[0]}var we=Math.max,Ae=Math.min,Ee=Math.round;function Te(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ce(){return!/^((?!chrome|android).)*safari/i.test(Te())}function Oe(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&_e(t)&&(s=t.offsetWidth>0&&Ee(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&Ee(n.height)/t.offsetHeight||1);var r=(ge(t)?me(t):window).visualViewport,a=!Ce()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function xe(t){var e=Oe(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function ke(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&be(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Le(t){return me(t).getComputedStyle(t)}function Se(t){return["table","td","th"].indexOf(pe(t))>=0}function De(t){return((ge(t)?t.ownerDocument:t.document)||window.document).documentElement}function $e(t){return"html"===pe(t)?t:t.assignedSlot||t.parentNode||(be(t)?t.host:null)||De(t)}function Ie(t){return _e(t)&&"fixed"!==Le(t).position?t.offsetParent:null}function Ne(t){for(var e=me(t),i=Ie(t);i&&Se(i)&&"static"===Le(i).position;)i=Ie(i);return i&&("html"===pe(i)||"body"===pe(i)&&"static"===Le(i).position)?e:i||function(t){var e=/firefox/i.test(Te());if(/Trident/i.test(Te())&&_e(t)&&"fixed"===Le(t).position)return null;var i=$e(t);for(be(i)&&(i=i.host);_e(i)&&["html","body"].indexOf(pe(i))<0;){var n=Le(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Pe(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function je(t,e,i){return we(t,Ae(e,i))}function Me(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Fe(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const He={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=ye(i.placement),l=Pe(a),c=[Qt,Kt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Me("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Fe(t,Yt))}(s.padding,i),d=xe(o),u="y"===l?qt:Qt,f="y"===l?Vt:Kt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=Ne(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=je(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&ke(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function We(t){return t.split("-")[1]}var Be={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ze(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Qt,y=qt,w=window;if(c){var A=Ne(i),E="clientHeight",T="clientWidth";A===me(i)&&"static"!==Le(A=De(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===qt||(s===Qt||s===Kt)&&o===Gt)&&(y=Vt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Qt&&(s!==qt&&s!==Vt||o!==Gt)||(v=Kt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&Be),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:Ee(i*s)/s||0,y:Ee(n*s)/s||0}}({x:f,y:m},me(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Re={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:ye(e.placement),variation:We(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,ze(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,ze(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var qe={passive:!0};const Ve={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=me(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,qe)})),a&&l.addEventListener("resize",i.update,qe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,qe)})),a&&l.removeEventListener("resize",i.update,qe)}},data:{}};var Ke={left:"right",right:"left",bottom:"top",top:"bottom"};function Qe(t){return t.replace(/left|right|bottom|top/g,(function(t){return Ke[t]}))}var Xe={start:"end",end:"start"};function Ye(t){return t.replace(/start|end/g,(function(t){return Xe[t]}))}function Ue(t){var e=me(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ge(t){return Oe(De(t)).left+Ue(t).scrollLeft}function Je(t){var e=Le(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ze(t){return["html","body","#document"].indexOf(pe(t))>=0?t.ownerDocument.body:_e(t)&&Je(t)?t:Ze($e(t))}function ti(t,e){var i;void 0===e&&(e=[]);var n=Ze(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=me(n),r=s?[o].concat(o.visualViewport||[],Je(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ti($e(r)))}function ei(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ii(t,e,i){return e===Zt?ei(function(t,e){var i=me(t),n=De(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ce();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ge(t),y:l}}(t,i)):ge(e)?function(t,e){var i=Oe(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):ei(function(t){var e,i=De(t),n=Ue(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=we(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=we(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ge(t),l=-n.scrollTop;return"rtl"===Le(s||i).direction&&(a+=we(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(De(t)))}function ni(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?ye(s):null,r=s?We(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case qt:e={x:a,y:i.y-n.height};break;case Vt:e={x:a,y:i.y+i.height};break;case Kt:e={x:i.x+i.width,y:l};break;case Qt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Pe(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Ut:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Gt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function si(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Jt:a,c=i.rootBoundary,h=void 0===c?Zt:c,d=i.elementContext,u=void 0===d?te:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Me("number"!=typeof g?g:Fe(g,Yt)),b=u===te?ee:te,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ti($e(t)),i=["absolute","fixed"].indexOf(Le(t).position)>=0&&_e(t)?Ne(t):t;return ge(i)?e.filter((function(t){return ge(t)&&ke(t,i)&&"body"!==pe(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ii(t,i,n);return e.top=we(s.top,e.top),e.right=Ae(s.right,e.right),e.bottom=Ae(s.bottom,e.bottom),e.left=we(s.left,e.left),e}),ii(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(ge(y)?y:y.contextElement||De(t.elements.popper),l,h,r),A=Oe(t.elements.reference),E=ni({reference:A,element:v,placement:s}),T=ei(Object.assign({},v,E)),C=u===te?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===te&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[Kt,Vt].indexOf(t)>=0?1:-1,i=[qt,Vt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function oi(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ne:l,h=We(n),d=h?a?ie:ie.filter((function(t){return We(t)===h})):Yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=si(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[ye(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const ri={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=ye(g),b=l||(_!==g&&p?function(t){if(ye(t)===Xt)return[];var e=Qe(t);return[Ye(t),e,Ye(e)]}(g):[Qe(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(ye(i)===Xt?oi(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=si(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?Kt:Qt:k?Vt:qt;y[S]>w[S]&&($=Qe($));var I=Qe($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},j=p?3:1;j>0&&"break"!==P(j);j--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ai(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function li(t){return[qt,Kt,Vt,Qt].some((function(e){return t[e]>=0}))}const ci={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=si(e,{elementContext:"reference"}),a=si(e,{altBoundary:!0}),l=ai(r,n),c=ai(a,s,o),h=li(l),d=li(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},hi={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ne.reduce((function(t,i){return t[i]=function(t,e,i){var n=ye(t),s=[Qt,qt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Qt,Kt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},di={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ni({reference:e.rects.reference,element:e.rects.popper,placement:e.placement})},data:{}},ui={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=si(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=ye(e.placement),b=We(e.placement),v=!b,y=Pe(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?qt:Qt,D="y"===y?Vt:Kt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],j=f?-T[$]/2:0,M=b===Ut?E[$]:T[$],F=b===Ut?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?xe(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=je(0,E[$],W[$]),V=v?E[$]/2-j-q-z-O.mainAxis:M-q-z-O.mainAxis,K=v?-E[$]/2+j+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&Ne(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=je(f?Ae(N,I+V-Y-X):N,I,f?we(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?qt:Qt,tt="x"===y?Vt:Kt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[qt,Qt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=je(t,e,i);return n>i?i:n}(at,et,lt):je(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function fi(t,e,i){void 0===i&&(i=!1);var n,s,o=_e(e),r=_e(e)&&function(t){var e=t.getBoundingClientRect(),i=Ee(e.width)/t.offsetWidth||1,n=Ee(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=De(e),l=Oe(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==pe(e)||Je(a))&&(c=(n=e)!==me(n)&&_e(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Ue(n)),_e(e)?((h=Oe(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ge(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function pi(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var mi={placement:"bottom",modifiers:[],strategy:"absolute"};function gi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[void 0,t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Oi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Ki.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(ji);for(const i of e){const e=Ki.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ci,Oi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Pi)?this:z.prev(this,Pi)[0]||z.next(this,Pi)[0]||z.findOne(Pi,t.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,$i,Pi,Ki.dataApiKeydownHandler),N.on(document,$i,Mi,Ki.dataApiKeydownHandler),N.on(document,Di,Ki.clearMenus),N.on(document,Ii,Ki.clearMenus),N.on(document,Di,Pi,(function(t){t.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),m(Ki);const Qi="backdrop",Xi="show",Yi=`mousedown.bs.${Qi}`,Ui={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Gi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ji extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Ui}static get DefaultType(){return Gi}static get NAME(){return Qi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Xi),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Yi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Yi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Zi=".bs.focustrap",tn=`focusin${Zi}`,en=`keydown.tab${Zi}`,nn="backward",sn={autofocus:!0,trapElement:null},on={autofocus:"boolean",trapElement:"element"};class rn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return sn}static get DefaultType(){return on}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Zi),N.on(document,tn,(t=>this._handleFocusin(t))),N.on(document,en,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Zi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===nn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?nn:"forward")}}const an=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ln=".sticky-top",cn="padding-right",hn="margin-right";class dn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,cn,(e=>e+t)),this._setElementAttributes(an,cn,(e=>e+t)),this._setElementAttributes(ln,hn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,cn),this._resetElementAttributes(an,cn),this._resetElementAttributes(ln,hn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const un=".bs.modal",fn=`hide${un}`,pn=`hidePrevented${un}`,mn=`hidden${un}`,gn=`show${un}`,_n=`shown${un}`,bn=`resize${un}`,vn=`click.dismiss${un}`,yn=`mousedown.dismiss${un}`,wn=`keydown.dismiss${un}`,An=`click${un}.data-api`,En="modal-open",Tn="show",Cn="modal-static",On={backdrop:!0,focus:!0,keyboard:!0},xn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class kn extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new dn,this._addEventListeners()}static get Default(){return On}static get DefaultType(){return xn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,gn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(En),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,fn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Tn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,un),N.off(this._dialog,un),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ji({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new rn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(Tn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,_n,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,wn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,bn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,yn,(t=>{N.one(this._element,vn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(En),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,mn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,pn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Cn)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Cn),this._queueCallback((()=>{this._element.classList.remove(Cn),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=kn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,An,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,gn,(t=>{t.defaultPrevented||N.one(e,mn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&kn.getInstance(i).hide(),kn.getOrCreateInstance(e).toggle(this)})),R(kn),m(kn);const Ln=".bs.offcanvas",Sn=".data-api",Dn=`load${Ln}${Sn}`,$n="show",In="showing",Nn="hiding",Pn=".offcanvas.show",jn=`show${Ln}`,Mn=`shown${Ln}`,Fn=`hide${Ln}`,Hn=`hidePrevented${Ln}`,Wn=`hidden${Ln}`,Bn=`resize${Ln}`,zn=`click${Ln}${Sn}`,Rn=`keydown.dismiss${Ln}`,qn={backdrop:!0,keyboard:!0,scroll:!1},Vn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return qn}static get DefaultType(){return Vn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new dn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(In),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add($n),this._element.classList.remove(In),N.trigger(this._element,Mn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Fn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Nn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove($n,Nn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new dn).reset(),N.trigger(this._element,Wn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ji({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,Hn)}:null})}_initializeFocusTrap(){return new rn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Rn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,Hn))}))}static jQueryInterface(t){return this.each((function(){const e=Kn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,zn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Wn,(()=>{a(this)&&this.focus()}));const i=z.findOne(Pn);i&&i!==e&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(e).toggle(this)})),N.on(window,Dn,(()=>{for(const t of z.find(Pn))Kn.getOrCreateInstance(t).show()})),N.on(window,Bn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Kn.getOrCreateInstance(t).hide()})),R(Kn),m(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Yn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Un=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Xn.has(i)||Boolean(Yn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Gn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
          "},Jn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Zn={entry:"(string|element|function|null)",selector:"(string|element)"};class ts extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Gn}static get DefaultType(){return Jn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Zn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Un(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[void 0,this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const es=new Set(["sanitize","allowList","sanitizeFn"]),is="fade",ns="show",ss=".tooltip-inner",os=".modal",rs="hide.bs.modal",as="hover",ls="focus",cs="click",hs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},ds={allowList:Qn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},us={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class fs extends W{constructor(t,e){if(void 0===wi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ds}static get DefaultType(){return us}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(os),rs,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ns),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ns),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._activeTrigger[as]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(is,ns),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(is),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new ts({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[ss]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(is)}_isShown(){return this.tip&&this.tip.classList.contains(ns)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=hs[e.toUpperCase()];return yi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element,this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[void 0,e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger[cs]=!(e._isShown()&&e._activeTrigger[cs]),e.toggle()}));else if("manual"!==e){const t=e===as?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===as?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?ls:as]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?ls:as]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(os),rs,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))es.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(fs);const ps=".popover-header",ms=".popover-body",gs={...fs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},_s={...fs.DefaultType,content:"(null|string|element|function)"};class bs extends fs{static get Default(){return gs}static get DefaultType(){return _s}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ps]:this._getTitle(),[ms]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=bs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(bs);const vs=".bs.scrollspy",ys=`activate${vs}`,ws=`click${vs}`,As=`load${vs}.data-api`,Es="active",Ts="[href]",Cs=".nav-link",Os=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},ks={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ls extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return xs}static get DefaultType(){return ks}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ws),N.on(this._config.target,ws,Ts,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(Ts,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Es),this._activateParents(t),N.trigger(this._element,ys,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(Es);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,Os))t.classList.add(Es)}_clearActiveClass(t){t.classList.remove(Es);const e=z.find(`${Ts}.${Es}`,t);for(const t of e)t.classList.remove(Es)}static jQueryInterface(t){return this.each((function(){const e=Ls.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,As,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Ls.getOrCreateInstance(t)})),m(Ls);const Ss=".bs.tab",Ds=`hide${Ss}`,$s=`hidden${Ss}`,Is=`show${Ss}`,Ns=`shown${Ss}`,Ps=`click${Ss}`,js=`keydown${Ss}`,Ms=`load${Ss}`,Fs="ArrowLeft",Hs="ArrowRight",Ws="ArrowUp",Bs="ArrowDown",zs="Home",Rs="End",qs="active",Vs="fade",Ks="show",Qs=".dropdown-toggle",Xs=`:not(${Qs})`,Ys='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Us=`.nav-link${Xs}, .list-group-item${Xs}, [role="tab"]${Xs}, ${Ys}`,Gs=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Js extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,js,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Ds,{relatedTarget:t}):null;N.trigger(t,Is,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(qs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,Ns,{relatedTarget:e})):t.classList.add(Ks)}),t,t.classList.contains(Vs)))}_deactivate(t,e){t&&(t.classList.remove(qs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,$s,{relatedTarget:e})):t.classList.remove(Ks)}),t,t.classList.contains(Vs)))}_keydown(t){if(![Fs,Hs,Ws,Bs,zs,Rs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([zs,Rs].includes(t.key))i=e[t.key===zs?0:e.length-1];else{const n=[Hs,Bs].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Js.getOrCreateInstance(i).show())}_getChildren(){return z.find(Us,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(Qs,qs),n(".dropdown-menu",Ks),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(qs)}_getInnerElement(t){return t.matches(Us)?t:z.findOne(Us,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Js.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ps,Ys,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Js.getOrCreateInstance(this).show()})),N.on(window,Ms,(()=>{for(const t of z.find(Gs))Js.getOrCreateInstance(t)})),m(Js);const Zs=".bs.toast",to=`mouseover${Zs}`,eo=`mouseout${Zs}`,io=`focusin${Zs}`,no=`focusout${Zs}`,so=`hide${Zs}`,oo=`hidden${Zs}`,ro=`show${Zs}`,ao=`shown${Zs}`,lo="hide",co="show",ho="showing",uo={animation:"boolean",autohide:"boolean",delay:"number"},fo={animation:!0,autohide:!0,delay:5e3};class po extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fo}static get DefaultType(){return uo}static get NAME(){return"toast"}show(){N.trigger(this._element,ro).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(lo),d(this._element),this._element.classList.add(co,ho),this._queueCallback((()=>{this._element.classList.remove(ho),N.trigger(this._element,ao),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,so).defaultPrevented||(this._element.classList.add(ho),this._queueCallback((()=>{this._element.classList.add(lo),this._element.classList.remove(ho,co),N.trigger(this._element,oo)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(co),super.dispose()}isShown(){return this._element.classList.contains(co)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,to,(t=>this._onInteraction(t,!0))),N.on(this._element,eo,(t=>this._onInteraction(t,!1))),N.on(this._element,io,(t=>this._onInteraction(t,!0))),N.on(this._element,no,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=po.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(po),m(po),{Alert:Q,Button:Y,Carousel:Lt,Collapse:Rt,Dropdown:Ki,Modal:kn,Offcanvas:Kn,Popover:bs,ScrollSpy:Ls,Tab:Js,Toast:po,Tooltip:fs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/legacy/smartadmin/plugins/easypiechart/easypiechart.min.js b/legacy/smartadmin/plugins/easypiechart/easypiechart.min.js new file mode 100644 index 0000000..4c638e7 --- /dev/null +++ b/legacy/smartadmin/plugins/easypiechart/easypiechart.min.js @@ -0,0 +1,9 @@ +/**! + * easy-pie-chart + * Lightweight plugin to render simple, animated and retina optimized pie charts + * + * @license + * @author Robert Fleischmann (http://robert-fleischmann.de) + * @version 2.1.7 + **/ +!function(a,b){"function"==typeof define&&define.amd?define([],function(){return a.EasyPieChart=b()}):"object"==typeof exports?module.exports=b():a.EasyPieChart=b()}(this,function(){var a=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"object"==typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.trackWidth||b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},b=function(b,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,trackWidth:void 0,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(a,b){},onStep:function(a,b,c){},onStop:function(a,b){}};if("undefined"!=typeof a)d.renderer=a;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=b,this.options=e;for(var a in d)d.hasOwnProperty(a)&&(e[a]=c&&"undefined"!=typeof c[a]?c[a]:d[a],"function"==typeof e[a]&&(e[a]=e[a].bind(this)));"string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?e.easing=jQuery.easing[e.easing]:e.easing=d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(b,e),this.renderer.draw(f),b.dataset&&b.dataset.percent?this.update(parseFloat(b.dataset.percent)):b.getAttribute&&b.getAttribute("data-percent")&&this.update(parseFloat(b.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};return b}); \ No newline at end of file diff --git a/legacy/smartadmin/plugins/fullcalendar/index.global.min.js b/legacy/smartadmin/plugins/fullcalendar/index.global.min.js new file mode 100644 index 0000000..80aab06 --- /dev/null +++ b/legacy/smartadmin/plugins/fullcalendar/index.global.min.js @@ -0,0 +1,6 @@ +/*! +FullCalendar Standard Bundle v6.1.18 +Docs & License: https://fullcalendar.io/docs/initialize-globals +(c) 2024 Adam Shaw +*/ +var FullCalendar=function(e){"use strict";var t,n,r,i,s,o,a,l,c,d={},u=[],h=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function f(e,t){for(var n in t)e[n]=t[n];return e}function g(e){var t=e.parentNode;t&&t.removeChild(e)}function p(e,n,r){var i,s,o,a={};for(o in n)"key"==o?i=n[o]:"ref"==o?s=n[o]:a[o]=n[o];if(arguments.length>2&&(a.children=arguments.length>3?t.call(arguments,2):r),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===a[o]&&(a[o]=e.defaultProps[o]);return m(e,a,i,s,null)}function m(e,t,i,s,o){var a={type:e,props:t,key:i,ref:s,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++r:o};return null==o&&null!=n.vnode&&n.vnode(a),a}function v(){return{current:null}}function y(e){return e.children}function b(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||h.test(t)?n:n+"px"}function E(e,t,n,r,i){var s;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||b(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||b(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])s=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+s]=n,n?r||e.addEventListener(t,s?A:S,s):e.removeEventListener(t,s?A:S,s);else if("dangerouslySetInnerHTML"!==t){if(i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&-1==t.indexOf("-")?e.removeAttribute(t):e.setAttribute(t,n))}}function S(e){s=!0;try{return this.l[e.type+!1](n.event?n.event(e):e)}finally{s=!1}}function A(e){s=!0;try{return this.l[e.type+!0](n.event?n.event(e):e)}finally{s=!1}}function D(e,t){this.props=e,this.context=t}function w(e,t){if(null==t)return e.__?w(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&o.sort((function(e,t){return e.__v.__b-t.__v.__b})));_.__r=0}function T(e,t,n,r,i,s,o,a,l,c){var h,f,g,p,v,b,E,S=r&&r.__k||u,A=S.length;for(n.__k=[],h=0;h0?m(p.type,p.props,p.key,p.ref?p.ref:null,p.__v):p)){if(p.__=n,p.__b=n.__b+1,null===(g=S[h])||g&&p.key==g.key&&p.type===g.type)S[h]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=O(n)))return r;return null}function N(e,t,r,i,s,o,a,l,c){var d,u,h,g,p,m,v,b,E,S,A,w,C,R,x,_=t.type;if(void 0!==t.constructor)return null;null!=r.__h&&(c=r.__h,l=t.__e=r.__e,t.__h=null,o=[l]),(d=n.__b)&&d(t);try{e:if("function"==typeof _){if(b=t.props,E=(d=_.contextType)&&i[d.__c],S=d?E?E.props.value:d.__:i,r.__c?v=(u=t.__c=r.__c).__=u.__E:("prototype"in _&&_.prototype.render?t.__c=u=new _(b,S):(t.__c=u=new D(b,S),u.constructor=_,u.render=z),E&&E.sub(u),u.props=b,u.state||(u.state={}),u.context=S,u.__n=i,h=u.__d=!0,u.__h=[],u._sb=[]),null==u.__s&&(u.__s=u.state),null!=_.getDerivedStateFromProps&&(u.__s==u.state&&(u.__s=f({},u.__s)),f(u.__s,_.getDerivedStateFromProps(b,u.__s))),g=u.props,p=u.state,u.__v=t,h)null==_.getDerivedStateFromProps&&null!=u.componentWillMount&&u.componentWillMount(),null!=u.componentDidMount&&u.__h.push(u.componentDidMount);else{if(null==_.getDerivedStateFromProps&&b!==g&&null!=u.componentWillReceiveProps&&u.componentWillReceiveProps(b,S),!u.__e&&null!=u.shouldComponentUpdate&&!1===u.shouldComponentUpdate(b,u.__s,S)||t.__v===r.__v){for(t.__v!==r.__v&&(u.props=b,u.state=u.__s,u.__d=!1),t.__e=r.__e,t.__k=r.__k,t.__k.forEach((function(e){e&&(e.__=t)})),A=0;A3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),U(p(ue,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function fe(e,t){var n=p(he,{__v:e,i:t});return n.containerInfo=t,n}(ce.prototype=new D).__a=function(e){var t=this,n=le(t.__v),r=t.o.get(e);return r[0]++,function(i){var s=function(){t.props.revealOrder?(r.push(i),de(t,e,r)):i()};n?n(s):s()}},ce.prototype.render=function(e){this.u=null,this.o=new Map;var t=M(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},ce.prototype.componentDidUpdate=ce.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){de(e,n,t)}))};var ge="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,pe=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,me="undefined"!=typeof document,ve=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(e)};D.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(D.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var ye=n.event;function be(){}function Ee(){return this.cancelBubble}function Se(){return this.defaultPrevented}n.event=function(e){return ye&&(e=ye(e)),e.persist=be,e.isPropagationStopped=Ee,e.isDefaultPrevented=Se,e.nativeEvent=e};var Ae={configurable:!0,get:function(){return this.class}},De=n.vnode;n.vnode=function(e){var t=e.type,n=e.props,r=n;if("string"==typeof t){var i=-1===t.indexOf("-");for(var s in r={},n){var o=n[s];me&&"children"===s&&"noscript"===t||"value"===s&&"defaultValue"in n&&null==o||("defaultValue"===s&&"value"in n&&null==n.value?s="value":"download"===s&&!0===o?o="":/ondoubleclick/i.test(s)?s="ondblclick":/^onchange(textarea|input)/i.test(s+t)&&!ve(n.type)?s="oninput":/^onfocus$/i.test(s)?s="onfocusin":/^onblur$/i.test(s)?s="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(s)?s=s.toLowerCase():i&&pe.test(s)?s=s.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===o&&(o=void 0),/^oninput$/i.test(s)&&(s=s.toLowerCase(),r[s]&&(s="oninputCapture")),r[s]=o)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=M(n.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==t&&null!=r.defaultValue&&(r.value=M(n.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),e.props=r,n.class!=n.className&&(Ae.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",Ae))}e.$$typeof=ge,De&&De(e)};var we=n.__r;n.__r=function(e){we&&we(e),e.__c};const Ce=[],Re=new Map;function xe(e){Ce.push(e),Re.forEach(t=>{Te(t,e)})}function _e(e){let t=Re.get(e);if(!t||!t.isConnected){if(t=e.querySelector("style[data-fullcalendar]"),!t){t=document.createElement("style"),t.setAttribute("data-fullcalendar","");const n=function(){void 0===ke&&(ke=function(){const e=document.querySelector('meta[name="csp-nonce"]');if(e&&e.hasAttribute("content"))return e.getAttribute("content");const t=document.querySelector("script[nonce]");if(t)return t.nonce||"";return""}());return ke}();n&&(t.nonce=n);const r=e===document?document.head:e,i=e===document?r.querySelector("script,link[rel=stylesheet],link[as=style],style"):r.firstChild;r.insertBefore(t,i)}Re.set(e,t),function(e){for(const t of Ce)Te(e,t)}(t)}}function Te(e,t){const{sheet:n}=e,r=n.cssRules.length;t.split("}").forEach((e,t)=>{(e=e.trim())&&n.insertRule(e+"}",r+t)})}let ke;"undefined"!=typeof document&&_e(document);xe(':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}');class Me{constructor(e){this.drainedOption=e,this.isRunning=!1,this.isDirty=!1,this.pauseDepths={},this.timeoutId=0}request(e){this.isDirty=!0,this.isPaused()||(this.clearTimeout(),null==e?this.tryDrain():this.timeoutId=setTimeout(this.tryDrain.bind(this),e))}pause(e=""){let{pauseDepths:t}=this;t[e]=(t[e]||0)+1,this.clearTimeout()}resume(e="",t){let{pauseDepths:n}=this;if(e in n){if(t)delete n[e];else{n[e]-=1,n[e]<=0&&delete n[e]}this.tryDrain()}}isPaused(){return Object.keys(this.pauseDepths).length}tryDrain(){if(!this.isRunning&&!this.isPaused()){for(this.isRunning=!0;this.isDirty;)this.isDirty=!1,this.drained();this.isRunning=!1}}clear(){this.clearTimeout(),this.isDirty=!1,this.pauseDepths={}}clearTimeout(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=0)}drained(){this.drainedOption&&this.drainedOption()}}function Ie(e){e.parentNode&&e.parentNode.removeChild(e)}function Oe(e,t){if(e.closest)return e.closest(t);if(!document.documentElement.contains(e))return null;do{if(Ne(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function Ne(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector).call(e,t)}function Pe(e,t){let n=e instanceof HTMLElement?[e]:e,r=[];for(let e=0;e{let r=Oe(n.target,e);r&&t.call(r,n,r)}}(n,r);return e.addEventListener(t,i),()=>{e.removeEventListener(t,i)}}const Ve=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function Ge(e,t){let n=r=>{t(r),Ve.forEach(t=>{e.removeEventListener(t,n)})};Ve.forEach(t=>{e.addEventListener(t,n)})}function Qe(e){return Object.assign({onClick:e},qe(e))}function qe(e){return{tabIndex:0,onKeyDown(t){"Enter"!==t.key&&" "!==t.key||(e(t),t.preventDefault())}}}let Ye=0;function Ze(){return Ye+=1,String(Ye)}function Xe(){document.body.classList.add("fc-not-allowed")}function $e(){document.body.classList.remove("fc-not-allowed")}function Je(e){e.style.userSelect="none",e.style.webkitUserSelect="none",e.addEventListener("selectstart",We)}function Ke(e){e.style.userSelect="",e.style.webkitUserSelect="",e.removeEventListener("selectstart",We)}function et(e){e.addEventListener("contextmenu",We)}function tt(e){e.removeEventListener("contextmenu",We)}function nt(e){let t,n,r=[],i=[];for("string"==typeof e?i=e.split(/\s*,\s*/):"function"==typeof e?i=[e]:Array.isArray(e)&&(i=e),t=0;te.replace("$"+n,t||""),e):n}function lt(e,t){return e-t}function ct(e){return e%1==0}function dt(e){let t=e.querySelector(".fc-scrollgrid-shrink-frame"),n=e.querySelector(".fc-scrollgrid-shrink-cushion");if(!t)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!n)throw new Error("needs fc-scrollgrid-shrink-cushion className");return e.getBoundingClientRect().width-t.getBoundingClientRect().width+n.getBoundingClientRect().width}const ut=["years","months","days","milliseconds"],ht=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function ft(e,t){return"string"==typeof e?function(e){let t=ht.exec(e);if(t){let e=t[1]?-1:1;return{years:0,months:0,days:e*(t[2]?parseInt(t[2],10):0),milliseconds:e*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}(e):"object"==typeof e&&e?gt(e):"number"==typeof e?gt({[t||"milliseconds"]:e}):null}function gt(e){let t={years:e.years||e.year||0,months:e.months||e.month||0,days:e.days||e.day||0,milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)},n=e.weeks||e.week;return n&&(t.days+=7*n,t.specifiedWeeks=!0),t}function pt(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}}function mt(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}}function vt(e){return yt(e)/864e5}function yt(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function bt(e,t){let n=null;for(let r=0;r10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",Vt(t,!0)))),r}function Lt(e){return e.toISOString().replace(/T.*$/,"")}function Wt(e){return e.toISOString().match(/^\d{4}-\d{2}/)[0]}function Ft(e){return ot(e.getUTCHours(),2)+":"+ot(e.getUTCMinutes(),2)+":"+ot(e.getUTCSeconds(),2)}function Vt(e,t=!1){let n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),s=Math.round(r%60);return t?`${n+ot(i,2)}:${ot(s,2)}`:`GMT${n}${i}${s?":"+ot(s,2):""}`}function Gt(e,t,n){let r,i;return function(...s){if(r){if(!St(r,s)){n&&n(i);let r=e.apply(this,s);t&&t(r,i)||(i=r)}}else i=e.apply(this,s);return r=s,i}}function Qt(e,t,n){let r,i;return s=>{if(r){if(!Cn(r,s)){n&&n(i);let r=e.call(this,s);t&&t(r,i)||(i=r)}}else i=e.call(this,s);return r=s,i}}const qt={week:3,separator:9,omitZeroMinute:9,meridiem:9,omitCommas:9},Yt={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},Zt=/\s*([ap])\.?m\.?/i,Xt=/,/g,$t=/\s+/g,Jt=/\u200e/g,Kt=/UTC|GMT/;class en{constructor(e){let t={},n={},r=9;for(let i in e)if(i in qt){n[i]=e[i];qt[i]<9&&(r=Math.min(qt[i],r))}else t[i]=e[i],i in Yt&&(r=Math.min(Yt[i],r));this.standardDateProps=t,this.extendedSettings=n,this.smallestUnitNum=r,this.buildFormattingFunc=Gt(tn)}format(e,t){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,t)(e)}formatRange(e,t,n,r){let{standardDateProps:i,extendedSettings:s}=this,o=function(e,t,n){if(n.getMarkerYear(e)!==n.getMarkerYear(t))return 5;if(n.getMarkerMonth(e)!==n.getMarkerMonth(t))return 4;if(n.getMarkerDay(e)!==n.getMarkerDay(t))return 2;if(zt(e)!==zt(t))return 1;return 0}(e.marker,t.marker,n.calendarSystem);if(!o)return this.format(e,n);let a=o;!(a>1)||"numeric"!==i.year&&"2-digit"!==i.year||"numeric"!==i.month&&"2-digit"!==i.month||"numeric"!==i.day&&"2-digit"!==i.day||(a=1);let l=this.format(e,n),c=this.format(t,n);if(l===c)return l;let d=tn(function(e,t){let n={};for(let r in e)(!(r in Yt)||Yt[r]<=t)&&(n[r]=e[r]);return n}(i,a),s,n),u=d(e),h=d(t),f=function(e,t,n,r){let i=0;for(;iVt(e.timeZoneOffset):0===r&&t.week?e=>function(e,t,n,r,i){let s=[];"long"===i?s.push(n):"short"!==i&&"narrow"!==i||s.push(t);"long"!==i&&"short"!==i||s.push(" ");s.push(r.simpleNumberFormat.format(e)),"rtl"===r.options.direction&&s.reverse();return s.join("")}(n.computeWeekNumber(e.marker),n.weekText,n.weekTextLong,n.locale,t.week):function(e,t,n){e=Object.assign({},e),t=Object.assign({},t),function(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit"));"long"===e.timeZoneName&&(e.timeZoneName="short");t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}(e,t),e.timeZone="UTC";let r,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){let t=Object.assign({},e);delete t.minute,r=new Intl.DateTimeFormat(n.locale.codes,t)}return s=>{let o,{marker:a}=s;return o=r&&!a.getUTCMinutes()?r:i,function(e,t,n,r,i){e=e.replace(Jt,""),"short"===n.timeZoneName&&(e=function(e,t){let n=!1;e=e.replace(Kt,()=>(n=!0,t)),n||(e+=" "+t);return e}(e,"UTC"===i.timeZone||null==t.timeZoneOffset?"UTC":Vt(t.timeZoneOffset)));r.omitCommas&&(e=e.replace(Xt,"").trim());r.omitZeroMinute&&(e=e.replace(":00",""));!1===r.meridiem?e=e.replace(Zt,"").trim():"narrow"===r.meridiem?e=e.replace(Zt,(e,t)=>t.toLocaleLowerCase()):"short"===r.meridiem?e=e.replace(Zt,(e,t)=>t.toLocaleLowerCase()+"m"):"lowercase"===r.meridiem&&(e=e.replace(Zt,e=>e.toLocaleLowerCase()));return e=(e=e.replace($t," ")).trim()}(o.format(a),s,e,t,n)}}(e,t,n)}function nn(e,t){let n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}function rn(e,t,n,r){let i=nn(e,n.calendarSystem);return{date:i,start:i,end:t?nn(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,defaultSeparator:r||n.defaultSeparator}}class sn{constructor(e){this.cmdStr=e}format(e,t,n){return t.cmdFormatter(this.cmdStr,rn(e,null,t,n))}formatRange(e,t,n,r){return n.cmdFormatter(this.cmdStr,rn(e,t,n,r))}}class on{constructor(e){this.func=e}format(e,t,n){return this.func(rn(e,null,t,n))}formatRange(e,t,n,r){return this.func(rn(e,t,n,r))}}function an(e){return"object"==typeof e&&e?new en(e):"string"==typeof e?new sn(e):"function"==typeof e?new on(e):null}const ln={navLinkDayClick:yn,navLinkWeekClick:yn,duration:ft,bootstrapFontAwesome:yn,buttonIcons:yn,customButtons:yn,defaultAllDayEventDuration:ft,defaultTimedEventDuration:ft,nextDayThreshold:ft,scrollTime:ft,scrollTimeReset:Boolean,slotMinTime:ft,slotMaxTime:ft,dayPopoverFormat:an,slotDuration:ft,snapDuration:ft,headerToolbar:yn,footerToolbar:yn,defaultRangeSeparator:String,titleRangeSeparator:String,forceEventDuration:Boolean,dayHeaders:Boolean,dayHeaderFormat:an,dayHeaderClassNames:yn,dayHeaderContent:yn,dayHeaderDidMount:yn,dayHeaderWillUnmount:yn,dayCellClassNames:yn,dayCellContent:yn,dayCellDidMount:yn,dayCellWillUnmount:yn,initialView:String,aspectRatio:Number,weekends:Boolean,weekNumberCalculation:yn,weekNumbers:Boolean,weekNumberClassNames:yn,weekNumberContent:yn,weekNumberDidMount:yn,weekNumberWillUnmount:yn,editable:Boolean,viewClassNames:yn,viewDidMount:yn,viewWillUnmount:yn,nowIndicator:Boolean,nowIndicatorClassNames:yn,nowIndicatorContent:yn,nowIndicatorDidMount:yn,nowIndicatorWillUnmount:yn,showNonCurrentDates:Boolean,lazyFetching:Boolean,startParam:String,endParam:String,timeZoneParam:String,timeZone:String,locales:yn,locale:yn,themeSystem:String,dragRevertDuration:Number,dragScroll:Boolean,allDayMaintainDuration:Boolean,unselectAuto:Boolean,dropAccept:yn,eventOrder:nt,eventOrderStrict:Boolean,handleWindowResize:Boolean,windowResizeDelay:Number,longPressDelay:Number,eventDragMinDistance:Number,expandRows:Boolean,height:yn,contentHeight:yn,direction:String,weekNumberFormat:an,eventResizableFromStart:Boolean,displayEventTime:Boolean,displayEventEnd:Boolean,weekText:String,weekTextLong:String,progressiveEventRendering:Boolean,businessHours:yn,initialDate:yn,now:yn,eventDataTransform:yn,stickyHeaderDates:yn,stickyFooterScrollbar:yn,viewHeight:yn,defaultAllDay:Boolean,eventSourceFailure:yn,eventSourceSuccess:yn,eventDisplay:String,eventStartEditable:Boolean,eventDurationEditable:Boolean,eventOverlap:yn,eventConstraint:yn,eventAllow:yn,eventBackgroundColor:String,eventBorderColor:String,eventTextColor:String,eventColor:String,eventClassNames:yn,eventContent:yn,eventDidMount:yn,eventWillUnmount:yn,selectConstraint:yn,selectOverlap:yn,selectAllow:yn,droppable:Boolean,unselectCancel:String,slotLabelFormat:yn,slotLaneClassNames:yn,slotLaneContent:yn,slotLaneDidMount:yn,slotLaneWillUnmount:yn,slotLabelClassNames:yn,slotLabelContent:yn,slotLabelDidMount:yn,slotLabelWillUnmount:yn,dayMaxEvents:yn,dayMaxEventRows:yn,dayMinWidth:Number,slotLabelInterval:ft,allDayText:String,allDayClassNames:yn,allDayContent:yn,allDayDidMount:yn,allDayWillUnmount:yn,slotMinWidth:Number,navLinks:Boolean,eventTimeFormat:an,rerenderDelay:Number,moreLinkText:yn,moreLinkHint:yn,selectMinDistance:Number,selectable:Boolean,selectLongPressDelay:Number,eventLongPressDelay:Number,selectMirror:Boolean,eventMaxStack:Number,eventMinHeight:Number,eventMinWidth:Number,eventShortHeight:Number,slotEventOverlap:Boolean,plugins:yn,firstDay:Number,dayCount:Number,dateAlignment:String,dateIncrement:ft,hiddenDays:yn,fixedWeekCount:Boolean,validRange:yn,visibleRange:yn,titleFormat:yn,eventInteractive:Boolean,noEventsText:String,viewHint:yn,navLinkHint:yn,closeHint:String,timeHint:String,eventHint:String,moreLinkClick:yn,moreLinkClassNames:yn,moreLinkContent:yn,moreLinkDidMount:yn,moreLinkWillUnmount:yn,monthStartFormat:an,handleCustomRendering:yn,customRenderingMetaMap:yn,customRenderingReplaces:Boolean},cn={eventDisplay:"auto",defaultRangeSeparator:" - ",titleRangeSeparator:" – ",defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00",dayHeaders:!0,initialView:"",aspectRatio:1.35,headerToolbar:{start:"title",center:"",end:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,nowIndicator:!1,scrollTime:"06:00:00",scrollTimeReset:!0,slotMinTime:"00:00:00",slotMaxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",locales:[],locale:"",themeSystem:"standard",dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5,expandRows:!1,navLinks:!1,selectable:!1,eventMinHeight:15,eventMinWidth:30,eventShortHeight:30,monthStartFormat:{month:"long",day:"numeric"}},dn={datesSet:yn,eventsSet:yn,eventAdd:yn,eventChange:yn,eventRemove:yn,windowResize:yn,eventClick:yn,eventMouseEnter:yn,eventMouseLeave:yn,select:yn,unselect:yn,loading:yn,_unmount:yn,_beforeprint:yn,_afterprint:yn,_noEventDrop:yn,_noEventResize:yn,_resize:yn,_scrollRequest:yn},un={buttonText:yn,buttonHints:yn,views:yn,plugins:yn,initialEvents:yn,events:yn,eventSources:yn},hn={headerToolbar:fn,footerToolbar:fn,buttonText:fn,buttonHints:fn,buttonIcons:fn,dateIncrement:fn,plugins:gn,events:gn,eventSources:gn,resources:gn};function fn(e,t){return"object"==typeof e&&"object"==typeof t&&e&&t?Cn(e,t):e===t}function gn(e,t){return Array.isArray(e)&&Array.isArray(t)?St(e,t):e===t}const pn={type:String,component:yn,buttonText:String,buttonTextKey:String,dateProfileGeneratorClass:yn,usesMinMaxTime:Boolean,classNames:yn,content:yn,didMount:yn,willUnmount:yn};function mn(e){return En(e,hn)}function vn(e,t){let n={},r={};for(let r in t)r in e&&(n[r]=t[r](e[r]));for(let n in e)n in t||(r[n]=e[n]);return{refined:n,extra:r}}function yn(e){return e}const{hasOwnProperty:bn}=Object.prototype;function En(e,t){let n={};if(t)for(let r in t)if(t[r]===fn){let t=[];for(let i=e.length-1;i>=0;i-=1){let s=e[i][r];if("object"==typeof s&&s)t.unshift(s);else if(void 0!==s){n[r]=s;break}}t.length&&(n[r]=En(t))}for(let t=e.length-1;t>=0;t-=1){let r=e[t];for(let e in r)e in n||(n[e]=r[e])}return n}function Sn(e,t){let n={};for(let r in e)t(e[r],r)&&(n[r]=e[r]);return n}function An(e,t){let n={};for(let r in e)n[r]=t(e[r],r);return n}function Dn(e){let t={};for(let n of e)t[n]=!0;return t}function wn(e){let t=[];for(let n in e)t.push(e[n]);return t}function Cn(e,t){if(e===t)return!0;for(let n in e)if(bn.call(e,n)&&!(n in t))return!1;for(let n in t)if(bn.call(t,n)&&e[n]!==t[n])return!1;return!0}const Rn=/^on[A-Z]/;function xn(e,t,n={}){if(e===t)return!0;for(let r in t)if(!(r in e)||!_n(e[r],t[r],n[r]))return!1;for(let n in e)if(!(n in t))return!1;return!0}function _n(e,t,n){return e===t||!0===n||!!n&&n(e,t)}function Tn(e,t=0,n,r=1){let i=[];null==n&&(n=Object.keys(e).length);for(let s=t;s=1?Math.min(i,s):i}(e,this.weekDow,this.weekDoy)}format(e,t,n={}){return t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)}formatRange(e,t,n,r={}){return r.isEndExclusive&&(t=Ct(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this,r.defaultSeparator)}formatIso(e,t={}){let n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),Ut(e,n,t.omitTime)}timestampToMarker(e){return"local"===this.timeZone?Bt(Nt(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?Bt(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)}offsetForMarker(e){return"local"===this.timeZone?-Pt(Ht(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(Ht(e)):null}toDate(e,t){return"local"===this.timeZone?Pt(Ht(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(Ht(e))*60):new Date(e.valueOf()-(t||0))}}class Hn{constructor(e){this.iconOverrideOption&&this.setIconOverride(e[this.iconOverrideOption])}setIconOverride(e){let t,n;if("object"==typeof e&&e){for(n in t=Object.assign({},this.iconClasses),e)t[n]=this.applyIconOverridePrefix(e[n]);this.iconClasses=t}else!1===e&&(this.iconClasses={})}applyIconOverridePrefix(e){let t=this.iconOverridePrefix;return t&&0!==e.indexOf(t)&&(e=t+e),e}getClass(e){return this.classes[e]||""}getIconClass(e,t){let n;return n=t&&this.rtlIconClasses&&this.rtlIconClasses[e]||this.iconClasses[e],n?`${this.baseIconClass} ${n}`:""}getCustomButtonIconClass(e){let t;return this.iconOverrideCustomButtonOption&&(t=e[this.iconOverrideCustomButtonOption],t)?`${this.baseIconClass} ${this.applyIconOverridePrefix(t)}`:""}}function Bn(e){e();let t=n.debounceRendering,r=[];for(n.debounceRendering=function(e){r.push(e)},U(p(jn,{}),document.createElement("div"));r.length;)r.shift()();n.debounceRendering=t}Hn.prototype.classes={},Hn.prototype.iconClasses={},Hn.prototype.baseIconClass="",Hn.prototype.iconOverridePrefix="";class jn extends D{render(){return p("div",{})}componentDidMount(){this.setState({})}}function zn(e){let t=function(e,t){var n={__c:t="__cC"+c++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some((function(e){e.__e=!0,x(e)}))},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}(e),n=t.Provider;return t.Provider=function(){let e=!this.getChildContext,t=n.apply(this,arguments);if(e){let e=[];this.shouldComponentUpdate=t=>{this.props.value!==t.value&&e.forEach(e=>{e.context=t.value,e.forceUpdate()})},this.sub=t=>{e.push(t);let n=t.componentWillUnmount;t.componentWillUnmount=()=>{e.splice(e.indexOf(t),1),n&&n.call(t)}}}return t},t}class Un{constructor(e,t,n,r){this.execFunc=e,this.emitter=t,this.scrollTime=n,this.scrollTimeReset=r,this.handleScrollRequest=e=>{this.queuedRequest=Object.assign({},this.queuedRequest||{},e),this.drain()},t.on("_scrollRequest",this.handleScrollRequest),this.fireInitialScroll()}detach(){this.emitter.off("_scrollRequest",this.handleScrollRequest)}update(e){e&&this.scrollTimeReset?this.fireInitialScroll():this.drain()}fireInitialScroll(){this.handleScrollRequest({time:this.scrollTime})}drain(){this.queuedRequest&&this.execFunc(this.queuedRequest)&&(this.queuedRequest=null)}}const Ln=zn({});function Wn(e,t,n,r,i,s,o,a,l,c,d,u,h,f){return{dateEnv:i,nowManager:s,options:n,pluginHooks:a,emitter:d,dispatch:l,getCurrentData:c,calendarApi:u,viewSpec:e,viewApi:t,dateProfileGenerator:r,theme:o,isRtl:"rtl"===n.direction,addResizeHandler(e){d.on("_resize",e)},removeResizeHandler(e){d.off("_resize",e)},createScrollResponder:e=>new Un(e,d,ft(n.scrollTime),n.scrollTimeReset),registerInteractiveComponent:h,unregisterInteractiveComponent:f}}class Fn extends D{shouldComponentUpdate(e,t){return!xn(this.props,e,this.propEquality)||!xn(this.state,t,this.stateEquality)}safeSetState(e){xn(this.state,Object.assign(Object.assign({},this.state),e),this.stateEquality)||this.setState(e)}}Fn.addPropsEquality=function(e){let t=Object.create(this.prototype.propEquality);Object.assign(t,e),this.prototype.propEquality=t},Fn.addStateEquality=function(e){let t=Object.create(this.prototype.stateEquality);Object.assign(t,e),this.prototype.stateEquality=t},Fn.contextType=Ln,Fn.prototype.propEquality={},Fn.prototype.stateEquality={};class Vn extends Fn{}function Gn(e,t){"function"==typeof e?e(t):e&&(e.current=t)}Vn.contextType=Ln;class Qn extends Vn{constructor(){super(...arguments),this.id=Ze(),this.queuedDomNodes=[],this.currentDomNodes=[],this.handleEl=e=>{const{options:t}=this.context,{generatorName:n}=this.props;t.customRenderingReplaces&&qn(n,t)||this.updateElRef(e)},this.updateElRef=e=>{this.props.elRef&&Gn(this.props.elRef,e)}}render(){const{props:e,context:t}=this,{options:n}=t,{customGenerator:r,defaultGenerator:s,renderProps:o}=e,a=Yn(e,[],this.handleEl);let l,c,d=!1,u=[];if(null!=r){const e="function"==typeof r?r(o,p):r;if(!0===e)d=!0;else{const t=e&&"object"==typeof e;t&&"html"in e?a.dangerouslySetInnerHTML={__html:e.html}:t&&"domNodes"in e?u=Array.prototype.slice.call(e.domNodes):(t?i(e):"function"!=typeof e)?l=e:c=e}}else d=!qn(e.generatorName,n);return d&&s&&(l=s(o)),this.queuedDomNodes=u,this.currentGeneratorMeta=c,p(e.elTag,a,l)}componentDidMount(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentDidUpdate(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentWillUnmount(){this.triggerCustomRendering(!1)}triggerCustomRendering(e){var t;const{props:n,context:r}=this,{handleCustomRendering:i,customRenderingMetaMap:s}=r.options;if(i){const r=null!==(t=this.currentGeneratorMeta)&&void 0!==t?t:null==s?void 0:s[n.generatorName];r&&i(Object.assign(Object.assign({id:this.id,isActive:e,containerEl:this.base,reportNewContainerEl:this.updateElRef,generatorMeta:r},n),{elClasses:(n.elClasses||[]).filter(Zn)}))}}applyQueueudDomNodes(){const{queuedDomNodes:e,currentDomNodes:t}=this,n=this.base;if(!St(e,t)){t.forEach(Ie);for(let t of e)n.appendChild(t);this.currentDomNodes=e}}}function qn(e,t){var n;return Boolean(t.handleCustomRendering&&e&&(null===(n=t.customRenderingMetaMap)||void 0===n?void 0:n[e]))}function Yn(e,t,n){const r=Object.assign(Object.assign({},e.elAttrs),{ref:n});return(e.elClasses||t)&&(r.className=(e.elClasses||[]).concat(t||[]).concat(r.className||[]).filter(Boolean).join(" ")),e.elStyle&&(r.style=e.elStyle),r}function Zn(e){return Boolean(e)}Qn.addPropsEquality({elClasses:St,elStyle:Cn,elAttrs:function(e,t){const n=function(e,t){let n=[];for(let r in e)bn.call(e,r)&&(r in t||n.push(r));for(let r in t)bn.call(t,r)&&e[r]!==t[r]&&n.push(r);return n}(e,t);for(let e of n)if(!Rn.test(e))return!1;return!0},renderProps:Cn});const Xn=zn(0);class $n extends D{constructor(){super(...arguments),this.InnerContent=Jn.bind(void 0,this),this.handleEl=e=>{this.el=e,this.props.elRef&&(Gn(this.props.elRef,e),e&&this.didMountMisfire&&this.componentDidMount())}}render(){const{props:e}=this,t=function(e,t){const n="function"==typeof e?e(t):e||[];return"string"==typeof n?[n]:n}(e.classNameGenerator,e.renderProps);if(e.children){const n=Yn(e,t,this.handleEl),r=e.children(this.InnerContent,e.renderProps,n);return e.elTag?p(e.elTag,n,r):r}return p(Qn,Object.assign(Object.assign({},e),{elRef:this.handleEl,elTag:e.elTag||"div",elClasses:(e.elClasses||[]).concat(t),renderId:this.context}))}componentDidMount(){var e,t;this.el?null===(t=(e=this.props).didMount)||void 0===t||t.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.el})):this.didMountMisfire=!0}componentWillUnmount(){var e,t;null===(t=(e=this.props).willUnmount)||void 0===t||t.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.el}))}}function Jn(e,t){const n=e.props;return p(Qn,Object.assign({renderProps:n.renderProps,generatorName:n.generatorName,customGenerator:n.customGenerator,defaultGenerator:n.defaultGenerator,renderId:e.context},t))}$n.contextType=Xn;class Kn extends Vn{render(){let{props:e,context:t}=this,{options:n}=t,r={view:t.viewApi};return p($n,{elRef:e.elRef,elTag:e.elTag||"div",elAttrs:e.elAttrs,elClasses:[...er(e.viewSpec),...e.elClasses||[]],elStyle:e.elStyle,renderProps:r,classNameGenerator:n.viewClassNames,generatorName:void 0,didMount:n.viewDidMount,willUnmount:n.viewWillUnmount},()=>e.children)}}function er(e){return[`fc-${e.type}-view`,"fc-view"]}function tr(e,t){let n,r,i=[],{start:s}=t;for(e.sort(nr),n=0;ns&&i.push({start:s,end:r.start}),r.end>s&&(s=r.end);return st.start)&&(null===e.start||null===t.end||e.start=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function ar(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t=yt(t)&&(r=wt(r,1))}return e.start&&(n=Mt(e.start),r&&r<=n&&(r=wt(n,1))),{start:n,end:r}}function dr(e){let t=cr(e);return xt(t.start,t.end)>1}function ur(e,t,n,r){return"year"===r?ft(n.diffWholeYears(e,t),"year"):"month"===r?ft(n.diffWholeMonths(e,t),"month"):_t(e,t)}class hr{constructor(e){this.props=e,this.initHiddenDays()}buildPrev(e,t,n){let{dateEnv:r}=this.props,i=r.subtract(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(i,-1,n)}buildNext(e,t,n){let{dateEnv:r}=this.props,i=r.add(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(i,1,n)}build(e,t,n=!0){let r,i,s,o,a,l,{props:c}=this;var d,u;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(d=e,e=null!=(u=r).start&&d=u.end?new Date(u.end.valueOf()-1):d),i=this.buildCurrentRangeInfo(e,t),s=/^(year|month|week|day)$/.test(i.unit),o=this.buildRenderRange(this.trimHiddenDays(i.range),i.unit,s),o=this.trimHiddenDays(o),a=o,c.showNonCurrentDates||(a=rr(a,i.range)),a=this.adjustActiveRange(a),a=rr(a,r),l=sr(i.range,r),ar(o,e)||(e=o.start),{currentDate:e,validRange:r,currentRange:i.range,currentRangeUnit:i.unit,isRangeAllDay:s,activeRange:a,renderRange:o,slotMinTime:c.slotMinTime,slotMaxTime:c.slotMaxTime,isValid:l,dateIncrement:this.buildDateIncrement(i.duration)}}buildValidRange(){let e=this.props.validRangeInput,t="function"==typeof e?e.call(this.props.calendarApi,this.props.dateEnv.toDate(this.props.nowManager.getDateMarker())):e;return this.refineRange(t)||{start:null,end:null}}buildCurrentRangeInfo(e,t){let n,{props:r}=this,i=null,s=null,o=null;return r.duration?(i=r.duration,s=r.durationUnit,o=this.buildRangeFromDuration(e,t,i,s)):(n=this.props.dayCount)?(s="day",o=this.buildRangeFromDayCount(e,t,n)):(o=this.buildCustomVisibleRange(e))?s=r.dateEnv.greatestWholeUnit(o.start,o.end).unit:(i=this.getFallbackDuration(),s=Et(i).unit,o=this.buildRangeFromDuration(e,t,i,s)),{duration:i,unit:s,range:o}}getFallbackDuration(){return ft({day:1})}adjustActiveRange(e){let{dateEnv:t,usesMinMaxTime:n,slotMinTime:r,slotMaxTime:i}=this.props,{start:s,end:o}=e;return n&&(vt(r)<0&&(s=Mt(s),s=t.add(s,r)),vt(i)>1&&(o=Mt(o),o=wt(o,-1),o=t.add(o,i))),{start:s,end:o}}buildRangeFromDuration(e,t,n,r){let i,s,o,{dateEnv:a,dateAlignment:l}=this.props;if(!l){let{dateIncrement:e}=this.props;l=e&&yt(e)!o[e.defId].recurringDef);for(let e in o){let n=o[e];if(n.recurringDef){let{duration:o}=n.recurringDef;o||(o=n.allDay?s.defaultAllDayEventDuration:s.defaultTimedEventDuration);let l=pr(n,o,t,r,i.recurringTypes);for(let t of l){let n=fr(e,{start:t,end:r.add(t,o)});a[n.instanceId]=n}}}return{defs:o,instances:a}}function pr(e,t,n,r,i){let s=i[e.recurringDef.typeId].expand(e.recurringDef.typeData,{start:r.subtract(n.start,t),end:n.end},r);return e.allDay&&(s=s.map(Mt)),s}const mr={id:String,groupId:String,title:String,url:String,interactive:Boolean},vr={start:yn,end:yn,date:yn,allDay:Boolean},yr=Object.assign(Object.assign(Object.assign({},mr),vr),{extendedProps:yn});function br(e,t,n,r,i=Sr(n),s,o){let{refined:a,extra:l}=Er(e,n,i),c=function(e,t){let n=null;e&&(n=e.defaultAllDay);null==n&&(n=t.options.defaultAllDay);return n}(t,n),d=function(e,t,n,r){for(let i=0;i{return n=t,r=e,Boolean(n.groupId&&n.groupId===r.groupId);var n,r});return r.defs[t.defId]=t,r.instances[n.instanceId]=n,r}return{defs:{},instances:{}}}function Rr(){return{defs:{},instances:{}}}function xr(e,t){return{defs:Object.assign(Object.assign({},e.defs),t.defs),instances:Object.assign(Object.assign({},e.instances),t.instances)}}function _r(e,t){let n=Sn(e.defs,t),r=Sn(e.instances,e=>n[e.defId]);return{defs:n,instances:r}}function Tr(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}const kr={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:yn,overlap:yn,allow:yn,className:Tr,classNames:Tr,color:String,backgroundColor:String,borderColor:String,textColor:String},Mr={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function Ir(e,t){let n=function(e,t){return Array.isArray(e)?Dr(e,null,t,!0):"object"==typeof e&&e?Dr([e],null,t,!0):null!=e?String(e):null}(e.constraint,t);return{display:e.display||null,startEditable:null!=e.startEditable?e.startEditable:e.editable,durationEditable:null!=e.durationEditable?e.durationEditable:e.editable,constraints:null!=n?[n]:[],overlap:null!=e.overlap?e.overlap:null,allows:null!=e.allow?[e.allow]:[],backgroundColor:e.backgroundColor||e.color||"",borderColor:e.borderColor||e.color||"",textColor:e.textColor||"",classNames:(e.className||[]).concat(e.classNames||[])}}function Or(e){return e.reduce(Nr,Mr)}function Nr(e,t){return{display:null!=t.display?t.display:e.display,startEditable:null!=t.startEditable?t.startEditable:e.startEditable,durationEditable:null!=t.durationEditable?t.durationEditable:e.durationEditable,constraints:e.constraints.concat(t.constraints),overlap:"boolean"==typeof t.overlap?t.overlap:e.overlap,allows:e.allows.concat(t.allows),backgroundColor:t.backgroundColor||e.backgroundColor,borderColor:t.borderColor||e.borderColor,textColor:t.textColor||e.textColor,classNames:e.classNames.concat(t.classNames)}}const Pr={id:String,defaultAllDay:Boolean,url:String,format:String,events:yn,eventDataTransform:yn,success:yn,failure:yn};function Hr(e,t,n=Br(t)){let r;if("string"==typeof e?r={url:e}:"function"==typeof e||Array.isArray(e)?r={events:e}:"object"==typeof e&&e&&(r=e),r){let{refined:i,extra:s}=vn(r,n),o=function(e,t){let n=t.pluginHooks.eventSourceDefs;for(let t=n.length-1;t>=0;t-=1){let r=n[t].parseMeta(e);if(r)return{sourceDefId:t,meta:r}}return null}(i,t);if(o)return{_raw:e,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:i.defaultAllDay,eventDataTransform:i.eventDataTransform,success:i.success,failure:i.failure,publicId:i.id||"",sourceId:Ze(),sourceDefId:o.sourceDefId,meta:o.meta,ui:Ir(i,t),extendedProps:s}}return null}function Br(e){return Object.assign(Object.assign(Object.assign({},kr),Pr),e.pluginHooks.eventSourceRefiners)}function jr(e,t,n,r,i){switch(t.type){case"RECEIVE_EVENTS":return function(e,t,n,r,i,s){if(t&&n===t.latestFetchId){let n=Dr(zr(i,t,s),t,s);return r&&(n=gr(n,r,s)),xr(Wr(e,t.sourceId),n)}return e}(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,i);case"RESET_RAW_EVENTS":return function(e,t,n,r,i){const{defIdMap:s,instanceIdMap:o}=function(e){const{defs:t,instances:n}=e,r={},i={};for(let e in t){const n=t[e],{publicId:i}=n;i&&(r[i]=e)}for(let e in n){const r=n[e],s=t[r.defId],{publicId:o}=s;o&&(i[o]=e)}return{defIdMap:r,instanceIdMap:i}}(e);return gr(Dr(zr(n,t,i),t,i,!1,s,o),r,i)}(e,n[t.sourceId],t.rawEvents,r.activeRange,i);case"ADD_EVENTS":return function(e,t,n,r){n&&(t=gr(t,n,r));return xr(e,t)}(e,t.eventStore,r?r.activeRange:null,i);case"RESET_EVENTS":return t.eventStore;case"MERGE_EVENTS":return xr(e,t.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return r?gr(e,r.activeRange,i):e;case"REMOVE_EVENTS":return function(e,t){let{defs:n,instances:r}=e,i={},s={};for(let e in n)t.defs[e]||(i[e]=n[e]);for(let e in r)!t.instances[e]&&i[r[e].defId]&&(s[e]=r[e]);return{defs:i,instances:s}}(e,t.eventStore);case"REMOVE_EVENT_SOURCE":return Wr(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return _r(e,e=>!e.sourceId);case"REMOVE_ALL_EVENTS":return{defs:{},instances:{}};default:return e}}function zr(e,t,n){let r=n.options.eventDataTransform,i=t?t.eventDataTransform:null;return i&&(e=Ur(e,i)),r&&(e=Ur(e,r)),e}function Ur(e,t){let n;if(t){n=[];for(let r of e){let e=t(r);e?n.push(e):null==e&&n.push(r)}}else n=e;return n}function Lr(e,t,n){let{defs:r}=e,i=An(e.instances,e=>r[e.defId].allDay?e:Object.assign(Object.assign({},e),{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo}));return{defs:r,instances:i}}function Wr(e,t){return _r(e,e=>e.sourceId!==t)}class Fr{constructor(){this.handlers={},this.thisContext=null}setThisContext(e){this.thisContext=e}setOptions(e){this.options=e}on(e,t){!function(e,t,n){(e[t]||(e[t]=[])).push(n)}(this.handlers,e,t)}off(e,t){!function(e,t,n){n?e[t]&&(e[t]=e[t].filter(e=>e!==n)):delete e[t]}(this.handlers,e,t)}trigger(e,...t){let n=this.handlers[e]||[],r=this.options&&this.options[e],i=[].concat(r||[],n);for(let e of i)e.apply(this.thisContext,t)}hasHandlers(e){return Boolean(this.handlers[e]&&this.handlers[e].length||this.options&&this.options[e])}}const Vr={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function Gr(e,t){return Dr(function(e){let t;t=!0===e?[{}]:Array.isArray(e)?e.filter(e=>e.daysOfWeek):"object"==typeof e&&e?[e]:[];return t=t.map(e=>Object.assign(Object.assign({},Vr),e)),t}(e),null,t)}function Qr(e,t,n){n.emitter.trigger("select",Object.assign(Object.assign({},qr(e,n)),{jsEvent:t?t.origEvent:null,view:n.viewApi||n.calendarApi.view}))}function qr(e,t){let n={};for(let r of t.pluginHooks.dateSpanTransforms)Object.assign(n,r(e,t));var r,i;return Object.assign(n,(r=e,i=t.dateEnv,Object.assign(Object.assign({},Ai(r.range,i,r.allDay)),{allDay:r.allDay}))),n}function Yr(e,t,n){let{dateEnv:r,options:i}=n,s=t;return e?(s=Mt(s),s=r.add(s,i.defaultAllDayEventDuration)):s=r.add(s,i.defaultTimedEventDuration),s}function Zr(e,t,n,r){let i=oi(e.defs,t),s={defs:{},instances:{}};for(let t in e.defs){let o=e.defs[t];s.defs[t]=Xr(o,i[t],n,r)}for(let t in e.instances){let o=e.instances[t],a=s.defs[o.defId];s.instances[t]=$r(o,a,i[o.defId],n,r)}return s}function Xr(e,t,n,r){let i=n.standardProps||{};null==i.hasEnd&&t.durationEditable&&(n.startDelta||n.endDelta)&&(i.hasEnd=!0);let s=Object.assign(Object.assign(Object.assign({},e),i),{ui:Object.assign(Object.assign({},e.ui),i.ui)});n.extendedProps&&(s.extendedProps=Object.assign(Object.assign({},s.extendedProps),n.extendedProps));for(let e of r.pluginHooks.eventDefMutationAppliers)e(s,n,r);return!s.hasEnd&&r.options.forceEventDuration&&(s.hasEnd=!0),s}function $r(e,t,n,r,i){let{dateEnv:s}=i,o=r.standardProps&&!0===r.standardProps.allDay,a=r.standardProps&&!1===r.standardProps.hasEnd,l=Object.assign({},e);return o&&(l.range=lr(l.range)),r.datesDelta&&n.startEditable&&(l.range={start:s.add(l.range.start,r.datesDelta),end:s.add(l.range.end,r.datesDelta)}),r.startDelta&&n.durationEditable&&(l.range={start:s.add(l.range.start,r.startDelta),end:l.range.end}),r.endDelta&&n.durationEditable&&(l.range={start:l.range.start,end:s.add(l.range.end,r.endDelta)}),a&&(l.range={start:l.range.start,end:Yr(t.allDay,l.range.start,i)}),t.allDay&&(l.range={start:Mt(l.range.start),end:Mt(l.range.end)}),l.range.endai(e,t))}function ai(e,t){let n=[];return t[""]&&n.push(t[""]),t[e.defId]&&n.push(t[e.defId]),n.push(e.ui),Or(n)}function li(e,t){let n=e.map(ci);return n.sort((e,n)=>rt(e,n,t)),n.map(e=>e._seg)}function ci(e){let{eventRange:t}=e,n=t.def,r=t.instance?t.instance.range:t.range,i=r.start?r.start.valueOf():0,s=r.end?r.end.valueOf():0;return Object.assign(Object.assign(Object.assign({},n.extendedProps),n),{id:n.publicId,start:i,end:s,duration:s-i,allDay:Number(n.allDay),_seg:e})}function di(e,t){let{pluginHooks:n}=t,r=n.isDraggableTransformers,{def:i,ui:s}=e.eventRange,o=s.startEditable;for(let e of r)o=e(o,i,s,t);return o}function ui(e,t){return e.isStart&&e.eventRange.ui.durationEditable&&t.options.eventResizableFromStart}function hi(e,t){return e.isEnd&&e.eventRange.ui.durationEditable}function fi(e,t,n,r,i,s,o){let{dateEnv:a,options:l}=n,{displayEventTime:c,displayEventEnd:d}=l,u=e.eventRange.def,h=e.eventRange.instance;null==c&&(c=!1!==r),null==d&&(d=!1!==i);let f=h.range.start,g=h.range.end,p=s||e.start||e.eventRange.range.start,m=o||e.end||e.eventRange.range.end,v=Mt(f).valueOf()===Mt(p).valueOf(),y=Mt(Ct(g,-1)).valueOf()===Mt(Ct(m,-1)).valueOf();return c&&!u.allDay&&(v||y)?(p=v?f:p,m=y?g:m,d&&u.hasEnd?a.formatRange(p,m,t,{forcedStartTzo:s?null:h.forcedStartTzo,forcedEndTzo:o?null:h.forcedEndTzo}):a.format(p,t,{forcedTzo:s?null:h.forcedStartTzo})):""}function gi(e,t,n){let r=e.eventRange.range;return{isPast:r.end<=(n||t.start),isFuture:r.start>=(n||t.end),isToday:t&&ar(t,r.start)}}function pi(e){let t=["fc-event"];return e.isMirror&&t.push("fc-event-mirror"),e.isDraggable&&t.push("fc-event-draggable"),(e.isStartResizable||e.isEndResizable)&&t.push("fc-event-resizable"),e.isDragging&&t.push("fc-event-dragging"),e.isResizing&&t.push("fc-event-resizing"),e.isSelected&&t.push("fc-event-selected"),e.isStart&&t.push("fc-event-start"),e.isEnd&&t.push("fc-event-end"),e.isPast&&t.push("fc-event-past"),e.isToday&&t.push("fc-event-today"),e.isFuture&&t.push("fc-event-future"),t}function mi(e){return e.instance?e.instance.instanceId:`${e.def.defId}:${e.range.start.toISOString()}`}function vi(e,t){let{def:n,instance:r}=e.eventRange,{url:i}=n;if(i)return{href:i};let{emitter:s,options:o}=t,{eventInteractive:a}=o;return null==a&&(a=n.interactive,null==a&&(a=Boolean(s.hasHandlers("eventClick")))),a?qe(e=>{s.trigger("eventClick",{el:e.target,event:new Kr(t,n,r),jsEvent:e,view:t.viewApi})}):{}}const yi={start:yn,end:yn,allDay:Boolean};function bi(e,t,n){let r=function(e,t){let{refined:n,extra:r}=vn(e,yi),i=n.start?t.createMarkerMeta(n.start):null,s=n.end?t.createMarkerMeta(n.end):null,{allDay:o}=n;null==o&&(o=i&&i.isTimeUnspecified&&(!s||s.isTimeUnspecified));return Object.assign({range:{start:i?i.marker:null,end:s?s.marker:null},allDay:o},r)}(e,t),{range:i}=r;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return r}function Ei(e,t){return ir(e.range,t.range)&&e.allDay===t.allDay&&function(e,t){for(let n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}(e,t)}function Si(e,t,n){return Object.assign(Object.assign({},Ai(e,t,n)),{timeZone:t.timeZone})}function Ai(e,t,n){return{start:t.toDate(e.start),end:t.toDate(e.end),startStr:t.formatIso(e.start,{omitTime:n}),endStr:t.formatIso(e.end,{omitTime:n})}}function Di(e,t,n){let r=!1,i=function(e){r||(r=!0,t(e))},s=function(e){r||(r=!0,n(e))},o=e(i,s);o&&"function"==typeof o.then&&o.then(i,s)}class wi extends Error{constructor(e,t){super(e),this.response=t}}function Ci(e,t,n){const r={method:e=e.toUpperCase()};return"GET"===e?t+=(-1===t.indexOf("?")?"?":"&")+new URLSearchParams(n):(r.body=new URLSearchParams(n),r.headers={"Content-Type":"application/x-www-form-urlencoded"}),fetch(t,r).then(e=>{if(e.ok)return e.json().then(t=>[t,e],()=>{throw new wi("Failure parsing JSON",e)});throw new wi("Request failed",e)})}let Ri;function xi(){return null==Ri&&(Ri=function(){if("undefined"==typeof document)return!0;let e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.innerHTML="
          ",e.querySelector("table").style.height="100px",e.querySelector("div").style.height="100%",document.body.appendChild(e);let t=e.querySelector("div").offsetHeight>0;return document.body.removeChild(e),t}()),Ri}class _i extends Vn{constructor(){super(...arguments),this.state={forPrint:!1},this.handleBeforePrint=()=>{Bn(()=>{this.setState({forPrint:!0})})},this.handleAfterPrint=()=>{Bn(()=>{this.setState({forPrint:!1})})}}render(){let{props:e}=this,{options:t}=e,{forPrint:n}=this.state,r=n||"auto"===t.height||"auto"===t.contentHeight,i=r||null==t.height?"":t.height,s=["fc",n?"fc-media-print":"fc-media-screen","fc-direction-"+t.direction,e.theme.getClass("root")];return xi()||s.push("fc-liquid-hack"),e.children(s,i,r,n)}componentDidMount(){let{emitter:e}=this.props;e.on("_beforeprint",this.handleBeforePrint),e.on("_afterprint",this.handleAfterPrint)}componentWillUnmount(){let{emitter:e}=this.props;e.off("_beforeprint",this.handleBeforePrint),e.off("_afterprint",this.handleAfterPrint)}}class Ti{constructor(e){this.component=e.component,this.isHitComboAllowed=e.isHitComboAllowed||null}destroy(){}}function ki(e){return{[e.component.uid]:e}}const Mi={};class Ii extends D{constructor(e,t){super(e,t),this.handleRefresh=()=>{let e=this.computeTiming();e.state.nowDate.valueOf()!==this.state.nowDate.valueOf()&&this.setState(e.state),this.clearTimeout(),this.setTimeout(e.waitMs)},this.handleVisibilityChange=()=>{document.hidden||this.handleRefresh()},this.state=this.computeTiming().state}render(){let{props:e,state:t}=this;return e.children(t.nowDate,t.todayRange)}componentDidMount(){this.setTimeout(),this.context.nowManager.addResetListener(this.handleRefresh),document.addEventListener("visibilitychange",this.handleVisibilityChange)}componentDidUpdate(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())}componentWillUnmount(){this.clearTimeout(),this.context.nowManager.removeResetListener(this.handleRefresh),document.removeEventListener("visibilitychange",this.handleVisibilityChange)}computeTiming(){let{props:e,context:t}=this,n=t.nowManager.getDateMarker(),r=t.dateEnv.startOf(n,e.unit),i=t.dateEnv.add(r,ft(1,e.unit)).valueOf()-n.valueOf();return i=Math.min(864e5,i),{state:{nowDate:r,todayRange:Oi(r)},waitMs:i}}setTimeout(e=this.computeTiming().waitMs){this.timeoutId=setTimeout(()=>{const e=this.computeTiming();this.setState(e.state,()=>{this.setTimeout(e.waitMs)})},e)}clearTimeout(){this.timeoutId&&clearTimeout(this.timeoutId)}}function Oi(e){let t=Mt(e);return{start:t,end:wt(t,1)}}Ii.contextType=Ln;class Ni{getCurrentData(){return this.currentDataManager.getCurrentData()}dispatch(e){this.currentDataManager.dispatch(e)}get view(){return this.getCurrentData().viewApi}batchRendering(e){e()}updateSize(){this.trigger("_resize",!0)}setOption(e,t){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:t})}getOption(e){return this.currentDataManager.currentCalendarOptionsInput[e]}getAvailableLocaleCodes(){return Object.keys(this.getCurrentData().availableRawLocales)}on(e,t){let{currentDataManager:n}=this;n.currentCalendarOptionsRefiners[e]?n.emitter.on(e,t):console.warn(`Unknown listener name '${e}'`)}off(e,t){this.currentDataManager.emitter.off(e,t)}trigger(e,...t){this.currentDataManager.emitter.trigger(e,...t)}changeView(e,t){this.batchRendering(()=>{if(this.unselect(),t)if(t.start&&t.end)this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e}),this.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:t});else{let{dateEnv:n}=this.getCurrentData();this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e,dateMarker:n.createMarker(t)})}else this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e})})}zoomTo(e,t){let n;t=t||"day",n=this.getCurrentData().viewSpecs[t]||this.getUnitViewSpec(t),this.unselect(),n?this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:n.type,dateMarker:e}):this.dispatch({type:"CHANGE_DATE",dateMarker:e})}getUnitViewSpec(e){let t,n,{viewSpecs:r,toolbarConfig:i}=this.getCurrentData(),s=[].concat(i.header?i.header.viewsWithButtons:[],i.footer?i.footer.viewsWithButtons:[]);for(let e in r)s.push(e);for(t=0;t{this.dispatch({type:"REMOVE_EVENTS",eventStore:ei(e)})}})}getEventById(e){let t=this.getCurrentData(),{defs:n,instances:r}=t.eventStore;e=String(e);for(let i in n){let s=n[i];if(s.publicId===e){if(s.recurringDef)return new Kr(t,s,null);for(let e in r){let n=r[e];if(n.defId===s.defId)return new Kr(t,s,n)}}}return null}getEvents(){let e=this.getCurrentData();return ti(e.eventStore,e)}removeAllEvents(){this.dispatch({type:"REMOVE_ALL_EVENTS"})}getEventSources(){let e=this.getCurrentData(),t=e.eventSources,n=[];for(let r in t)n.push(new Jr(e,t[r]));return n}getEventSourceById(e){let t=this.getCurrentData(),n=t.eventSources;e=String(e);for(let r in n)if(n[r].publicId===e)return new Jr(t,n[r]);return null}addEventSource(e){let t=this.getCurrentData();if(e instanceof Jr)return t.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;let n=Hr(e,t);return n?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[n]}),new Jr(t,n)):null}removeAllEventSources(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})}refetchEvents(){this.dispatch({type:"FETCH_EVENT_SOURCES",isRefetch:!0})}scrollToTime(e){let t=ft(e);t&&this.trigger("_scrollRequest",{time:t})}}function Pi(e,t){return e.left>=t.left&&e.left=t.top&&e.topthis.eventUiBuilders[t]||Gt(Wi));for(let n in t){let c=t[n],d=s[n]||Ui,u=this.eventUiBuilders[n];l[n]={businessHours:c.businessHours||e.businessHours,dateSelection:r[n]||null,eventStore:d,eventUiBases:u(e.eventUiBases[""],c.ui,i[n]),eventSelection:d.instances[e.eventSelection]?e.eventSelection:"",eventDrag:o[n]||null,eventResize:a[n]||null}}return l}_splitDateSpan(e){let t={};if(e){let n=this.getKeysForDateSpan(e);for(let r of n)t[r]=e}return t}_getKeysForEventDefs(e){return An(e.defs,e=>this.getKeysForEventDef(e))}_splitEventStore(e,t){let{defs:n,instances:r}=e,i={};for(let e in n)for(let r of t[e])i[r]||(i[r]={defs:{},instances:{}}),i[r].defs[e]=n[e];for(let e in r){let n=r[e];for(let r of t[n.defId])i[r]&&(i[r].instances[e]=n)}return i}_splitIndividualUi(e,t){let n={};for(let r in e)if(r)for(let i of t[r])n[i]||(n[i]={}),n[i][r]=e[r];return n}_splitInteraction(e){let t={};if(e){let n=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),r=this._getKeysForEventDefs(e.mutatedEvents),i=this._splitEventStore(e.mutatedEvents,r),s=r=>{t[r]||(t[r]={affectedEvents:n[r]||Ui,mutatedEvents:i[r]||Ui,isEvent:e.isEvent})};for(let e in n)s(e);for(let e in i)s(e)}return t}}function Wi(e,t,n){let r=[];e&&r.push(e),t&&r.push(t);let i={"":Or(r)};return n&&Object.assign(i,n),i}function Fi(e,t,n,r){return{dow:e.getUTCDay(),isDisabled:Boolean(r&&(!r.activeRange||!ar(r.activeRange,e))),isOther:Boolean(r&&!ar(r.currentRange,e)),isToday:Boolean(t&&ar(t,e)),isPast:Boolean(n?en:!!t&&e>=t.end)}}function Vi(e,t){let n=["fc-day","fc-day-"+At[e.dow]];return e.isDisabled?n.push("fc-day-disabled"):(e.isToday&&(n.push("fc-day-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-day-past"),e.isFuture&&n.push("fc-day-future"),e.isOther&&n.push("fc-day-other")),n}const Gi=an({year:"numeric",month:"long",day:"numeric"}),Qi=an({week:"long"});function qi(e,t,n="day",r=!0){const{dateEnv:i,options:s,calendarApi:o}=e;let a=i.format(t,"week"===n?Qi:Gi);if(s.navLinks){let e=i.toDate(t);const l=e=>{let r="day"===n?s.navLinkDayClick:"week"===n?s.navLinkWeekClick:null;"function"==typeof r?r.call(o,i.toDate(t),e):("string"==typeof r&&(n=r),o.zoomTo(t,n))};return Object.assign({title:at(s.navLinkHint,[a,e],a),"data-navlink":""},r?Qe(l):{onClick:l})}return{"aria-label":a}}let Yi,Zi=null;function Xi(){return null===Zi&&(Zi=function(){let e=document.createElement("div");Be(e,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),e.innerHTML="
          ",document.body.appendChild(e);let t=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return Ie(e),t}()),Zi}function $i(){return Yi||(Yi=function(){let e=document.createElement("div");e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",e.style.left="-9999px",document.body.appendChild(e);let t=Ji(e);return document.body.removeChild(e),t}()),Yi}function Ji(e){return{x:e.offsetHeight-e.clientHeight,y:e.offsetWidth-e.clientWidth}}function Ki(e,t=!1){let n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,s=parseInt(n.borderTopWidth,10)||0,o=parseInt(n.borderBottomWidth,10)||0,a=Ji(e),l=a.y-r-i,c={borderLeft:r,borderRight:i,borderTop:s,borderBottom:o,scrollbarBottom:a.x-s-o,scrollbarLeft:0,scrollbarRight:0};return Xi()&&"rtl"===n.direction?c.scrollbarLeft=l:c.scrollbarRight=l,t&&(c.paddingLeft=parseInt(n.paddingLeft,10)||0,c.paddingRight=parseInt(n.paddingRight,10)||0,c.paddingTop=parseInt(n.paddingTop,10)||0,c.paddingBottom=parseInt(n.paddingBottom,10)||0),c}function es(e,t=!1,n){let r=n?e.getBoundingClientRect():ts(e),i=Ki(e,t),s={left:r.left+i.borderLeft+i.scrollbarLeft,right:r.right-i.borderRight-i.scrollbarRight,top:r.top+i.borderTop,bottom:r.bottom-i.borderBottom-i.scrollbarBottom};return t&&(s.left+=i.paddingLeft,s.right-=i.paddingRight,s.top+=i.paddingTop,s.bottom-=i.paddingBottom),s}function ts(e){let t=e.getBoundingClientRect();return{left:t.left+window.scrollX,top:t.top+window.scrollY,right:t.right+window.scrollX,bottom:t.bottom+window.scrollY}}function ns(e){let t=[];for(;e instanceof HTMLElement;){let n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}class rs{constructor(e,t,n,r){this.els=t;let i=this.originClientRect=e.getBoundingClientRect();n&&this.buildElHorizontals(i.left),r&&this.buildElVerticals(i.top)}buildElHorizontals(e){let t=[],n=[];for(let r of this.els){let i=r.getBoundingClientRect();t.push(i.left-e),n.push(i.right-e)}this.lefts=t,this.rights=n}buildElVerticals(e){let t=[],n=[];for(let r of this.els){let i=r.getBoundingClientRect();t.push(i.top-e),n.push(i.bottom-e)}this.tops=t,this.bottoms=n}leftToIndex(e){let t,{lefts:n,rights:r}=this,i=n.length;for(t=0;t=n[t]&&e=n[t]&&e0}canScrollHorizontally(){return this.getMaxScrollLeft()>0}canScrollUp(){return this.getScrollTop()>0}canScrollDown(){return this.getScrollTop()0}canScrollRight(){return this.getScrollLeft()e.thickness||1)){this.getEntryThickness=e,this.strictOrder=!1,this.allowReslicing=!1,this.maxCoord=-1,this.maxStackCnt=-1,this.levelCoords=[],this.entriesByLevel=[],this.stackCnts={}}addSegs(e){let t=[];for(let n of e)this.insertEntry(n,t);return t}insertEntry(e,t){let n=this.findInsertion(e);this.isInsertionValid(n,e)?this.insertEntryAt(e,n):this.handleInvalidInsertion(n,e,t)}isInsertionValid(e,t){return(-1===this.maxCoord||e.levelCoord+this.getEntryThickness(t)<=this.maxCoord)&&(-1===this.maxStackCnt||e.stackCnti.end&&this.insertEntry({index:e.index,thickness:e.thickness,span:{start:i.end,end:r.end}},n)}insertEntryAt(e,t){let{entriesByLevel:n,levelCoords:r}=this;-1===t.lateral?(gs(r,t.level,t.levelCoord),gs(n,t.level,[e])):gs(n[t.level],t.lateral,e),this.stackCnts[us(e)]=t.stackCnt}findInsertion(e){let{levelCoords:t,entriesByLevel:n,strictOrder:r,stackCnts:i}=this,s=t.length,o=0,a=-1,l=-1,c=null,d=0;for(let u=0;u=o+this.getEntryThickness(e))break;let h,f=n[u],g=ps(f,e.span.start,ds),p=g[0]+g[1];for(;(h=f[p])&&h.span.starto&&(o=e,c=h,a=u,l=p),e===o&&(d=Math.max(d,i[us(h)]+1)),p+=1}}let u=0;if(c)for(u=a+1;un(e[i-1]))return[i,0];for(;ro))return[s,1];r=s+1}}return[r,0]}class ms{constructor(e,t){this.emitter=new Fr}destroy(){}setMirrorIsVisible(e){}setMirrorNeedsRevert(e){}setAutoScrollEnabled(e){}}const vs={},ys={startTime:ft,duration:ft,create:Boolean,sourceId:String};function bs(e){let{refined:t,extra:n}=vn(e,ys);return{startTime:t.startTime||null,duration:t.duration||null,create:null==t.create||t.create,sourceId:t.sourceId,leftoverProps:n}}function Es(e,t){return an(!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"})}const Ss="fc-col-header-cell";function As(e){return e.text}class Ds extends Vn{render(){let{dateEnv:e,options:t,theme:n,viewApi:r}=this.context,{props:i}=this,{date:s,dateProfile:o}=i,a=Fi(s,i.todayRange,null,o),l=[Ss].concat(Vi(a,n)),c=e.format(s,i.dayHeaderFormat),d=!a.isDisabled&&i.colCnt>1?qi(this.context,s):{},u=e.toDate(s);e.namedTimeZoneImpl&&(u=Ct(u,36e5));let h=Object.assign(Object.assign(Object.assign({date:u,view:r},i.extraRenderProps),{text:c}),a);return p($n,{elTag:"th",elClasses:l,elAttrs:Object.assign({role:"columnheader",colSpan:i.colSpan,"data-date":a.isDisabled?void 0:Lt(s)},i.extraDataAttrs),renderProps:h,generatorName:"dayHeaderContent",customGenerator:t.dayHeaderContent,defaultGenerator:As,classNameGenerator:t.dayHeaderClassNames,didMount:t.dayHeaderDidMount,willUnmount:t.dayHeaderWillUnmount},e=>p("div",{className:"fc-scrollgrid-sync-inner"},!a.isDisabled&&p(e,{elTag:"a",elAttrs:d,elClasses:["fc-col-header-cell-cushion",i.isSticky&&"fc-sticky"]})))}}const ws=an({weekday:"long"});class Cs extends Vn{render(){let{props:e}=this,{dateEnv:t,theme:n,viewApi:r,options:i}=this.context,s=wt(new Date(2592e5),e.dow),o={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},a=t.format(s,e.dayHeaderFormat),l=Object.assign(Object.assign(Object.assign(Object.assign({date:s},o),{view:r}),e.extraRenderProps),{text:a});return p($n,{elTag:"th",elClasses:[Ss,...Vi(o,n),...e.extraClassNames||[]],elAttrs:Object.assign({role:"columnheader",colSpan:e.colSpan},e.extraDataAttrs),renderProps:l,generatorName:"dayHeaderContent",customGenerator:i.dayHeaderContent,defaultGenerator:As,classNameGenerator:i.dayHeaderClassNames,didMount:i.dayHeaderDidMount,willUnmount:i.dayHeaderWillUnmount},n=>p("div",{className:"fc-scrollgrid-sync-inner"},p(n,{elTag:"a",elClasses:["fc-col-header-cell-cushion",e.isSticky&&"fc-sticky"],elAttrs:{"aria-label":t.format(s,ws)}})))}}class Rs extends Vn{constructor(){super(...arguments),this.createDayHeaderFormatter=Gt(xs)}render(){let{context:e}=this,{dates:t,dateProfile:n,datesRepDistinctDays:r,renderIntro:i}=this.props,s=this.createDayHeaderFormatter(e.options.dayHeaderFormat,r,t.length);return p(Ii,{unit:"day"},(e,o)=>p("tr",{role:"row"},i&&i("day"),t.map(e=>r?p(Ds,{key:e.toISOString(),date:e,dateProfile:n,todayRange:o,colCnt:t.length,dayHeaderFormat:s}):p(Cs,{key:e.getUTCDay(),dow:e.getUTCDay(),dayHeaderFormat:s}))))}}function xs(e,t,n){return e||Es(t,n)}class _s{constructor(e,t){let n=e.start,{end:r}=e,i=[],s=[],o=-1;for(;n=t.length?t[t.length-1]+1:t[n]}}class Ts{constructor(e,t){let n,r,i,{dates:s}=e;if(t){for(r=s[0].getUTCDay(),n=1;n!p[e.instanceId])}),u=d.defs,h=d.instances,f=oi(u,e.eventUiBases);var g,p;for(let r in l){let o=l[r],g=o.range,p=c[o.defId],m=a[o.defId];if(!Hs(p.constraints,g,d,e.businessHours,t))return!1;let{eventOverlap:v}=t.options,y="function"==typeof v?v:null;for(let e in h){let n=h[e];if(sr(g,n.range)){if(!1===f[n.defId].overlap&&s.isEvent)return!1;if(!1===p.overlap)return!1;if(y&&!y(new Kr(t,u[n.defId],n),new Kr(t,m,o)))return!1}}let b=i.eventStore;for(let e of p.allows){let i,s=Object.assign(Object.assign({},n),{range:o.range,allDay:m.allDay}),a=b.defs[m.defId],l=b.instances[r];if(i=a?new Kr(t,a,l):new Kr(t,m),!e(qr(s,t),i))return!1}}return!0}(e,t,n,r))&&!(e.dateSelection&&!function(e,t,n,r){let i=e.eventStore,s=i.defs,o=i.instances,a=e.dateSelection,l=a.range,{selectionConfig:c}=t.getCurrentData();r&&(c=r(c));if(!Hs(c.constraints,l,i,e.businessHours,t))return!1;let{selectOverlap:d}=t.options,u="function"==typeof d?d:null;for(let e in o){let n=o[e];if(sr(l,n.range)){if(!1===c.overlap)return!1;if(u&&!u(new Kr(t,s[n.defId],n),null))return!1}}for(let e of c.allows){let r=Object.assign(Object.assign({},n),a);if(!e(qr(r,t),null))return!1}return!0}(e,t,n,r))}function Hs(e,t,n,r,i){for(let s of e)if(!zs(Bs(s,t,n,r,i),t))return!1;return!0}function Bs(e,t,n,r,i){return"businessHours"===e?js(gr(r,t,i)):"string"==typeof e?js(_r(n,t=>t.groupId===e)):"object"==typeof e&&e?js(gr(e,t,i)):[]}function js(e){let{instances:t}=e,n=[];for(let e in t)n.push(t[e].range);return n}function zs(e,t){for(let n of e)if(or(n,t))return!0;return!1}const Us=/^(visible|hidden)$/;class Ls extends Vn{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,Gn(this.props.elRef,e)}}render(){let{props:e}=this,{liquid:t,liquidIsAbsolute:n}=e,r=t&&n,i=["fc-scroller"];return t&&(n?i.push("fc-scroller-liquid-absolute"):i.push("fc-scroller-liquid")),p("div",{ref:this.handleEl,className:i.join(" "),style:{overflowX:e.overflowX,overflowY:e.overflowY,left:r&&-(e.overcomeLeft||0)||"",right:r&&-(e.overcomeRight||0)||"",bottom:r&&-(e.overcomeBottom||0)||"",marginLeft:!r&&-(e.overcomeLeft||0)||"",marginRight:!r&&-(e.overcomeRight||0)||"",marginBottom:!r&&-(e.overcomeBottom||0)||"",maxHeight:e.maxHeight||""}},e.children)}needsXScrolling(){if(Us.test(this.props.overflowX))return!1;let{el:e}=this,t=this.el.getBoundingClientRect().width-this.getYScrollbarWidth(),{children:n}=e;for(let e=0;et)return!0}return!1}needsYScrolling(){if(Us.test(this.props.overflowY))return!1;let{el:e}=this,t=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),{children:n}=e;for(let e=0;et)return!0}return!1}getXScrollbarWidth(){return Us.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight}getYScrollbarWidth(){return Us.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth}}class Ws{constructor(e){this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=(e,t)=>{let{depths:n,currentMap:r}=this,i=!1,s=!1;null!==e?(i=t in r,r[t]=e,n[t]=(n[t]||0)+1,s=!0):(n[t]-=1,n[t]||(delete r[t],delete this.callbackMap[t],i=!0)),this.masterCallback&&(i&&this.masterCallback(null,String(t)),s&&this.masterCallback(e,String(t)))}}createRef(e){let t=this.callbackMap[e];return t||(t=this.callbackMap[e]=t=>{this.handleValue(t,String(e))}),t}collect(e,t,n){return Tn(this.currentMap,e,t,n)}getAll(){return wn(this.currentMap)}}function Fs(e){let t=Pe(e,".fc-scrollgrid-shrink"),n=0;for(let e of t)n=Math.max(n,dt(e));return Math.ceil(n)}function Vs(e,t){return e.liquid&&t.liquid}function Gs(e,t){return null!=t.maxHeight||Vs(e,t)}function Qs(e,t,n,r){let{expandRows:i}=n;return"function"==typeof t.content?t.content(n):p("table",{role:"presentation",className:[t.tableClassName,e.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:n.tableMinWidth,width:n.clientWidth,height:i?n.clientHeight:""}},n.tableColGroupNode,p(r?"thead":"tbody",{role:"presentation"},"function"==typeof t.rowContent?t.rowContent(n):t.rowContent))}function qs(e,t){return St(e,t,Cn)}function Ys(e,t){let n=[];for(let r of e){let e=r.span||1;for(let i=0;ie,qs),this.renderMicroColGroup=Gt(Ys),this.scrollerRefs=new Ws,this.scrollerElRefs=new Ws(this._handleScrollerEl.bind(this)),this.state={shrinkWidth:null,forceYScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{}},this.handleSizing=()=>{this.safeSetState(Object.assign({shrinkWidth:this.computeShrinkWidth()},this.computeScrollerDims()))}}render(){let{props:e,state:t,context:n}=this,r=e.sections||[],i=this.processCols(e.cols),s=this.renderMicroColGroup(i,t.shrinkWidth),o=$s(e.liquid,n);e.collapsibleWidth&&o.push("fc-scrollgrid-collapsible");let a,l=r.length,c=0,d=[],u=[],h=[];for(;c{}},r);return p(r?"th":"td",{ref:n.elRef,role:"presentation"},p("div",{className:"fc-scroller-harness"+(c?" fc-scroller-harness-liquid":"")},p(Ls,{ref:this.scrollerRefs.createRef(u),elRef:this.scrollerElRefs.createRef(u),overflowY:d,overflowX:i.liquid?"hidden":"visible",maxHeight:e.maxHeight,liquid:c,liquidIsAbsolute:!0},h)))}_handleScrollerEl(e,t){let n=function(e,t){for(let n of e)if(n.key===t)return n;return null}(this.props.sections,t);n&&Gn(n.chunk.scrollerElRef,e)}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(){this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}computeShrinkWidth(){return Xs(this.props.cols)?Fs(this.scrollerElRefs.getAll()):0}computeScrollerDims(){let e=$i(),{scrollerRefs:t,scrollerElRefs:n}=this,r=!1,i={},s={};for(let e in t.currentMap){let n=t.currentMap[e];if(n&&n.needsYScrolling()){r=!0;break}}for(let t of this.props.sections){let o=t.key,a=n.currentMap[o];if(a){let t=a.parentNode;i[o]=Math.floor(t.getBoundingClientRect().width-(r?e.y:0)),s[o]=Math.floor(t.getBoundingClientRect().height)}}return{forceYScrollbars:r,scrollerClientWidths:i,scrollerClientHeights:s}}}no.addStateEquality({scrollerClientWidths:Cn,scrollerClientHeights:Cn});class ro extends Vn{constructor(){super(...arguments),this.buildPublicEvent=Gt((e,t,n)=>new Kr(e,t,n)),this.handleEl=e=>{this.el=e,Gn(this.props.elRef,e),e&&ii(e,this.props.seg)}}render(){const{props:e,context:t}=this,{options:n}=t,{seg:r}=e,{eventRange:i}=r,{ui:s}=i,o={event:this.buildPublicEvent(t,i.def,i.instance),view:t.viewApi,timeText:e.timeText,textColor:s.textColor,backgroundColor:s.backgroundColor,borderColor:s.borderColor,isDraggable:!e.disableDragging&&di(r,t),isStartResizable:!e.disableResizing&&ui(r,t),isEndResizable:!e.disableResizing&&hi(r),isMirror:Boolean(e.isDragging||e.isResizing||e.isDateSelecting),isStart:Boolean(r.isStart),isEnd:Boolean(r.isEnd),isPast:Boolean(e.isPast),isFuture:Boolean(e.isFuture),isToday:Boolean(e.isToday),isSelected:Boolean(e.isSelected),isDragging:Boolean(e.isDragging),isResizing:Boolean(e.isResizing)};return p($n,{elRef:this.handleEl,elTag:e.elTag,elAttrs:e.elAttrs,elClasses:[...pi(o),...r.eventRange.ui.classNames,...e.elClasses||[]],elStyle:e.elStyle,renderProps:o,generatorName:"eventContent",customGenerator:n.eventContent,defaultGenerator:e.defaultGenerator,classNameGenerator:n.eventClassNames,didMount:n.eventDidMount,willUnmount:n.eventWillUnmount},e.children)}componentDidUpdate(e){this.el&&this.props.seg!==e.seg&&ii(this.el,this.props.seg)}}class io extends Vn{render(){let{props:e,context:t}=this,{options:n}=t,{seg:r}=e,{ui:i}=r.eventRange,s=fi(r,n.eventTimeFormat||e.defaultTimeFormat,t,e.defaultDisplayEventTime,e.defaultDisplayEventEnd);return p(ro,Object.assign({},e,{elTag:"a",elStyle:{borderColor:i.borderColor,backgroundColor:i.backgroundColor},elAttrs:vi(r,t),defaultGenerator:so,timeText:s}),(e,t)=>p(y,null,p(e,{elTag:"div",elClasses:["fc-event-main"],elStyle:{color:t.textColor}}),Boolean(t.isStartResizable)&&p("div",{className:"fc-event-resizer fc-event-resizer-start"}),Boolean(t.isEndResizable)&&p("div",{className:"fc-event-resizer fc-event-resizer-end"})))}}function so(e){return p("div",{className:"fc-event-main-frame"},e.timeText&&p("div",{className:"fc-event-time"},e.timeText),p("div",{className:"fc-event-title-container"},p("div",{className:"fc-event-title fc-sticky"},e.event.title||p(y,null," "))))}io.addPropsEquality({seg:Cn});const oo=e=>p(Ln.Consumer,null,t=>{let{options:n}=t,r={isAxis:e.isAxis,date:t.dateEnv.toDate(e.date),view:t.viewApi};return p($n,{elRef:e.elRef,elTag:e.elTag||"div",elAttrs:e.elAttrs,elClasses:e.elClasses,elStyle:e.elStyle,renderProps:r,generatorName:"nowIndicatorContent",customGenerator:n.nowIndicatorContent,classNameGenerator:n.nowIndicatorClassNames,didMount:n.nowIndicatorDidMount,willUnmount:n.nowIndicatorWillUnmount},e.children)}),ao=an({day:"numeric"});class lo extends Vn{constructor(){super(...arguments),this.refineRenderProps=Qt(uo)}render(){let{props:e,context:t}=this,{options:n}=t,r=this.refineRenderProps({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,isMonthStart:e.isMonthStart||!1,showDayNumber:e.showDayNumber,extraRenderProps:e.extraRenderProps,viewApi:t.viewApi,dateEnv:t.dateEnv,monthStartFormat:n.monthStartFormat});return p($n,{elRef:e.elRef,elTag:e.elTag,elAttrs:Object.assign(Object.assign({},e.elAttrs),r.isDisabled?{}:{"data-date":Lt(e.date)}),elClasses:[...Vi(r,t.theme),...e.elClasses||[]],elStyle:e.elStyle,renderProps:r,generatorName:"dayCellContent",customGenerator:n.dayCellContent,defaultGenerator:e.defaultGenerator,classNameGenerator:r.isDisabled?void 0:n.dayCellClassNames,didMount:n.dayCellDidMount,willUnmount:n.dayCellWillUnmount},e.children)}}function co(e){return Boolean(e.dayCellContent||qn("dayCellContent",e))}function uo(e){let{date:t,dateEnv:n,dateProfile:r,isMonthStart:i}=e,s=Fi(t,e.todayRange,null,r),o=e.showDayNumber?n.format(t,i?e.monthStartFormat:ao):"";return Object.assign(Object.assign(Object.assign({date:n.toDate(t),view:e.viewApi},s),{isMonthStart:i,dayNumberText:o}),e.extraRenderProps)}class ho extends Vn{render(){let{props:e}=this,{seg:t}=e;return p(ro,{elTag:"div",elClasses:["fc-bg-event"],elStyle:{backgroundColor:t.eventRange.ui.backgroundColor},defaultGenerator:fo,seg:t,timeText:"",isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday,disableDragging:!0,disableResizing:!0})}}function fo(e){let{title:t}=e.event;return t&&p("div",{className:"fc-event-title"},e.event.title)}function go(e){return p("div",{className:"fc-"+e})}const po=e=>p(Ln.Consumer,null,t=>{let{dateEnv:n,options:r}=t,{date:i}=e,s=r.weekNumberFormat||e.defaultFormat,o={num:n.computeWeekNumber(i),text:n.format(i,s),date:i};return p($n,{elRef:e.elRef,elTag:e.elTag,elAttrs:e.elAttrs,elClasses:e.elClasses,elStyle:e.elStyle,renderProps:o,generatorName:"weekNumberContent",customGenerator:r.weekNumberContent,defaultGenerator:mo,classNameGenerator:r.weekNumberClassNames,didMount:r.weekNumberDidMount,willUnmount:r.weekNumberWillUnmount},e.children)});function mo(e){return e.text}class vo extends Vn{constructor(){super(...arguments),this.state={titleId:Le()},this.handleRootEl=e=>{this.rootEl=e,this.props.elRef&&Gn(this.props.elRef,e)},this.handleDocumentMouseDown=e=>{const t=ze(e);this.rootEl.contains(t)||this.handleCloseClick()},this.handleDocumentKeyDown=e=>{"Escape"===e.key&&this.handleCloseClick()},this.handleCloseClick=()=>{let{onClose:e}=this.props;e&&e()}}render(){let{theme:e,options:t}=this.context,{props:n,state:r}=this,i=["fc-popover",e.getClass("popover")].concat(n.extraClassNames||[]);return fe(p("div",Object.assign({},n.extraAttrs,{id:n.id,className:i.join(" "),"aria-labelledby":r.titleId,ref:this.handleRootEl}),p("div",{className:"fc-popover-header "+e.getClass("popoverHeader")},p("span",{className:"fc-popover-title",id:r.titleId},n.title),p("span",{className:"fc-popover-close "+e.getIconClass("close"),title:t.closeHint,onClick:this.handleCloseClick})),p("div",{className:"fc-popover-body "+e.getClass("popoverContent")},n.children)),n.parentEl)}componentDidMount(){document.addEventListener("mousedown",this.handleDocumentMouseDown),document.addEventListener("keydown",this.handleDocumentKeyDown),this.updateSize()}componentWillUnmount(){document.removeEventListener("mousedown",this.handleDocumentMouseDown),document.removeEventListener("keydown",this.handleDocumentKeyDown)}updateSize(){let{isRtl:e}=this.context,{alignmentEl:t,alignGridTop:n}=this.props,{rootEl:r}=this,i=function(e){let t=ns(e),n=e.getBoundingClientRect();for(let e of t){let t=Hi(n,e.getBoundingClientRect());if(!t)return null;n=t}return n}(t);if(i){let s=r.getBoundingClientRect(),o=n?Oe(t,".fc-scrollgrid").getBoundingClientRect().top:i.top,a=e?i.right-s.width:i.left;o=Math.max(o,10),a=Math.min(a,document.documentElement.clientWidth-10-s.width),a=Math.max(a,10);let l=r.offsetParent.getBoundingClientRect();Be(r,{top:o-l.top,left:a-l.left})}}}class yo extends ls{constructor(){super(...arguments),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,useEventCenter:!1}):this.context.unregisterInteractiveComponent(this)}}render(){let{options:e,dateEnv:t}=this.context,{props:n}=this,{startDate:r,todayRange:i,dateProfile:s}=n,o=t.format(r,e.dayPopoverFormat);return p(lo,{elRef:this.handleRootEl,date:r,dateProfile:s,todayRange:i},(t,r,i)=>p(vo,{elRef:i.ref,id:n.id,title:o,extraClassNames:["fc-more-popover"].concat(i.className||[]),extraAttrs:i,parentEl:n.parentEl,alignmentEl:n.alignmentEl,alignGridTop:n.alignGridTop,onClose:n.onClose},co(e)&&p(t,{elTag:"div",elClasses:["fc-more-popover-misc"]}),n.children))}queryHit(e,t,n,r){let{rootEl:i,props:s}=this;return e>=0&&e=0&&t{this.linkEl=e,this.props.elRef&&Gn(this.props.elRef,e)},this.handleClick=e=>{let{props:t,context:n}=this,{moreLinkClick:r}=n.options,i=So(t).start;function s(e){let{def:t,instance:r,range:i}=e.eventRange;return{event:new Kr(n,t,r),start:n.dateEnv.toDate(i.start),end:n.dateEnv.toDate(i.end),isStart:e.isStart,isEnd:e.isEnd}}"function"==typeof r&&(r=r({date:i,allDay:Boolean(t.allDayDate),allSegs:t.allSegs.map(s),hiddenSegs:t.hiddenSegs.map(s),jsEvent:e,view:n.viewApi})),r&&"popover"!==r?"string"==typeof r&&n.calendarApi.zoomTo(i,r):this.setState({isPopoverOpen:!0})},this.handlePopoverClose=()=>{this.setState({isPopoverOpen:!1})}}render(){let{props:e,state:t}=this;return p(Ln.Consumer,null,n=>{let{viewApi:r,options:i,calendarApi:s}=n,{moreLinkText:o}=i,{moreCnt:a}=e,l=So(e),c="function"==typeof o?o.call(s,a):`+${a} ${o}`,d=at(i.moreLinkHint,[a],c),u={num:a,shortText:"+"+a,text:c,view:r};return p(y,null,Boolean(e.moreCnt)&&p($n,{elTag:e.elTag||"a",elRef:this.handleLinkEl,elClasses:[...e.elClasses||[],"fc-more-link"],elStyle:e.elStyle,elAttrs:Object.assign(Object.assign(Object.assign({},e.elAttrs),Qe(this.handleClick)),{title:d,"aria-expanded":t.isPopoverOpen,"aria-controls":t.isPopoverOpen?t.popoverId:""}),renderProps:u,generatorName:"moreLinkContent",customGenerator:i.moreLinkContent,defaultGenerator:e.defaultGenerator||Eo,classNameGenerator:i.moreLinkClassNames,didMount:i.moreLinkDidMount,willUnmount:i.moreLinkWillUnmount},e.children),t.isPopoverOpen&&p(yo,{id:t.popoverId,startDate:l.start,endDate:l.end,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:e.extraDateSpan,parentEl:this.parentEl,alignmentEl:e.alignmentElRef?e.alignmentElRef.current:this.linkEl,alignGridTop:e.alignGridTop,forceTimed:e.forceTimed,onClose:this.handlePopoverClose},e.popoverContent()))})}componentDidMount(){this.updateParentEl()}componentDidUpdate(){this.updateParentEl()}updateParentEl(){this.linkEl&&(this.parentEl=Oe(this.linkEl,".fc-view-harness"))}}function Eo(e){return e.text}function So(e){if(e.allDayDate)return{start:e.allDayDate,end:wt(e.allDayDate,1)};let{hiddenSegs:t}=e;return{start:Ao(t),end:(n=t,n.reduce(wo).eventRange.range.end)};var n}function Ao(e){return e.reduce(Do).eventRange.range.start}function Do(e,t){return e.eventRange.range.startt.eventRange.range.end?e:t}var Co={__proto__:null,BASE_OPTION_DEFAULTS:cn,BaseComponent:Vn,BgEvent:ho,CalendarImpl:Ni,CalendarRoot:_i,ContentContainer:$n,CustomRenderingStore:class extends class{constructor(){this.handlers=[]}set(e){this.currentValue=e;for(let t of this.handlers)t(e)}subscribe(e){this.handlers.push(e),void 0!==this.currentValue&&e(this.currentValue)}}{constructor(){super(...arguments),this.map=new Map}handle(e){const{map:t}=this;let n=!1;e.isActive?(t.set(e.id,e),n=!0):t.has(e.id)&&(t.delete(e.id),n=!0),n&&this.set(t)}},DateComponent:ls,DateEnv:Pn,DateProfileGenerator:hr,DayCellContainer:lo,DayHeader:Rs,DaySeriesModel:_s,DayTableModel:Ts,DelayedRunner:Me,ElementDragging:ms,ElementScrollController:os,Emitter:Fr,EventContainer:ro,EventImpl:Kr,Interaction:Ti,MoreLinkContainer:bo,NamedTimeZoneImpl:class{constructor(e){this.timeZoneName=e}},NowIndicatorContainer:oo,NowTimer:Ii,PositionCache:rs,RefMap:Ws,ScrollController:ss,ScrollResponder:Un,Scroller:Ls,SegHierarchy:cs,SimpleScrollGrid:no,Slicer:ks,Splitter:Li,StandardEvent:io,TableDateCell:Ds,TableDowCell:Cs,Theme:Hn,ViewContainer:Kn,ViewContextType:Ln,WeekNumberContainer:po,WindowScrollController:as,addDays:wt,addDurations:pt,addMs:Ct,addWeeks:Dt,allowContextMenu:tt,allowSelection:Ke,applyMutationToEventStore:Zr,applyStyle:Be,asCleanDays:function(e){return e.years||e.months||e.milliseconds?0:e.days},asRoughMinutes:function(e){return yt(e)/6e4},asRoughMs:yt,asRoughSeconds:function(e){return yt(e)/1e3},binarySearch:ps,buildElAttrs:Yn,buildEntryKey:us,buildEventApis:ti,buildEventRangeKey:mi,buildIsoString:Ut,buildNavLinkAttrs:qi,buildSegTimeText:fi,collectFromHash:Tn,combineEventUis:Or,compareByFieldSpecs:rt,compareNumbers:lt,compareObjs:xn,computeEarliestSegStart:Ao,computeEdges:Ki,computeFallbackHeaderFormat:Es,computeInnerRect:es,computeRect:ts,computeShrinkWidth:Fs,computeVisibleDayRange:cr,config:vs,constrainPoint:Bi,createDuration:ft,createEmptyEventStore:Rr,createEventInstance:fr,createEventUi:Ir,createFormatter:an,diffDates:ur,diffDayAndTime:_t,diffDays:xt,diffPoints:zi,diffWeeks:Rt,diffWholeDays:kt,diffWholeWeeks:Tt,disableCursor:Xe,elementClosest:Oe,elementMatches:Ne,enableCursor:$e,eventTupleToStore:wr,filterHash:Sn,findDirectChildren:function(e,t){let n=e instanceof HTMLElement?[e]:e,r=[];for(let e=0;e{let o=r.length,a=s.length,l=0;for(;l{let o={};for(let a in s)if(i[a])if(St(r[a],s[a]))o[a]=i[a];else{n&&n(i[a]);let r=e.apply(this,s[a]);o[a]=t&&t(r,i[a])?i[a]:r}else o[a]=e.apply(this,s[a]);return r=s,i=o,o}},memoizeObjArg:Qt,mergeEventStores:xr,multiplyDuration:mt,padStart:ot,parseBusinessHours:Gr,parseClassNames:Tr,parseDragMeta:bs,parseEventDef:Ar,parseFieldSpecs:nt,parseMarker:Nn,pointInsideRect:Pi,preventContextMenu:et,preventDefault:We,preventSelection:Je,rangeContainsMarker:ar,rangeContainsRange:or,rangesEqual:ir,rangesIntersect:sr,refineEventDef:Er,refineProps:vn,removeElement:Ie,removeExact:function(e,t){let n=0,r=0;for(;r2&&(a.children=arguments.length>3?t.call(arguments,2):r),m(e.type,a,i||e.key,s||e.ref,null)},createElement:p,createRef:v,h:p,hydrate:function e(t,n){U(t,n,e)},get isValidElement(){return i},get options(){return n},render:U,toChildArray:M};const xo=[],_o={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"},To=Object.assign(Object.assign({},_o),{buttonHints:{prev:"Previous $0",next:"Next $0",today:(e,t)=>"day"===t?"Today":"This "+e},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`});function ko(e){let t=e.length>0?e[0].code:"en",n=xo.concat(e),r={en:To};for(let e of n)r[e.code]=e;return{map:r,defaultCode:t}}function Mo(e,t){return"object"!=typeof e||Array.isArray(e)?function(e,t){let n=[].concat(e||[]),r=function(e,t){for(let n=0;n0;e-=1){let n=r.slice(0,e).join("-");if(t[n])return t[n]}}return null}(n,t)||To;return Io(e,n,r)}(e,t):Io(e.code,[e.code],e)}function Io(e,t,n){let r=En([_o,n],["buttonText"]);delete r.code;let{week:i}=r;return delete r.week,{codeArg:e,codes:t,week:i,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}function Oo(e){return{id:Ze(),name:e.name,premiumReleaseDate:e.premiumReleaseDate?new Date(e.premiumReleaseDate):void 0,deps:e.deps||[],reducers:e.reducers||[],isLoadingFuncs:e.isLoadingFuncs||[],contextInit:[].concat(e.contextInit||[]),eventRefiners:e.eventRefiners||{},eventDefMemberAdders:e.eventDefMemberAdders||[],eventSourceRefiners:e.eventSourceRefiners||{},isDraggableTransformers:e.isDraggableTransformers||[],eventDragMutationMassagers:e.eventDragMutationMassagers||[],eventDefMutationAppliers:e.eventDefMutationAppliers||[],dateSelectionTransformers:e.dateSelectionTransformers||[],datePointTransforms:e.datePointTransforms||[],dateSpanTransforms:e.dateSpanTransforms||[],views:e.views||{},viewPropsTransformers:e.viewPropsTransformers||[],isPropsValid:e.isPropsValid||null,externalDefTransforms:e.externalDefTransforms||[],viewContainerAppends:e.viewContainerAppends||[],eventDropTransformers:e.eventDropTransformers||[],componentInteractions:e.componentInteractions||[],calendarInteractions:e.calendarInteractions||[],themeClasses:e.themeClasses||{},eventSourceDefs:e.eventSourceDefs||[],cmdFormatter:e.cmdFormatter,recurringTypes:e.recurringTypes||[],namedTimeZonedImpl:e.namedTimeZonedImpl,initialView:e.initialView||"",elementDraggingImpl:e.elementDraggingImpl,optionChangeHandlers:e.optionChangeHandlers||{},scrollGridImpl:e.scrollGridImpl||null,listenerRefiners:e.listenerRefiners||{},optionRefiners:e.optionRefiners||{},propSetHandlers:e.propSetHandlers||{}}}function No(){let e,t=[],n=[];return(r,i)=>(e&&St(r,t)&&St(i,n)||(e=function(e,t){let n={},r={premiumReleaseDate:void 0,reducers:[],isLoadingFuncs:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function i(e){for(let o of e){const e=o.name,a=n[e];void 0===a?(n[e]=o.id,i(o.deps),s=o,r={premiumReleaseDate:Po((t=r).premiumReleaseDate,s.premiumReleaseDate),reducers:t.reducers.concat(s.reducers),isLoadingFuncs:t.isLoadingFuncs.concat(s.isLoadingFuncs),contextInit:t.contextInit.concat(s.contextInit),eventRefiners:Object.assign(Object.assign({},t.eventRefiners),s.eventRefiners),eventDefMemberAdders:t.eventDefMemberAdders.concat(s.eventDefMemberAdders),eventSourceRefiners:Object.assign(Object.assign({},t.eventSourceRefiners),s.eventSourceRefiners),isDraggableTransformers:t.isDraggableTransformers.concat(s.isDraggableTransformers),eventDragMutationMassagers:t.eventDragMutationMassagers.concat(s.eventDragMutationMassagers),eventDefMutationAppliers:t.eventDefMutationAppliers.concat(s.eventDefMutationAppliers),dateSelectionTransformers:t.dateSelectionTransformers.concat(s.dateSelectionTransformers),datePointTransforms:t.datePointTransforms.concat(s.datePointTransforms),dateSpanTransforms:t.dateSpanTransforms.concat(s.dateSpanTransforms),views:Object.assign(Object.assign({},t.views),s.views),viewPropsTransformers:t.viewPropsTransformers.concat(s.viewPropsTransformers),isPropsValid:s.isPropsValid||t.isPropsValid,externalDefTransforms:t.externalDefTransforms.concat(s.externalDefTransforms),viewContainerAppends:t.viewContainerAppends.concat(s.viewContainerAppends),eventDropTransformers:t.eventDropTransformers.concat(s.eventDropTransformers),calendarInteractions:t.calendarInteractions.concat(s.calendarInteractions),componentInteractions:t.componentInteractions.concat(s.componentInteractions),themeClasses:Object.assign(Object.assign({},t.themeClasses),s.themeClasses),eventSourceDefs:t.eventSourceDefs.concat(s.eventSourceDefs),cmdFormatter:s.cmdFormatter||t.cmdFormatter,recurringTypes:t.recurringTypes.concat(s.recurringTypes),namedTimeZonedImpl:s.namedTimeZonedImpl||t.namedTimeZonedImpl,initialView:t.initialView||s.initialView,elementDraggingImpl:t.elementDraggingImpl||s.elementDraggingImpl,optionChangeHandlers:Object.assign(Object.assign({},t.optionChangeHandlers),s.optionChangeHandlers),scrollGridImpl:s.scrollGridImpl||t.scrollGridImpl,listenerRefiners:Object.assign(Object.assign({},t.listenerRefiners),s.listenerRefiners),optionRefiners:Object.assign(Object.assign({},t.optionRefiners),s.optionRefiners),propSetHandlers:Object.assign(Object.assign({},t.propSetHandlers),s.propSetHandlers)}):a!==o.id&&console.warn(`Duplicate plugin '${e}'`)}var t,s}return e&&i(e),i(t),r}(r,i)),t=r,n=i,e)}function Po(e,t){return void 0===e?t:void 0===t?e:new Date(Math.max(e.valueOf(),t.valueOf()))}class Ho extends Hn{}function Bo(e,t,n,r){if(t[e])return t[e];let i=function(e,t,n,r){let i=n[e],s=r[e],o=e=>i&&null!==i[e]?i[e]:s&&null!==s[e]?s[e]:null,a=o("component"),l=o("superType"),c=null;if(l){if(l===e)throw new Error("Can't have a custom view type that references itself");c=Bo(l,t,n,r)}!a&&c&&(a=c.component);if(!a)return null;return{type:e,component:a,defaults:Object.assign(Object.assign({},c?c.defaults:{}),i?i.rawOptions:{}),overrides:Object.assign(Object.assign({},c?c.overrides:{}),s?s.rawOptions:{})}}(e,t,n,r);return i&&(t[e]=i),i}function jo(e){return An(e,zo)}function zo(e){let t="function"==typeof e?{component:e}:e,{component:n}=t;return t.content?n=Uo(t):!n||n.prototype instanceof Vn||(n=Uo(Object.assign(Object.assign({},t),{content:n}))),{superType:t.type,component:n,rawOptions:t}}function Uo(e){return t=>p(Ln.Consumer,null,n=>p($n,{elTag:"div",elClasses:er(n.viewSpec),renderProps:Object.assign(Object.assign({},t),{nextDayThreshold:n.options.nextDayThreshold}),generatorName:void 0,customGenerator:e.content,classNameGenerator:e.classNames,didMount:e.didMount,willUnmount:e.willUnmount}))}function Lo(e,t,n,r){let i=jo(e),s=jo(t.views);return An(function(e,t){let n,r={};for(n in e)Bo(n,r,e,t);for(n in t)Bo(n,r,e,t);return r}(i,s),e=>function(e,t,n,r,i){let s=e.overrides.duration||e.defaults.duration||r.duration||n.duration,o=null,a="",l="",c={};if(s&&(o=function(e){let t=JSON.stringify(e),n=Wo[t];void 0===n&&(n=ft(e),Wo[t]=n);return n}(s),o)){let e=Et(o);a=e.unit,1===e.value&&(l=a,c=t[a]?t[a].rawOptions:{})}let d=t=>{let n=t.buttonText||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[l]?n[l]:null},u=t=>{let n=t.buttonHints||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[l]?n[l]:null};return{type:e.type,component:e.component,duration:o,durationUnit:a,singleUnit:l,optionDefaults:e.defaults,optionOverrides:Object.assign(Object.assign({},c),e.overrides),buttonTextOverride:d(r)||d(n)||e.overrides.buttonText,buttonTextDefault:d(i)||e.defaults.buttonText||d(cn)||e.type,buttonTitleOverride:u(r)||u(n)||e.overrides.buttonHint,buttonTitleDefault:u(i)||e.defaults.buttonHint||u(cn)}}(e,s,t,n,r))}Ho.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"},Ho.prototype.baseIconClass="fc-icon",Ho.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"},Ho.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"},Ho.prototype.iconOverrideOption="buttonIcons",Ho.prototype.iconOverrideCustomButtonOption="icon",Ho.prototype.iconOverridePrefix="fc-icon-";let Wo={};function Fo(e,t,n){let r=t?t.activeRange:null;return Qo({},function(e,t){let n=Br(t),r=[].concat(e.eventSources||[]),i=[];e.initialEvents&&r.unshift(e.initialEvents);e.events&&r.unshift(e.events);for(let e of r){let r=Hr(e,t,n);r&&i.push(r)}return i}(e,n),r,n)}function Vo(e,t,n,r){let i=n?n.activeRange:null;switch(t.type){case"ADD_EVENT_SOURCES":return Qo(e,t.sources,i,r);case"REMOVE_EVENT_SOURCE":return s=e,o=t.sourceId,Sn(s,e=>e.sourceId!==o);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return n?qo(e,i,r):e;case"FETCH_EVENT_SOURCES":return Yo(e,t.sourceIds?Dn(t.sourceIds):Xo(e,r),i,t.isRefetch||!1,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return function(e,t,n,r){let i=e[t];if(i&&n===i.latestFetchId)return Object.assign(Object.assign({},e),{[t]:Object.assign(Object.assign({},i),{isFetching:!1,fetchRange:r})});return e}(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}var s,o}function Go(e){for(let t in e)if(e[t].isFetching)return!0;return!1}function Qo(e,t,n,r){let i={};for(let e of t)i[e.sourceId]=e;return n&&(i=qo(i,n,r)),Object.assign(Object.assign({},e),i)}function qo(e,t,n){return Yo(e,Sn(e,e=>function(e,t,n){if(!$o(e,n))return!e.latestFetchId;return!n.options.lazyFetching||!e.fetchRange||e.isFetching||t.starte.fetchRange.end}(e,t,n)),t,!1,n)}function Yo(e,t,n,r,i){let s={};for(let o in e){let a=e[o];t[o]?s[o]=Zo(a,n,r,i):s[o]=a}return s}function Zo(e,t,n,r){let{options:i,calendarApi:s}=r,o=r.pluginHooks.eventSourceDefs[e.sourceDefId],a=Ze();return o.fetch({eventSource:e,range:t,isRefetch:n,context:r},n=>{let{rawEvents:o}=n;i.eventSourceSuccess&&(o=i.eventSourceSuccess.call(s,o,n.response)||o),e.success&&(o=e.success.call(s,o,n.response)||o),r.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:a,fetchRange:t,rawEvents:o})},n=>{let o=!1;i.eventSourceFailure&&(i.eventSourceFailure.call(s,n),o=!0),e.failure&&(e.failure(n),o=!0),o||console.warn(n.message,n),r.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:a,fetchRange:t,error:n})}),Object.assign(Object.assign({},e),{isFetching:!0,latestFetchId:a})}function Xo(e,t){return Sn(e,e=>$o(e,t))}function $o(e,t){return!t.pluginHooks.eventSourceDefs[e.sourceDefId].ignoreRange}function Jo(e,t){switch(t.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return t.selection;default:return e}}function Ko(e,t){switch(t.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return t.eventInstanceId;default:return e}}function ea(e,t){let n;switch(t.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":return n=t.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function ta(e,t){let n;switch(t.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":return n=t.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function na(e,t,n,r,i){return{header:e.headerToolbar?ra(e.headerToolbar,e,t,n,r,i):null,footer:e.footerToolbar?ra(e.footerToolbar,e,t,n,r,i):null}}function ra(e,t,n,r,i,s){let o={},a=[],l=!1;for(let c in e){let d=ia(e[c],t,n,r,i,s);o[c]=d.widgets,a.push(...d.viewsWithButtons),l=l||d.hasTitle}return{sectionWidgets:o,viewsWithButtons:a,hasTitle:l}}function ia(e,t,n,r,i,s){let o="rtl"===t.direction,a=t.customButtons||{},l=n.buttonText||{},c=t.buttonText||{},d=n.buttonHints||{},u=t.buttonHints||{},h=e?e.split(" "):[],f=[],g=!1;return{widgets:h.map(e=>e.split(",").map(e=>{if("title"===e)return g=!0,{buttonName:e};let n,h,p,m,v,y;if(n=a[e])p=e=>{n.click&&n.click.call(e.target,e,e.target)},(m=r.getCustomButtonIconClass(n))||(m=r.getIconClass(e,o))||(v=n.text),y=n.hint||n.text;else if(h=i[e]){f.push(e),p=()=>{s.changeView(e)},(v=h.buttonTextOverride)||(m=r.getIconClass(e,o))||(v=h.buttonTextDefault);let n=h.buttonTextOverride||h.buttonTextDefault;y=at(h.buttonTitleOverride||h.buttonTitleDefault||t.viewHint,[n,e],n)}else if(s[e])if(p=()=>{s[e]()},(v=l[e])||(m=r.getIconClass(e,o))||(v=c[e]),"prevYear"===e||"nextYear"===e){let t="prevYear"===e?"prev":"next";y=at(d[t]||u[t],[c.year||"year","year"],c[e])}else y=t=>at(d[e]||u[e],[c[t]||t,t],c[e]);return{buttonName:e,buttonClick:p,buttonIcon:m,buttonText:v,buttonHint:y}})),viewsWithButtons:f,hasTitle:g}}class sa{constructor(e,t,n){this.type=e,this.getCurrentData=t,this.dateEnv=n}get calendar(){return this.getCurrentData().calendarApi}get title(){return this.getCurrentData().viewTitle}get activeStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)}get activeEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)}get currentStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)}get currentEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)}getOption(e){return this.getCurrentData().options[e]}}function oa(e,t){let n=wn(t.getCurrentData().eventSources);if(1===n.length&&1===e.length&&Array.isArray(n[0]._raw)&&Array.isArray(e[0]))return void t.dispatch({type:"RESET_RAW_EVENTS",sourceId:n[0].sourceId,rawEvents:e[0]});let r=[];for(let t of e){let e=!1;for(let r=0;rArray.isArray(e.events)?e.events:null,fetch(e,t){t({rawEvents:e.eventSource.meta})}}]}),Oo({name:"func-event-source",eventSourceDefs:[{parseMeta:e=>"function"==typeof e.events?e.events:null,fetch(e,t,n){const{dateEnv:r}=e.context;Di(e.eventSource.meta.bind(null,Si(e.range,r)),e=>t({rawEvents:e}),n)}}]}),Oo({name:"json-event-source",eventSourceRefiners:{method:String,extraParams:yn,startParam:String,endParam:String,timeZoneParam:String},eventSourceDefs:[{parseMeta:e=>!e.url||"json"!==e.format&&e.format?null:{url:e.url,format:"json",method:(e.method||"GET").toUpperCase(),extraParams:e.extraParams,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam},fetch(e,t,n){const{meta:r}=e.eventSource,i=function(e,t,n){let r,i,s,o,{dateEnv:a,options:l}=n,c={};r=e.startParam,null==r&&(r=l.startParam);i=e.endParam,null==i&&(i=l.endParam);s=e.timeZoneParam,null==s&&(s=l.timeZoneParam);o="function"==typeof e.extraParams?e.extraParams():e.extraParams||{};Object.assign(c,o),c[r]=a.formatIso(t.start),c[i]=a.formatIso(t.end),"local"!==a.timeZone&&(c[s]=a.timeZone);return c}(r,e.range,e.context);Ci(r.method,r.url,i).then(([e,n])=>{t({rawEvents:e,response:n})},n)}}]}),Oo({name:"simple-recurring-event",recurringTypes:[{parse(e,t){if(e.daysOfWeek||e.startTime||e.endTime||e.startRecur||e.endRecur){let i,s={daysOfWeek:e.daysOfWeek||null,startTime:e.startTime||null,endTime:e.endTime||null,startRecur:e.startRecur?t.createMarker(e.startRecur):null,endRecur:e.endRecur?t.createMarker(e.endRecur):null,dateEnv:t};return e.duration&&(i=e.duration),!i&&e.startTime&&e.endTime&&(n=e.endTime,r=e.startTime,i={years:n.years-r.years,months:n.months-r.months,days:n.days-r.days,milliseconds:n.milliseconds-r.milliseconds}),{allDayGuess:Boolean(!e.startTime&&!e.endTime),duration:i,typeData:s}}var n,r;return null},expand(e,t,n){let r=rr(t,{start:e.startRecur,end:e.endRecur});return r?function(e,t,n,r,i){let s=e?Dn(e):null,o=Mt(i.start),a=i.end,l=[];for(;oGo(e.eventSources)],propSetHandlers:{dateProfile:function(e,t){t.emitter.trigger("datesSet",Object.assign(Object.assign({},Si(e.activeRange,t.dateEnv)),{view:t.viewApi}))},eventStore:function(e,t){let{emitter:n}=t;n.hasHandlers("eventsSet")&&n.trigger("eventsSet",ti(e,t))}}})];class la{constructor(e,t){this.runTaskOption=e,this.drainedOption=t,this.queue=[],this.delayedRunner=new Me(this.drain.bind(this))}request(e,t){this.queue.push(e),this.delayedRunner.request(t)}pause(e){this.delayedRunner.pause(e)}resume(e,t){this.delayedRunner.resume(e,t)}drain(){let{queue:e}=this;for(;e.length;){let t,n=[];for(;t=e.shift();)this.runTask(t),n.push(t);this.drained(n)}}runTask(e){this.runTaskOption&&this.runTaskOption(e)}drained(e){this.drainedOption&&this.drainedOption(e)}}function ca(e,t,n){let r;return r=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,n.formatRange(r.start,r.end,an(t.titleFormat||function(e){let{currentRangeUnit:t}=e;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};let n=kt(e.currentRange.start,e.currentRange.end);if(null!==n&&n>1)return{year:"numeric",month:"short",day:"numeric"};return{year:"numeric",month:"long",day:"numeric"}}(e)),{isEndExclusive:e.isRangeAllDay,defaultSeparator:t.titleRangeSeparator})}class da{constructor(){this.resetListeners=new Set}handleInput(e,t){const n=this.dateEnv;if(e!==n&&("function"==typeof t?this.nowFn=t:n||(this.nowAnchorDate=e.toDate(t?e.createMarker(t):e.createNowMarker()),this.nowAnchorQueried=Date.now()),this.dateEnv=e,n))for(const e of this.resetListeners.values())e()}getDateMarker(){return this.nowAnchorDate?this.dateEnv.timestampToMarker(this.nowAnchorDate.valueOf()+(Date.now()-this.nowAnchorQueried)):this.dateEnv.createMarker(this.nowFn())}addResetListener(e){this.resetListeners.add(e)}removeResetListener(e){this.resetListeners.delete(e)}}class ua{constructor(e){this.computeCurrentViewData=Gt(this._computeCurrentViewData),this.organizeRawLocales=Gt(ko),this.buildLocale=Gt(Mo),this.buildPluginHooks=No(),this.buildDateEnv=Gt(ha),this.buildTheme=Gt(fa),this.parseToolbars=Gt(na),this.buildViewSpecs=Gt(Lo),this.buildDateProfileGenerator=Qt(ga),this.buildViewApi=Gt(pa),this.buildViewUiProps=Qt(ya),this.buildEventUiBySource=Gt(ma,Cn),this.buildEventUiBases=Gt(va),this.parseContextBusinessHours=Qt(Ea),this.buildTitle=Gt(ca),this.nowManager=new da,this.emitter=new Fr,this.actionRunner=new la(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.optionsForRefining=[],this.optionsForHandling=[],this.getCurrentData=()=>this.data,this.dispatch=e=>{this.actionRunner.request(e)},this.props=e,this.actionRunner.pause(),this.nowManager=new da;let t={},n=this.computeOptionsData(e.optionOverrides,t,e.calendarApi),r=n.calendarOptions.initialView||n.pluginHooks.initialView,i=this.computeCurrentViewData(r,n,e.optionOverrides,t);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(i.options);let s={nowManager:this.nowManager,dateEnv:n.dateEnv,options:n.calendarOptions,pluginHooks:n.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},o=function(e,t,n){let r=e.initialDate;return null!=r?t.createMarker(r):n.getDateMarker()}(n.calendarOptions,n.dateEnv,this.nowManager),a=i.dateProfileGenerator.build(o);ar(a.activeRange,o)||(o=a.currentRange.start);for(let e of n.pluginHooks.contextInit)e(s);let l=Fo(n.calendarOptions,a,s),c={dynamicOptionOverrides:t,currentViewType:r,currentDate:o,dateProfile:a,businessHours:this.parseContextBusinessHours(s),eventSources:l,eventUiBases:{},eventStore:{defs:{},instances:{}},renderableEventStore:{defs:{},instances:{}},dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(s).selectionConfig},d=Object.assign(Object.assign({},s),c);for(let e of n.pluginHooks.reducers)Object.assign(c,e(null,null,d));ba(c,s)&&this.emitter.trigger("loading",!0),this.state=c,this.updateData(),this.actionRunner.resume()}resetOptions(e,t){let{props:n}=this;void 0===t?n.optionOverrides=e:(n.optionOverrides=Object.assign(Object.assign({},n.optionOverrides||{}),e),this.optionsForRefining.push(...t)),(void 0===t||t.length)&&this.actionRunner.request({type:"NOTHING"})}_handleAction(e){let{props:t,state:n,emitter:r}=this,i=function(e,t){switch(t.type){case"SET_OPTION":return Object.assign(Object.assign({},e),{[t.optionName]:t.rawOptionValue});default:return e}}(n.dynamicOptionOverrides,e),s=this.computeOptionsData(t.optionOverrides,i,t.calendarApi),o=function(e,t){switch(t.type){case"CHANGE_VIEW_TYPE":e=t.viewType}return e}(n.currentViewType,e),a=this.computeCurrentViewData(o,s,t.optionOverrides,i);t.calendarApi.currentDataManager=this,r.setThisContext(t.calendarApi),r.setOptions(a.options);let l={nowManager:this.nowManager,dateEnv:s.dateEnv,options:s.calendarOptions,pluginHooks:s.pluginHooks,calendarApi:t.calendarApi,dispatch:this.dispatch,emitter:r,getCurrentData:this.getCurrentData},{currentDate:c,dateProfile:d}=n;this.data&&this.data.dateProfileGenerator!==a.dateProfileGenerator&&(d=a.dateProfileGenerator.build(c)),c=function(e,t){switch(t.type){case"CHANGE_DATE":return t.dateMarker;default:return e}}(c,e),d=function(e,t,n,r){let i;switch(t.type){case"CHANGE_VIEW_TYPE":return r.build(t.dateMarker||n);case"CHANGE_DATE":return r.build(t.dateMarker);case"PREV":if(i=r.buildPrev(e,n),i.isValid)return i;break;case"NEXT":if(i=r.buildNext(e,n),i.isValid)return i}return e}(d,e,c,a.dateProfileGenerator),"PREV"!==e.type&&"NEXT"!==e.type&&ar(d.currentRange,c)||(c=d.currentRange.start);let u=Vo(n.eventSources,e,d,l),h=jr(n.eventStore,e,u,d,l),f=Go(u)&&!a.options.progressiveEventRendering&&n.renderableEventStore||h,{eventUiSingleBase:g,selectionConfig:p}=this.buildViewUiProps(l),m=this.buildEventUiBySource(u),v={dynamicOptionOverrides:i,currentViewType:o,currentDate:c,dateProfile:d,eventSources:u,eventStore:h,renderableEventStore:f,selectionConfig:p,eventUiBases:this.buildEventUiBases(f.defs,g,m),businessHours:this.parseContextBusinessHours(l),dateSelection:Jo(n.dateSelection,e),eventSelection:Ko(n.eventSelection,e),eventDrag:ea(n.eventDrag,e),eventResize:ta(n.eventResize,e)},y=Object.assign(Object.assign({},l),v);for(let t of s.pluginHooks.reducers)Object.assign(v,t(n,e,y));let b=ba(n,l),E=ba(v,l);!b&&E?r.trigger("loading",!0):b&&!E&&r.trigger("loading",!1),this.state=v,t.onAction&&t.onAction(e)}updateData(){let{props:e,state:t}=this,n=this.data,r=this.computeOptionsData(e.optionOverrides,t.dynamicOptionOverrides,e.calendarApi),i=this.computeCurrentViewData(t.currentViewType,r,e.optionOverrides,t.dynamicOptionOverrides),s=this.data=Object.assign(Object.assign(Object.assign({nowManager:this.nowManager,viewTitle:this.buildTitle(t.dateProfile,i.options,r.dateEnv),calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},r),i),t),o=r.pluginHooks.optionChangeHandlers,a=n&&n.calendarOptions,l=r.calendarOptions;if(a&&a!==l){a.timeZone!==l.timeZone&&(t.eventSources=s.eventSources=function(e,t,n){let r=t?t.activeRange:null;return Yo(e,Xo(e,n),r,!0,n)}(s.eventSources,t.dateProfile,s),t.eventStore=s.eventStore=Lr(s.eventStore,n.dateEnv,s.dateEnv),t.renderableEventStore=s.renderableEventStore=Lr(s.renderableEventStore,n.dateEnv,s.dateEnv));for(let e in o)-1===this.optionsForHandling.indexOf(e)&&a[e]===l[e]||o[e](l[e],s)}this.optionsForHandling=[],e.onData&&e.onData(s)}computeOptionsData(e,t,n){if(!this.optionsForRefining.length&&e===this.stableOptionOverrides&&t===this.stableDynamicOptionOverrides)return this.stableCalendarOptionsData;let{refinedOptions:r,pluginHooks:i,localeDefaults:s,availableLocaleData:o,extra:a}=this.processRawCalendarOptions(e,t);Sa(a);let l=this.buildDateEnv(r.timeZone,r.locale,r.weekNumberCalculation,r.firstDay,r.weekText,i,o,r.defaultRangeSeparator),c=this.buildViewSpecs(i.views,this.stableOptionOverrides,this.stableDynamicOptionOverrides,s),d=this.buildTheme(r,i),u=this.parseToolbars(r,this.stableOptionOverrides,d,c,n);return this.stableCalendarOptionsData={calendarOptions:r,pluginHooks:i,dateEnv:l,viewSpecs:c,theme:d,toolbarConfig:u,localeDefaults:s,availableRawLocales:o.map}}processRawCalendarOptions(e,t){let{locales:n,locale:r}=mn([cn,e,t]),i=this.organizeRawLocales(n),s=i.map,o=this.buildLocale(r||i.defaultCode,s).options,a=this.buildPluginHooks(e.plugins||[],aa),l=this.currentCalendarOptionsRefiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},ln),dn),un),a.listenerRefiners),a.optionRefiners),c={},d=mn([cn,o,e,t]),u={},h=this.currentCalendarOptionsInput,f=this.currentCalendarOptionsRefined,g=!1;for(let e in d)-1===this.optionsForRefining.indexOf(e)&&(d[e]===h[e]||hn[e]&&e in h&&hn[e](h[e],d[e]))?u[e]=f[e]:l[e]?(u[e]=l[e](d[e]),g=!0):c[e]=h[e];return g&&(this.currentCalendarOptionsInput=d,this.currentCalendarOptionsRefined=u,this.stableOptionOverrides=e,this.stableDynamicOptionOverrides=t),this.optionsForHandling.push(...this.optionsForRefining),this.optionsForRefining=[],{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:a,availableLocaleData:i,localeDefaults:o,extra:c}}_computeCurrentViewData(e,t,n,r){let i=t.viewSpecs[e];if(!i)throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);let{refinedOptions:s,extra:o}=this.processRawViewOptions(i,t.pluginHooks,t.localeDefaults,n,r);return Sa(o),this.nowManager.handleInput(t.dateEnv,s.now),{viewSpec:i,options:s,dateProfileGenerator:this.buildDateProfileGenerator({dateProfileGeneratorClass:i.optionDefaults.dateProfileGeneratorClass,nowManager:this.nowManager,duration:i.duration,durationUnit:i.durationUnit,usesMinMaxTime:i.optionDefaults.usesMinMaxTime,dateEnv:t.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:s.slotMinTime,slotMaxTime:s.slotMaxTime,showNonCurrentDates:s.showNonCurrentDates,dayCount:s.dayCount,dateAlignment:s.dateAlignment,dateIncrement:s.dateIncrement,hiddenDays:s.hiddenDays,weekends:s.weekends,validRangeInput:s.validRange,visibleRangeInput:s.visibleRange,fixedWeekCount:s.fixedWeekCount}),viewApi:this.buildViewApi(e,this.getCurrentData,t.dateEnv)}}processRawViewOptions(e,t,n,r,i){let s=mn([cn,e.optionDefaults,n,r,e.optionOverrides,i]),o=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},ln),dn),un),pn),t.listenerRefiners),t.optionRefiners),a={},l=this.currentViewOptionsInput,c=this.currentViewOptionsRefined,d=!1,u={};for(let e in s)s[e]===l[e]||hn[e]&&hn[e](s[e],l[e])?a[e]=c[e]:(s[e]===this.currentCalendarOptionsInput[e]||hn[e]&&hn[e](s[e],this.currentCalendarOptionsInput[e])?e in this.currentCalendarOptionsRefined&&(a[e]=this.currentCalendarOptionsRefined[e]):o[e]?a[e]=o[e](s[e]):u[e]=s[e],d=!0);return d&&(this.currentViewOptionsInput=s,this.currentViewOptionsRefined=a),{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:u}}}function ha(e,t,n,r,i,s,o,a){let l=Mo(t||o.defaultCode,o.map);return new Pn({calendarSystem:"gregory",timeZone:e,namedTimeZoneImpl:s.namedTimeZonedImpl,locale:l,weekNumberCalculation:n,firstDay:r,weekText:i,cmdFormatter:s.cmdFormatter,defaultSeparator:a})}function fa(e,t){return new(t.themeClasses[e.themeSystem]||Ho)(e)}function ga(e){return new(e.dateProfileGeneratorClass||hr)(e)}function pa(e,t,n){return new sa(e,t,n)}function ma(e){return An(e,e=>e.ui)}function va(e,t,n){let r={"":t};for(let t in e){let i=e[t];i.sourceId&&n[i.sourceId]&&(r[t]=n[i.sourceId])}return r}function ya(e){let{options:t}=e;return{eventUiSingleBase:Ir({display:t.eventDisplay,editable:t.editable,startEditable:t.eventStartEditable,durationEditable:t.eventDurationEditable,constraint:t.eventConstraint,overlap:"boolean"==typeof t.eventOverlap?t.eventOverlap:void 0,allow:t.eventAllow,backgroundColor:t.eventBackgroundColor,borderColor:t.eventBorderColor,textColor:t.eventTextColor,color:t.eventColor},e),selectionConfig:Ir({constraint:t.selectConstraint,overlap:"boolean"==typeof t.selectOverlap?t.selectOverlap:void 0,allow:t.selectAllow},e)}}function ba(e,t){for(let n of t.pluginHooks.isLoadingFuncs)if(n(e))return!0;return!1}function Ea(e){return Gr(e.options.businessHours,e)}function Sa(e,t){for(let n in e)console.warn(`Unknown option '${n}'`+(t?` for view '${t}'`:""))}class Aa extends Vn{render(){return p("div",{className:"fc-toolbar-chunk"},...this.props.widgetGroups.map(e=>this.renderWidgetGroup(e)))}renderWidgetGroup(e){let{props:t}=this,{theme:n}=this.context,r=[],i=!0;for(let s of e){let{buttonName:e,buttonClick:o,buttonText:a,buttonIcon:l,buttonHint:c}=s;if("title"===e)i=!1,r.push(p("h2",{className:"fc-toolbar-title",id:t.titleId},t.title));else{let i=e===t.activeButton,s=!t.isTodayEnabled&&"today"===e||!t.isPrevEnabled&&"prev"===e||!t.isNextEnabled&&"next"===e,d=[`fc-${e}-button`,n.getClass("button")];i&&d.push(n.getClass("buttonActive")),r.push(p("button",{type:"button",title:"function"==typeof c?c(t.navUnit):c,disabled:s,"aria-pressed":i,className:d.join(" "),onClick:o},a||(l?p("span",{className:l,role:"img"}):"")))}}if(r.length>1){return p("div",{className:i&&n.getClass("buttonGroup")||""},...r)}return r[0]}}class Da extends Vn{render(){let e,t,{model:n,extraClassName:r}=this.props,i=!1,s=n.sectionWidgets,o=s.center;return s.left?(i=!0,e=s.left):e=s.start,s.right?(i=!0,t=s.right):t=s.end,p("div",{className:[r||"","fc-toolbar",i?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",e||[]),this.renderSection("center",o||[]),this.renderSection("end",t||[]))}renderSection(e,t){let{props:n}=this;return p(Aa,{key:e,widgetGroups:t,title:n.title,navUnit:n.navUnit,activeButton:n.activeButton,isTodayEnabled:n.isTodayEnabled,isPrevEnabled:n.isPrevEnabled,isNextEnabled:n.isNextEnabled,titleId:n.titleId})}}class wa extends Vn{constructor(){super(...arguments),this.state={availableWidth:null},this.handleEl=e=>{this.el=e,Gn(this.props.elRef,e),this.updateAvailableWidth()},this.handleResize=()=>{this.updateAvailableWidth()}}render(){let{props:e,state:t}=this,{aspectRatio:n}=e,r=["fc-view-harness",n||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],i="",s="";return n?null!==t.availableWidth?i=t.availableWidth/n:s=1/n*100+"%":i=e.height||"",p("div",{"aria-labelledby":e.labeledById,ref:this.handleEl,className:r.join(" "),style:{height:i,paddingBottom:s}},e.children)}componentDidMount(){this.context.addResizeHandler(this.handleResize)}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateAvailableWidth(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})}}class Ca extends Ti{constructor(e){super(e),this.handleSegClick=(e,t)=>{let{component:n}=this,{context:r}=n,i=si(t);if(i&&n.isValidSegDownEl(e.target)){let s=Oe(e.target,".fc-event-forced-url"),o=s?s.querySelector("a[href]").href:"";r.emitter.trigger("eventClick",{el:t,event:new Kr(n.context,i.eventRange.def,i.eventRange.instance),jsEvent:e,view:r.viewApi}),o&&!e.defaultPrevented&&(window.location.href=o)}},this.destroy=Fe(e.el,"click",".fc-event",this.handleSegClick)}}class Ra extends Ti{constructor(e){super(e),this.handleEventElRemove=e=>{e===this.currentSegEl&&this.handleSegLeave(null,this.currentSegEl)},this.handleSegEnter=(e,t)=>{si(t)&&(this.currentSegEl=t,this.triggerEvent("eventMouseEnter",e,t))},this.handleSegLeave=(e,t)=>{this.currentSegEl&&(this.currentSegEl=null,this.triggerEvent("eventMouseLeave",e,t))},this.removeHoverListeners=function(e,t,n,r){let i;return Fe(e,"mouseover",t,(e,t)=>{if(t!==i){i=t,n(e,t);let s=e=>{i=null,r(e,t),t.removeEventListener("mouseleave",s)};t.addEventListener("mouseleave",s)}})}(e.el,".fc-event",this.handleSegEnter,this.handleSegLeave)}destroy(){this.removeHoverListeners()}triggerEvent(e,t,n){let{component:r}=this,{context:i}=r,s=si(n);t&&!r.isValidSegDownEl(t.target)||i.emitter.trigger(e,{el:n,event:new Kr(i,s.eventRange.def,s.eventRange.instance),jsEvent:t,view:i.viewApi})}}class xa extends Fn{constructor(){super(...arguments),this.buildViewContext=Gt(Wn),this.buildViewPropTransformers=Gt(Ta),this.buildToolbarProps=Gt(_a),this.headerRef={current:null},this.footerRef={current:null},this.interactionsStore={},this.state={viewLabelId:Le()},this.registerInteractiveComponent=(e,t)=>{let n=function(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter,isHitComboAllowed:t.isHitComboAllowed||null}}(e,t),r=[Ca,Ra].concat(this.props.pluginHooks.componentInteractions).map(e=>new e(n));this.interactionsStore[e.uid]=r,Mi[e.uid]=n},this.unregisterInteractiveComponent=e=>{let t=this.interactionsStore[e.uid];if(t){for(let e of t)e.destroy();delete this.interactionsStore[e.uid]}delete Mi[e.uid]},this.resizeRunner=new Me(()=>{this.props.emitter.trigger("_resize",!0),this.props.emitter.trigger("windowResize",{view:this.props.viewApi})}),this.handleWindowResize=e=>{let{options:t}=this.props;t.handleWindowResize&&e.target===window&&this.resizeRunner.request(t.windowResizeDelay)}}render(){let e,{props:t}=this,{toolbarConfig:n,options:r}=t,i=!1,s="";t.isHeightAuto||t.forPrint?s="":null!=r.height?i=!0:null!=r.contentHeight?s=r.contentHeight:e=Math.max(r.aspectRatio,.5);let o=this.buildViewContext(t.viewSpec,t.viewApi,t.options,t.dateProfileGenerator,t.dateEnv,t.nowManager,t.theme,t.pluginHooks,t.dispatch,t.getCurrentData,t.emitter,t.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent),a=n.header&&n.header.hasTitle?this.state.viewLabelId:void 0;return p(Ln.Provider,{value:o},p(Ii,{unit:"day"},r=>{let o=this.buildToolbarProps(t.viewSpec,t.dateProfile,t.dateProfileGenerator,t.currentDate,r,t.viewTitle);return p(y,null,n.header&&p(Da,Object.assign({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:n.header,titleId:a},o)),p(wa,{liquid:i,height:s,aspectRatio:e,labeledById:a},this.renderView(t),this.buildAppendContent()),n.footer&&p(Da,Object.assign({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:n.footer,titleId:""},o)))}))}componentDidMount(){let{props:e}=this;this.calendarInteractions=e.pluginHooks.calendarInteractions.map(t=>new t(e)),window.addEventListener("resize",this.handleWindowResize);let{propSetHandlers:t}=e.pluginHooks;for(let n in t)t[n](e[n],e)}componentDidUpdate(e){let{props:t}=this,{propSetHandlers:n}=t.pluginHooks;for(let r in n)t[r]!==e[r]&&n[r](t[r],t)}componentWillUnmount(){window.removeEventListener("resize",this.handleWindowResize),this.resizeRunner.clear();for(let e of this.calendarInteractions)e.destroy();this.props.emitter.trigger("_unmount")}buildAppendContent(){let{props:e}=this;return p(y,{},...e.pluginHooks.viewContainerAppends.map(t=>t(e)))}renderView(e){let{pluginHooks:t}=e,{viewSpec:n}=e,r={dateProfile:e.dateProfile,businessHours:e.businessHours,eventStore:e.renderableEventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,isHeightAuto:e.isHeightAuto,forPrint:e.forPrint},i=this.buildViewPropTransformers(t.viewPropsTransformers);for(let t of i)Object.assign(r,t.transform(r,e));return p(n.component,Object.assign({},r))}}function _a(e,t,n,r,i,s){let o=n.build(i,void 0,!1),a=n.buildPrev(t,r,!1),l=n.buildNext(t,r,!1);return{title:s,activeButton:e.type,navUnit:e.singleUnit,isTodayEnabled:o.isValid&&!ar(t.currentRange,i),isPrevEnabled:a.isValid,isNextEnabled:l.isValid}}function Ta(e){return e.map(e=>new e)}function ka(e){let t=Mo(e.locale||"en",ko([]).map);return new Pn(Object.assign(Object.assign({timeZone:cn.timeZone,calendarSystem:"gregory"},e),{locale:t}))}vs.touchMouseIgnoreWait=500;let Ma=0,Ia=0,Oa=!1;class Na{constructor(e){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=e=>{if(!this.shouldIgnoreMouse()&&function(e){return 0===e.button&&!e.ctrlKey}(e)&&this.tryStart(e)){let t=this.createEventFromMouse(e,!0);this.emitter.trigger("pointerdown",t),this.initScrollWatch(t),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=e=>{let t=this.createEventFromMouse(e);this.recordCoords(t),this.emitter.trigger("pointermove",t)},this.handleMouseUp=e=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(e)),this.cleanup()},this.handleTouchStart=e=>{if(this.tryStart(e)){this.isTouchDragging=!0;let t=this.createEventFromTouch(e,!0);this.emitter.trigger("pointerdown",t),this.initScrollWatch(t);let n=e.target;this.shouldIgnoreMove||n.addEventListener("touchmove",this.handleTouchMove),n.addEventListener("touchend",this.handleTouchEnd),n.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=e=>{let t=this.createEventFromTouch(e);this.recordCoords(t),this.emitter.trigger("pointermove",t)},this.handleTouchEnd=e=>{if(this.isDragging){let t=e.target;t.removeEventListener("touchmove",this.handleTouchMove),t.removeEventListener("touchend",this.handleTouchEnd),t.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(e)),this.cleanup(),this.isTouchDragging=!1,Ma+=1,setTimeout(()=>{Ma-=1},vs.touchMouseIgnoreWait)}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=e=>{if(!this.shouldIgnoreMove){let t=window.scrollX-this.prevScrollX+this.prevPageX,n=window.scrollY-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:e,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:t,pageY:n,deltaX:t-this.origPageX,deltaY:n-this.origPageY})}},this.containerEl=e,this.emitter=new Fr,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),Ia+=1,1===Ia&&window.addEventListener("touchmove",Pa,{passive:!1})}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),Ia-=1,Ia||window.removeEventListener("touchmove",Pa,{passive:!1})}tryStart(e){let t=this.querySubjectEl(e),n=e.target;return!(!t||this.handleSelector&&!Oe(n,this.handleSelector))&&(this.subjectEl=t,this.isDragging=!0,this.wasTouchScroll=!1,!0)}cleanup(){Oa=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(e){return this.selector?Oe(e.target,this.selector):this.containerEl}shouldIgnoreMouse(){return Ma||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(Oa=!0)}initScrollWatch(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.scrollX,this.prevScrollY=window.scrollY)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(e,t){let n=0,r=0;return t?(this.origPageX=e.pageX,this.origPageY=e.pageY):(n=e.pageX-this.origPageX,r=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:n,deltaY:r}}createEventFromTouch(e,t){let n,r,i=e.touches,s=0,o=0;return i&&i.length?(n=i[0].pageX,r=i[0].pageY):(n=e.pageX,r=e.pageY),t?(this.origPageX=n,this.origPageY=r):(s=n-this.origPageX,o=r-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:n,pageY:r,deltaX:s,deltaY:o}}}function Pa(e){Oa&&e.preventDefault()}class Ha{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.scrollX,this.origScreenY=n-window.scrollY,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(e,t){this.deltaX=e-window.scrollX-this.origScreenX,this.deltaY=t-window.scrollY-this.origScreenY,this.updateElPosition()}setIsVisible(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)}stop(e,t){let n=()=>{this.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(n,this.revertDuration):setTimeout(n,0)}doRevertAnimation(e,t){let n=this.mirrorEl,r=this.sourceEl.getBoundingClientRect();n.style.transition="top "+t+"ms,left "+t+"ms",Be(n,{left:r.left,top:r.top}),Ge(n,()=>{n.style.transition="",e()})}cleanup(){this.mirrorEl&&(Ie(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&Be(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let e=this.sourceElRect,t=this.mirrorEl;return t||(t=this.mirrorEl=this.sourceEl.cloneNode(!0),t.style.userSelect="none",t.style.webkitUserSelect="none",t.style.pointerEvents="none",t.classList.add("fc-event-dragging"),Be(t,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(t)),t}}class Ba extends ss{constructor(e,t){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=e,this.doesListening=t,this.scrollTop=this.origScrollTop=e.getScrollTop(),this.scrollLeft=this.origScrollLeft=e.getScrollLeft(),this.scrollWidth=e.getScrollWidth(),this.scrollHeight=e.getScrollHeight(),this.clientWidth=e.getClientWidth(),this.clientHeight=e.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class ja extends Ba{constructor(e,t){super(new os(e),t)}getEventTarget(){return this.scrollController.el}computeClientRect(){return es(this.scrollController.el)}}class za extends Ba{constructor(e){super(new as,e)}getEventTarget(){return window}computeClientRect(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}}handleScrollChange(){this.clientRect=this.computeClientRect()}}const Ua="function"==typeof performance?performance.now:Date.now;class La{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let e=this.computeBestEdge(this.pointerScreenX+window.scrollX,this.pointerScreenY+window.scrollY);if(e){let t=Ua();this.handleSide(e,(t-this.msSinceRequest)/1e3),this.requestAnimation(t)}else this.isAnimating=!1}}}start(e,t,n){this.isEnabled&&(this.scrollCaches=this.buildCaches(n),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))}handleMove(e,t){if(this.isEnabled){let n=e-window.scrollX,r=t-window.scrollY,i=null===this.pointerScreenY?0:r-this.pointerScreenY,s=null===this.pointerScreenX?0:n-this.pointerScreenX;i<0?this.everMovedUp=!0:i>0&&(this.everMovedDown=!0),s<0?this.everMovedLeft=!0:s>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(Ua()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let e of this.scrollCaches)e.destroy();this.scrollCaches=null}}requestAnimation(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)}handleSide(e,t){let{scrollCache:n}=e,{edgeThreshold:r}=this,i=r-e.distance,s=i*i/(r*r)*this.maxVelocity*t,o=1;switch(e.name){case"left":o=-1;case"right":n.setScrollLeft(n.getScrollLeft()+s*o);break;case"top":o=-1;case"bottom":n.setScrollTop(n.getScrollTop()+s*o)}}computeBestEdge(e,t){let{edgeThreshold:n}=this,r=null,i=this.scrollCaches||[];for(let s of i){let i=s.clientRect,o=e-i.left,a=i.right-e,l=t-i.top,c=i.bottom-t;o>=0&&a>=0&&l>=0&&c>=0&&(l<=n&&this.everMovedUp&&s.canScrollUp()&&(!r||r.distance>l)&&(r={scrollCache:s,name:"top",distance:l}),c<=n&&this.everMovedDown&&s.canScrollDown()&&(!r||r.distance>c)&&(r={scrollCache:s,name:"bottom",distance:c}),o<=n&&this.everMovedLeft&&s.canScrollLeft()&&(!r||r.distance>o)&&(r={scrollCache:s,name:"left",distance:o}),a<=n&&this.everMovedRight&&s.canScrollRight()&&(!r||r.distance>a)&&(r={scrollCache:s,name:"right",distance:a}))}return r}buildCaches(e){return this.queryScrollEls(e).map(e=>e===window?new za(!1):new ja(e,!1))}queryScrollEls(e){let t=[];for(let n of this.scrollQuery)"object"==typeof n?t.push(n):t.push(...Array.prototype.slice.call(e.getRootNode().querySelectorAll(n)));return t}}class Wa extends ms{constructor(e,t){super(e),this.containerEl=e,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=e=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,Je(document.body),et(document.body),e.isTouch||e.origEvent.preventDefault(),this.emitter.trigger("pointerdown",e),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(e.subjectEl,e.pageX,e.pageY),this.startDelay(e),this.minDistance||this.handleDistanceSurpassed(e)))},this.onPointerMove=e=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",e),!this.isDistanceSurpassed){let t,n=this.minDistance,{deltaX:r,deltaY:i}=e;t=r*r+i*i,t>=n*n&&this.handleDistanceSurpassed(e)}this.isDragging&&("scroll"!==e.origEvent.type&&(this.mirror.handleMove(e.pageX,e.pageY),this.autoScroller.handleMove(e.pageX,e.pageY)),this.emitter.trigger("dragmove",e))}},this.onPointerUp=e=>{this.isInteracting&&(this.isInteracting=!1,Ke(document.body),tt(document.body),this.emitter.trigger("pointerup",e),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(e)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let n=this.pointer=new Na(e);n.emitter.on("pointerdown",this.onPointerDown),n.emitter.on("pointermove",this.onPointerMove),n.emitter.on("pointerup",this.onPointerUp),t&&(n.selector=t),this.mirror=new Ha,this.autoScroller=new La}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(e){"number"==typeof this.delay?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(e)},this.delay):this.handleDelayEnd(e)}handleDelayEnd(e){this.isDelayEnded=!0,this.tryStartDrag(e)}handleDistanceSurpassed(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)}tryStartDrag(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY,this.containerEl),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))}tryStopDrag(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))}stopDrag(e){this.isDragging=!1,this.emitter.trigger("dragend",e)}setIgnoreMove(e){this.pointer.shouldIgnoreMove=e}setMirrorIsVisible(e){this.mirror.setIsVisible(e)}setMirrorNeedsRevert(e){this.mirrorNeedsRevert=e}setAutoScrollEnabled(e){this.autoScroller.isEnabled=e}}class Fa{constructor(e){this.el=e,this.origRect=ts(e),this.scrollCaches=ns(e).map(e=>new ja(e,!0))}destroy(){for(let e of this.scrollCaches)e.destroy()}computeLeft(){let e=this.origRect.left;for(let t of this.scrollCaches)e+=t.origScrollLeft-t.getScrollLeft();return e}computeTop(){let e=this.origRect.top;for(let t of this.scrollCaches)e+=t.origScrollTop-t.getScrollTop();return e}isWithinClipping(e,t){let n={left:e,top:t};for(let e of this.scrollCaches)if(!Va(e.getEventTarget())&&!Pi(n,e.clientRect))return!1;return!0}}function Va(e){let t=e.tagName;return"HTML"===t||"BODY"===t}class Ga{constructor(e,t){this.useSubjectCenter=!1,this.requireInitial=!0,this.disablePointCheck=!1,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=e=>{let{dragging:t}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(e),this.initialHit||!this.requireInitial?(t.setIgnoreMove(!1),this.emitter.trigger("pointerdown",e)):t.setIgnoreMove(!0)},this.handleDragStart=e=>{this.emitter.trigger("dragstart",e),this.handleMove(e,!0)},this.handleDragMove=e=>{this.emitter.trigger("dragmove",e),this.handleMove(e)},this.handlePointerUp=e=>{this.releaseHits(),this.emitter.trigger("pointerup",e)},this.handleDragEnd=e=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,e),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",e)},this.droppableStore=t,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new Fr}processFirstCoord(e){let t,n={left:e.pageX,top:e.pageY},r=n,i=e.subjectEl;i instanceof HTMLElement&&(t=ts(i),r=Bi(r,t));let s=this.initialHit=this.queryHitForOffset(r.left,r.top);if(s){if(this.useSubjectCenter&&t){let e=Hi(t,s.rect);e&&(r=ji(e))}this.coordAdjust=zi(r,n)}else this.coordAdjust={left:0,top:0}}handleMove(e,t){let n=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);!t&&Qa(this.movingHit,n)||(this.movingHit=n,this.emitter.trigger("hitupdate",n,!1,e))}prepareHits(){this.offsetTrackers=An(this.droppableStore,e=>(e.component.prepareHits(),new Fa(e.el)))}releaseHits(){let{offsetTrackers:e}=this;for(let t in e)e[t].destroy();this.offsetTrackers={}}queryHitForOffset(e,t){let{droppableStore:n,offsetTrackers:r}=this,i=null;for(let s in n){let o=n[s].component,a=r[s];if(a&&a.isWithinClipping(e,t)){let n=a.computeLeft(),r=a.computeTop(),l=e-n,c=t-r,{origRect:d}=a,u=d.right-d.left,h=d.bottom-d.top;if(l>=0&&l=0&&ci.layer)&&(e.componentId=s,e.context=o.context,e.rect.left+=n,e.rect.right+=n,e.rect.top+=r,e.rect.bottom+=r,i=e)}}}return i}}function Qa(e,t){return!e&&!t||Boolean(e)===Boolean(t)&&Ei(e.dateSpan,t.dateSpan)}function qa(e,t){let n={};for(let r of t.pluginHooks.datePointTransforms)Object.assign(n,r(e,t));var r,i;return Object.assign(n,(r=e,{date:(i=t.dateEnv).toDate(r.range.start),dateStr:i.formatIso(r.range.start,{omitTime:r.allDay}),allDay:r.allDay})),n}class Ya extends Ti{constructor(e){super(e),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=e=>{let t=e.origEvent.target,{component:n,dragging:r}=this,{mirror:i}=r,{options:s}=n.context,o=n.context;this.subjectEl=e.subjectEl;let a=this.subjectSeg=si(e.subjectEl),l=(this.eventRange=a.eventRange).instance.instanceId;this.relevantEvents=Cr(o.getCurrentData().eventStore,l),r.minDistance=e.isTouch?0:s.eventDragMinDistance,r.delay=e.isTouch&&l!==n.props.eventSelection?function(e){let{options:t}=e.context,n=t.eventLongPressDelay;null==n&&(n=t.longPressDelay);return n}(n):null,s.fixedMirrorParent?i.parentNode=s.fixedMirrorParent:i.parentNode=Oe(t,".fc"),i.revertDuration=s.dragRevertDuration;let c=n.isValidSegDownEl(t)&&!Oe(t,".fc-event-resizer");r.setIgnoreMove(!c),this.isDragging=c&&e.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=e=>{let t=this.component.context,n=this.eventRange,r=n.instance.instanceId;e.isTouch?r!==this.component.props.eventSelection&&t.dispatch({type:"SELECT_EVENT",eventInstanceId:r}):t.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(t.calendarApi.unselect(e),t.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new Kr(t,n.def,n.instance),jsEvent:e.origEvent,view:t.viewApi}))},this.handleHitUpdate=(e,t)=>{if(!this.isDragging)return;let n=this.relevantEvents,r=this.hitDragging.initialHit,i=this.component.context,s=null,o=null,a=null,l=!1,c={affectedEvents:n,mutatedEvents:{defs:{},instances:{}},isEvent:!0};if(e){s=e.context;let t=s.options;i===s||t.editable&&t.droppable?(o=function(e,t,n,r){let i=e.dateSpan,s=t.dateSpan,o=i.range.start,a=s.range.start,l={};i.allDay!==s.allDay&&(l.allDay=s.allDay,l.hasEnd=t.context.options.allDayMaintainDuration,o=s.allDay?Mt(n):n);let c=ur(o,a,e.context.dateEnv,e.componentId===t.componentId?e.largeUnit:null);c.milliseconds&&(l.allDay=!1);let d={datesDelta:c,standardProps:l};for(let n of r)n(d,e,t);return d}(r,e,this.eventRange.instance.range.start,s.getCurrentData().pluginHooks.eventDragMutationMassagers),o&&(a=Zr(n,s.getCurrentData().eventUiBases,o,s),c.mutatedEvents=a,Is(c,e.dateProfile,s)||(l=!0,o=null,a=null,c.mutatedEvents={defs:{},instances:{}}))):s=null}this.displayDrag(s,c),l?Xe():$e(),t||(i===s&&Qa(r,e)&&(o=null),this.dragging.setMirrorNeedsRevert(!o),this.dragging.setMirrorIsVisible(!e||!this.subjectEl.getRootNode().querySelector(".fc-event-mirror")),this.receivingContext=s,this.validMutation=o,this.mutatedRelevantEvents=a)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=e=>{if(this.isDragging){let t=this.component.context,n=t.viewApi,{receivingContext:r,validMutation:i}=this,s=this.eventRange.def,o=this.eventRange.instance,a=new Kr(t,s,o),l=this.relevantEvents,c=this.mutatedRelevantEvents,{finalHit:d}=this.hitDragging;if(this.clearDrag(),t.emitter.trigger("eventDragStop",{el:this.subjectEl,event:a,jsEvent:e.origEvent,view:n}),i){if(r===t){let r=new Kr(t,c.defs[s.defId],o?c.instances[o.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:c});let d={oldEvent:a,event:r,relatedEvents:ti(c,t,o),revert(){t.dispatch({type:"MERGE_EVENTS",eventStore:l})}},u={};for(let e of t.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(u,e(i,t));t.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},d),u),{el:e.subjectEl,delta:i.datesDelta,jsEvent:e.origEvent,view:n})),t.emitter.trigger("eventChange",d)}else if(r){let i={event:a,relatedEvents:ti(l,t,o),revert(){t.dispatch({type:"MERGE_EVENTS",eventStore:l})}};t.emitter.trigger("eventLeave",Object.assign(Object.assign({},i),{draggedEl:e.subjectEl,view:n})),t.dispatch({type:"REMOVE_EVENTS",eventStore:l}),t.emitter.trigger("eventRemove",i);let u=c.defs[s.defId],h=c.instances[o.instanceId],f=new Kr(r,u,h);r.dispatch({type:"MERGE_EVENTS",eventStore:c});let g={event:f,relatedEvents:ti(c,r,h),revert(){r.dispatch({type:"REMOVE_EVENTS",eventStore:c})}};r.emitter.trigger("eventAdd",g),e.isTouch&&r.dispatch({type:"SELECT_EVENT",eventInstanceId:o.instanceId}),r.emitter.trigger("drop",Object.assign(Object.assign({},qa(d.dateSpan,r)),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:d.context.viewApi})),r.emitter.trigger("eventReceive",Object.assign(Object.assign({},g),{draggedEl:e.subjectEl,view:d.context.viewApi}))}}else t.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:t}=this,{options:n}=t.context,r=this.dragging=new Wa(e.el);r.pointer.selector=Ya.SELECTOR,r.touchScrollAllowed=!1,r.autoScroller.isEnabled=n.dragScroll;let i=this.hitDragging=new Ga(this.dragging,Mi);i.useSubjectCenter=e.useEventCenter,i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("pointerup",this.handlePointerUp),i.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(e,t){let n=this.component.context,r=this.receivingContext;r&&r!==e&&(r===n?r.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:t.affectedEvents,mutatedEvents:{defs:{},instances:{}},isEvent:!0}}):r.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})}clearDrag(){let e=this.component.context,{receivingContext:t}=this;t&&t.dispatch({type:"UNSET_EVENT_DRAG"}),e!==t&&e.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}}Ya.SELECTOR=".fc-event-draggable, .fc-event-resizable";const Za={fixedMirrorParent:yn},Xa={dateClick:yn,eventDragStart:yn,eventDragStop:yn,eventDrop:yn,eventResizeStart:yn,eventResizeStop:yn,eventResize:yn,drop:yn,eventReceive:yn,eventLeave:yn};class $a{constructor(e,t){this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=e=>{this.dragMeta=this.buildDragMeta(e.subjectEl)},this.handleHitUpdate=(e,t,n)=>{let{dragging:r}=this.hitDragging,i=null,s=null,o=!1,a={affectedEvents:{defs:{},instances:{}},mutatedEvents:{defs:{},instances:{}},isEvent:this.dragMeta.create};e&&(i=e.context,this.canDropElOnCalendar(n.subjectEl,i)&&(s=function(e,t,n){let r=Object.assign({},t.leftoverProps);for(let i of n.pluginHooks.externalDefTransforms)Object.assign(r,i(e,t));let{refined:i,extra:s}=Er(r,n),o=Ar(i,s,t.sourceId,e.allDay,n.options.forceEventDuration||Boolean(t.duration),n),a=e.range.start;e.allDay&&t.startTime&&(a=n.dateEnv.add(a,t.startTime));let l=t.duration?n.dateEnv.add(a,t.duration):Yr(e.allDay,a,n),c=fr(o.defId,{start:a,end:l});return{def:o,instance:c}}(e.dateSpan,this.dragMeta,i),a.mutatedEvents=wr(s),o=!Is(a,e.dateProfile,i),o&&(a.mutatedEvents={defs:{},instances:{}},s=null))),this.displayDrag(i,a),r.setMirrorIsVisible(t||!s||!document.querySelector(".fc-event-mirror")),o?Xe():$e(),t||(r.setMirrorNeedsRevert(!s),this.receivingContext=i,this.droppableEvent=s)},this.handleDragEnd=e=>{let{receivingContext:t,droppableEvent:n}=this;if(this.clearDrag(),t&&n){let r=this.hitDragging.finalHit,i=r.context.viewApi,s=this.dragMeta;if(t.emitter.trigger("drop",Object.assign(Object.assign({},qa(r.dateSpan,t)),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:i})),s.create){let r=wr(n);t.dispatch({type:"MERGE_EVENTS",eventStore:r}),e.isTouch&&t.dispatch({type:"SELECT_EVENT",eventInstanceId:n.instance.instanceId}),t.emitter.trigger("eventReceive",{event:new Kr(t,n.def,n.instance),relatedEvents:[],revert(){t.dispatch({type:"REMOVE_EVENTS",eventStore:r})},draggedEl:e.subjectEl,view:i})}}this.receivingContext=null,this.droppableEvent=null};let n=this.hitDragging=new Ga(e,Mi);n.requireInitial=!1,n.emitter.on("dragstart",this.handleDragStart),n.emitter.on("hitupdate",this.handleHitUpdate),n.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=t}buildDragMeta(e){return"object"==typeof this.suppliedDragMeta?bs(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?bs(this.suppliedDragMeta(e)):function(e){let t=function(e,t){let n=vs.dataAttrPrefix,r=(n?n+"-":"")+t;return e.getAttribute("data-"+r)||""}(e,"event");return bs(t?JSON.parse(t):{create:!1})}(e)}displayDrag(e,t){let n=this.receivingContext;n&&n!==e&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})}clearDrag(){this.receivingContext&&this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}canDropElOnCalendar(e,t){let n=t.options.dropAccept;return"function"==typeof n?n.call(t.calendarApi,e):"string"!=typeof n||!n||Boolean(Ne(e,n))}}vs.dataAttrPrefix="";class Ja extends ms{constructor(e){super(e),this.shouldIgnoreMove=!1,this.mirrorSelector="",this.currentMirrorEl=null,this.handlePointerDown=e=>{this.emitter.trigger("pointerdown",e),this.shouldIgnoreMove||this.emitter.trigger("dragstart",e)},this.handlePointerMove=e=>{this.shouldIgnoreMove||this.emitter.trigger("dragmove",e)},this.handlePointerUp=e=>{this.emitter.trigger("pointerup",e),this.shouldIgnoreMove||this.emitter.trigger("dragend",e)};let t=this.pointer=new Na(e);t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("pointermove",this.handlePointerMove),t.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.pointer.destroy()}setIgnoreMove(e){this.shouldIgnoreMove=e}setMirrorIsVisible(e){if(e)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{let e=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;e&&(this.currentMirrorEl=e,e.style.visibility="hidden")}}}var Ka=Oo({name:"@fullcalendar/interaction",componentInteractions:[class extends Ti{constructor(e){super(e),this.handlePointerDown=e=>{let{dragging:t}=this,n=e.origEvent.target;t.setIgnoreMove(!this.component.isValidDateDownEl(n))},this.handleDragEnd=e=>{let{component:t}=this,{pointer:n}=this.dragging;if(!n.wasTouchScroll){let{initialHit:n,finalHit:r}=this.hitDragging;if(n&&r&&Qa(n,r)){let{context:r}=t,i=Object.assign(Object.assign({},qa(n.dateSpan,r)),{dayEl:n.dayEl,jsEvent:e.origEvent,view:r.viewApi||r.calendarApi.view});r.emitter.trigger("dateClick",i)}}},this.dragging=new Wa(e.el),this.dragging.autoScroller.isEnabled=!1;let t=this.hitDragging=new Ga(this.dragging,ki(e));t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}},class extends Ti{constructor(e){super(e),this.dragSelection=null,this.handlePointerDown=e=>{let{component:t,dragging:n}=this,{options:r}=t.context,i=r.selectable&&t.isValidDateDownEl(e.origEvent.target);n.setIgnoreMove(!i),n.delay=e.isTouch?function(e){let{options:t}=e.context,n=t.selectLongPressDelay;null==n&&(n=t.longPressDelay);return n}(t):null},this.handleDragStart=e=>{this.component.context.calendarApi.unselect(e)},this.handleHitUpdate=(e,t)=>{let{context:n}=this.component,r=null,i=!1;if(e){let t=this.hitDragging.initialHit;e.componentId===t.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(t,e)||(r=function(e,t,n){let r=e.dateSpan,i=t.dateSpan,s=[r.range.start,r.range.end,i.range.start,i.range.end];s.sort(lt);let o={};for(let r of n){let n=r(e,t);if(!1===n)return null;n&&Object.assign(o,n)}return o.range={start:s[0],end:s[3]},o.allDay=r.allDay,o}(t,e,n.pluginHooks.dateSelectionTransformers)),r&&Os(r,e.dateProfile,n)||(i=!0,r=null)}r?n.dispatch({type:"SELECT_DATES",selection:r}):t||n.dispatch({type:"UNSELECT_DATES"}),i?Xe():$e(),t||(this.dragSelection=r)},this.handlePointerUp=e=>{this.dragSelection&&(Qr(this.dragSelection,e,this.component.context),this.dragSelection=null)};let{component:t}=e,{options:n}=t.context,r=this.dragging=new Wa(e.el);r.touchScrollAllowed=!1,r.minDistance=n.selectMinDistance||0,r.autoScroller.isEnabled=n.dragScroll;let i=this.hitDragging=new Ga(this.dragging,ki(e));i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}},Ya,class extends Ti{constructor(e){super(e),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=e=>{let{component:t}=this,n=si(this.querySegEl(e)),r=this.eventRange=n.eventRange;this.dragging.minDistance=t.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(e.origEvent.target)||e.isTouch&&this.component.props.eventSelection!==r.instance.instanceId)},this.handleDragStart=e=>{let{context:t}=this.component,n=this.eventRange;this.relevantEvents=Cr(t.getCurrentData().eventStore,this.eventRange.instance.instanceId);let r=this.querySegEl(e);this.draggingSegEl=r,this.draggingSeg=si(r),t.calendarApi.unselect(),t.emitter.trigger("eventResizeStart",{el:r,event:new Kr(t,n.def,n.instance),jsEvent:e.origEvent,view:t.viewApi})},this.handleHitUpdate=(e,t,n)=>{let{context:r}=this.component,i=this.relevantEvents,s=this.hitDragging.initialHit,o=this.eventRange.instance,a=null,l=null,c=!1,d={affectedEvents:i,mutatedEvents:{defs:{},instances:{}},isEvent:!0};if(e){e.componentId===s.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(s,e)||(a=function(e,t,n,r){let i=e.context.dateEnv,s=e.dateSpan.range.start,o=t.dateSpan.range.start,a=ur(s,o,i,e.largeUnit);if(n){if(i.add(r.start,a)r.start)return{endDelta:a};return null}(s,e,n.subjectEl.classList.contains("fc-event-resizer-start"),o.range))}a&&(l=Zr(i,r.getCurrentData().eventUiBases,a,r),d.mutatedEvents=l,Is(d,e.dateProfile,r)||(c=!0,a=null,l=null,d.mutatedEvents=null)),l?r.dispatch({type:"SET_EVENT_RESIZE",state:d}):r.dispatch({type:"UNSET_EVENT_RESIZE"}),c?Xe():$e(),t||(a&&Qa(s,e)&&(a=null),this.validMutation=a,this.mutatedRelevantEvents=l)},this.handleDragEnd=e=>{let{context:t}=this.component,n=this.eventRange.def,r=this.eventRange.instance,i=new Kr(t,n,r),s=this.relevantEvents,o=this.mutatedRelevantEvents;if(t.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:i,jsEvent:e.origEvent,view:t.viewApi}),this.validMutation){let a=new Kr(t,o.defs[n.defId],r?o.instances[r.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:o});let l={oldEvent:i,event:a,relatedEvents:ti(o,t,r),revert(){t.dispatch({type:"MERGE_EVENTS",eventStore:s})}};t.emitter.trigger("eventResize",Object.assign(Object.assign({},l),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||ft(0),endDelta:this.validMutation.endDelta||ft(0),jsEvent:e.origEvent,view:t.viewApi})),t.emitter.trigger("eventChange",l)}else t.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:t}=e,n=this.dragging=new Wa(e.el);n.pointer.selector=".fc-event-resizer",n.touchScrollAllowed=!1,n.autoScroller.isEnabled=t.context.options.dragScroll;let r=this.hitDragging=new Ga(this.dragging,ki(e));r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(e){return Oe(e.subjectEl,".fc-event")}}],calendarInteractions:[class{constructor(e){this.context=e,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=e=>{e.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=e=>{let t=this.context.options.unselectCancel,n=ze(e.origEvent);this.matchesCancel=!!Oe(n,t),this.matchesEvent=!!Oe(n,Ya.SELECTOR)},this.onDocumentPointerUp=e=>{let{context:t}=this,{documentPointer:n}=this,r=t.getCurrentData();if(!n.wasTouchScroll){if(r.dateSelection&&!this.isRecentPointerDateSelect){let n=t.options.unselectAuto;!n||n&&this.matchesCancel||t.calendarApi.unselect(e)}r.eventSelection&&!this.matchesEvent&&t.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let t=this.documentPointer=new Na(document);t.shouldIgnoreMove=!0,t.shouldWatchScroll=!1,t.emitter.on("pointerdown",this.onDocumentPointerDown),t.emitter.on("pointerup",this.onDocumentPointerUp),e.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}}],elementDraggingImpl:Wa,optionRefiners:Za,listenerRefiners:Xa});class el extends ls{constructor(){super(...arguments),this.headerElRef={current:null}}renderSimpleLayout(e,t){let{props:n,context:r}=this,i=[],s=eo(r.options);return e&&i.push({type:"header",key:"header",isSticky:s,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),i.push({type:"body",key:"body",liquid:!0,chunk:{content:t}}),p(Kn,{elClasses:["fc-daygrid"],viewSpec:r.viewSpec},p(no,{liquid:!n.isHeightAuto&&!n.forPrint,collapsibleWidth:n.forPrint,cols:[],sections:i}))}renderHScrollLayout(e,t,n,r){let i=this.context.pluginHooks.scrollGridImpl;if(!i)throw new Error("No ScrollGrid implementation");let{props:s,context:o}=this,a=!s.forPrint&&eo(o.options),l=!s.forPrint&&to(o.options),c=[];return e&&c.push({type:"header",key:"header",isSticky:a,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),c.push({type:"body",key:"body",liquid:!0,chunks:[{key:"main",content:t}]}),l&&c.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"main",content:Ks}]}),p(Kn,{elClasses:["fc-daygrid"],viewSpec:o.viewSpec},p(i,{liquid:!s.isHeightAuto&&!s.forPrint,forPrint:s.forPrint,collapsibleWidth:s.forPrint,colGroups:[{cols:[{span:n,minWidth:r}]}],sections:c}))}}function tl(e,t){let n=[];for(let e=0;e{let n=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return p(y,null,t.map(t=>{let r=t.eventRange.instance.instanceId;return p("div",{className:"fc-daygrid-event-harness",key:r,style:{visibility:n[r]?"hidden":""}},sl(t)?p(al,Object.assign({seg:t,isDragging:!1,isSelected:r===e.eventSelection,defaultDisplayEventEnd:!1},gi(t,e.todayRange))):p(ol,Object.assign({seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:r===e.eventSelection,defaultDisplayEventEnd:!1},gi(t,e.todayRange))))}))}})}}function dl(e){let t=[],n=[];for(let r of e)t.push(r.seg),r.isVisible||n.push(r.seg);return{allSegs:t,invisibleSegs:n}}const ul=an({week:"narrow"});class hl extends ls{constructor(){super(...arguments),this.rootElRef={current:null},this.state={dayNumberId:Le()},this.handleRootEl=e=>{Gn(this.rootElRef,e),Gn(this.props.elRef,e)}}render(){let{context:e,props:t,state:n,rootElRef:r}=this,{options:i,dateEnv:s}=e,{date:o,dateProfile:a}=t;const l=t.showDayNumber&&function(e,t,n){const{start:r,end:i}=t,s=Ct(i,-1),o=n.getYear(r),a=n.getMonth(r),l=n.getYear(s),c=n.getMonth(s);return!(o===l&&a===c)&&Boolean(e.valueOf()===r.valueOf()||1===n.getDay(e)&&e.valueOf()p("div",{ref:t.innerElRef,className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",style:{minHeight:t.minHeight}},t.showWeekNumber&&p(po,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:qi(e,o,"week"),date:o,defaultFormat:ul}),!a.isDisabled&&(t.showDayNumber||co(i)||t.forceDayTop)?p("div",{className:"fc-daygrid-day-top"},p(s,{elTag:"a",elClasses:["fc-daygrid-day-number",l&&"fc-daygrid-month-start"],elAttrs:Object.assign(Object.assign({},qi(e,o)),{id:n.dayNumberId})})):t.showDayNumber?p("div",{className:"fc-daygrid-day-top",style:{visibility:"hidden"}},p("a",{className:"fc-daygrid-day-number"}," ")):void 0,p("div",{className:"fc-daygrid-day-events",ref:t.fgContentElRef},t.fgContent,p("div",{className:"fc-daygrid-day-bottom",style:{marginTop:t.moreMarginTop}},p(cl,{allDayDate:o,singlePlacements:t.singlePlacements,moreCnt:t.moreCnt,alignmentElRef:r,alignGridTop:!t.showDayNumber,extraDateSpan:t.extraDateSpan,dateProfile:t.dateProfile,eventSelection:t.eventSelection,eventDrag:t.eventDrag,eventResize:t.eventResize,todayRange:t.todayRange}))),p("div",{className:"fc-daygrid-day-bg"},t.bgContent)))}}function fl(e){return e.dayNumberText||p(y,null," ")}function gl(e){return e.eventRange.instance.instanceId+":"+e.firstCol}function pl(e){return gl(e)+":"+e.lastCol}function ml(e,t,n,r,i,s,o){let a=new yl(t=>{let n=e[t.index].eventRange.instance.instanceId+":"+t.span.start+":"+(t.span.end-1);return i[n]||1});a.allowReslicing=!0,a.strictOrder=r,!0===t||!0===n?(a.maxCoord=s,a.hiddenConsumes=!0):"number"==typeof t?a.maxStackCnt=t:"number"==typeof n&&(a.maxStackCnt=n,a.hiddenConsumes=!0);let l=[],c=[];for(let t=0;t1,o=r.span.start===e;d+=r.levelCoord-c,c=r.levelCoord+r.thickness,s?(d+=r.thickness,o&&u.push({seg:vl(i,r.span.start,r.span.end,n),isVisible:!0,isAbsolute:!0,absoluteTop:r.levelCoord,marginTop:0})):o&&(u.push({seg:vl(i,r.span.start,r.span.end,n),isVisible:!0,isAbsolute:!1,absoluteTop:r.levelCoord,marginTop:d}),d=0)}i.push(l),s.push(u),o.push(d)}return{singleColPlacements:i,multiColPlacements:s,leftoverMargins:o}}(u,e,o),p=[],m=[];for(let e of c){f[e.firstCol].push({seg:e,isVisible:!1,isAbsolute:!0,absoluteTop:0,marginTop:0});for(let t=e.firstCol;t<=e.lastCol;t+=1)h[t].push({seg:vl(e,t,t+1,o),isVisible:!1,isAbsolute:!1,absoluteTop:0,marginTop:0})}for(let e=0;e!this.forceHidden[us(e)];for(let e=0;e{e&&this.updateSizing(!0)}}render(){let{props:e,state:t,context:n}=this,{options:r}=n,i=e.cells.length,s=nl(e.businessHourSegs,i),o=nl(e.bgEventSegs,i),a=nl(this.getHighlightSegs(),i),l=nl(this.getMirrorSegs(),i),{singleColPlacements:c,multiColPlacements:d,moreCnts:u,moreMarginTops:h}=ml(li(e.fgEventSegs,r.eventOrder),e.dayMaxEvents,e.dayMaxEventRows,r.eventOrderStrict,t.segHeights,t.maxContentHeight,e.cells),f=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return p("tr",{ref:this.rootElRef,role:"row"},e.renderIntro&&e.renderIntro(),e.cells.map((t,n)=>{let r=this.renderFgSegs(n,e.forPrint?c[n]:d[n],e.todayRange,f),i=this.renderFgSegs(n,function(e,t){if(!e.length)return[];let n=function(e){let t={};for(let n of e)for(let e of n)t[e.seg.eventRange.instance.instanceId]=e.absoluteTop;return t}(t);return e.map(e=>({seg:e,isVisible:!0,isAbsolute:!0,absoluteTop:n[e.eventRange.instance.instanceId],marginTop:0}))}(l[n],d),e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1);return p(hl,{key:t.key,elRef:this.cellElRefs.createRef(t.key),innerElRef:this.frameElRefs.createRef(t.key),dateProfile:e.dateProfile,date:t.date,showDayNumber:e.showDayNumbers,showWeekNumber:e.showWeekNumbers&&0===n,forceDayTop:e.showWeekNumbers,todayRange:e.todayRange,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,extraRenderProps:t.extraRenderProps,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,extraDateSpan:t.extraDateSpan,moreCnt:u[n],moreMarginTop:h[n],singlePlacements:c[n],fgContentElRef:this.fgElRefs.createRef(t.key),fgContent:p(y,null,p(y,null,r),p(y,null,i)),bgContent:p(y,null,this.renderFillSegs(a[n],"highlight"),this.renderFillSegs(s[n],"non-business"),this.renderFillSegs(o[n],"bg-event")),minHeight:e.cellMinHeight})}))}componentDidMount(){this.updateSizing(!0),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,t){let n=this.props;this.updateSizing(!Cn(e,n))}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}renderFgSegs(e,t,n,r,i,s,o){let{context:a}=this,{eventSelection:l}=this.props,{framePositions:c}=this.state,d=1===this.props.cells.length,u=i||s||o,h=[];if(c)for(let e of t){let{seg:t}=e,{instanceId:f}=t.eventRange.instance,g=e.isVisible&&!r[f],m=e.isAbsolute,v="",y="";m&&(a.isRtl?(y=0,v=c.lefts[t.lastCol]-c.lefts[t.firstCol]):(v=0,y=c.rights[t.firstCol]-c.rights[t.lastCol])),h.push(p("div",{className:"fc-daygrid-event-harness"+(m?" fc-daygrid-event-harness-abs":""),key:gl(t),ref:u?null:this.segHarnessRefs.createRef(pl(t)),style:{visibility:g?"":"hidden",marginTop:m?"":e.marginTop,top:m?e.absoluteTop:"",left:v,right:y}},sl(t)?p(al,Object.assign({seg:t,isDragging:i,isSelected:f===l,defaultDisplayEventEnd:d},gi(t,n))):p(ol,Object.assign({seg:t,isDragging:i,isResizing:s,isDateSelecting:o,isSelected:f===l,defaultDisplayEventEnd:d},gi(t,n)))))}return h}renderFillSegs(e,t){let{isRtl:n}=this.context,{todayRange:r}=this.props,{framePositions:i}=this.state,s=[];if(i)for(let o of e){let e=n?{right:0,left:i.lefts[o.lastCol]-i.lefts[o.firstCol]}:{left:0,right:i.rights[o.firstCol]-i.rights[o.lastCol]};s.push(p("div",{key:mi(o.eventRange),className:"fc-daygrid-bg-harness",style:e},"bg-event"===t?p(ho,Object.assign({seg:o},gi(o,r))):go(t)))}return p(y,{},...s)}updateSizing(e){let{props:t,state:n,frameElRefs:r}=this;if(!t.forPrint&&null!==t.clientWidth){if(e){let e=t.cells.map(e=>r.currentMap[e.key]);if(e.length){let t=this.rootElRef.current,r=new rs(t,e,!0,!1);n.framePositions&&n.framePositions.similarTo(r)||this.setState({framePositions:new rs(t,e,!0,!1)})}}const i=this.state.segHeights,s=this.querySegHeights(),o=!0===t.dayMaxEvents||!0===t.dayMaxEventRows;this.safeSetState({segHeights:Object.assign(Object.assign({},i),s),maxContentHeight:o?this.computeMaxContentHeight():null})}}querySegHeights(){let e=this.segHarnessRefs.currentMap,t={};for(let n in e){let r=Math.round(e[n].getBoundingClientRect().height);t[n]=Math.max(t[n]||0,r)}return t}computeMaxContentHeight(){let e=this.props.cells[0].key,t=this.cellElRefs.currentMap[e],n=this.fgElRefs.currentMap[e];return t.getBoundingClientRect().bottom-n.getBoundingClientRect().top}getCellEls(){let e=this.cellElRefs.currentMap;return this.props.cells.map(t=>e[t.key])}}bl.addStateEquality({segHeights:Cn});class El extends ls{constructor(){super(...arguments),this.splitBusinessHourSegs=Gt(tl),this.splitBgEventSegs=Gt(Sl),this.splitFgEventSegs=Gt(tl),this.splitDateSelectionSegs=Gt(tl),this.splitEventDrag=Gt(rl),this.splitEventResize=Gt(rl),this.rowRefs=new Ws}render(){let{props:e,context:t}=this,n=e.cells.length,r=this.splitBusinessHourSegs(e.businessHourSegs,n),i=this.splitBgEventSegs(e.bgEventSegs,n),s=this.splitFgEventSegs(e.fgEventSegs,n),o=this.splitDateSelectionSegs(e.dateSelectionSegs,n),a=this.splitEventDrag(e.eventDrag,n),l=this.splitEventResize(e.eventResize,n),c=n>=7&&e.clientWidth?e.clientWidth/t.options.aspectRatio/6:null;return p(Ii,{unit:"day"},(t,d)=>p(y,null,e.cells.map((t,u)=>p(bl,{ref:this.rowRefs.createRef(u),key:t.length?t[0].date.toISOString():u,showDayNumbers:n>1,showWeekNumbers:e.showWeekNumbers,todayRange:d,dateProfile:e.dateProfile,cells:t,renderIntro:e.renderRowIntro,businessHourSegs:r[u],eventSelection:e.eventSelection,bgEventSegs:i[u],fgEventSegs:s[u],dateSelectionSegs:o[u],eventDrag:a[u],eventResize:l[u],dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,clientWidth:e.clientWidth,clientHeight:e.clientHeight,cellMinHeight:c,forPrint:e.forPrint}))))}componentDidMount(){this.registerInteractiveComponent()}componentDidUpdate(){this.registerInteractiveComponent()}registerInteractiveComponent(){if(!this.rootEl){const e=this.rowRefs.currentMap[0].getCellEls()[0],t=e?e.closest(".fc-daygrid-body"):null;t&&(this.rootEl=t,this.context.registerInteractiveComponent(this,{el:t,isHitComboAllowed:this.props.isHitComboAllowed}))}}componentWillUnmount(){this.rootEl&&(this.context.unregisterInteractiveComponent(this),this.rootEl=null)}prepareHits(){this.rowPositions=new rs(this.rootEl,this.rowRefs.collect().map(e=>e.getCellEls()[0]),!1,!0),this.colPositions=new rs(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)}queryHit(e,t){let{colPositions:n,rowPositions:r}=this,i=n.leftToIndex(e),s=r.topToIndex(t);if(null!=s&&null!=i){let e=this.props.cells[s][i];return{dateProfile:this.props.dateProfile,dateSpan:Object.assign({range:this.getCellRange(s,i),allDay:!0},e.extraDateSpan),dayEl:this.getCellEl(s,i),rect:{left:n.lefts[i],right:n.rights[i],top:r.tops[s],bottom:r.bottoms[s]},layer:0}}return null}getCellEl(e,t){return this.rowRefs.currentMap[e].getCellEls()[t]}getCellRange(e,t){let n=this.props.cells[e][t].date;return{start:n,end:wt(n,1)}}}function Sl(e,t){return tl(e.filter(Al),t)}function Al(e){return e.eventRange.def.allDay}class Dl extends ls{constructor(){super(...arguments),this.elRef={current:null},this.needsScrollReset=!1}render(){let{props:e}=this,{dayMaxEventRows:t,dayMaxEvents:n,expandRows:r}=e,i=!0===n||!0===t;i&&!r&&(i=!1,t=null,n=null);let s=["fc-daygrid-body",i?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",r?"":"fc-daygrid-body-natural"];return p("div",{ref:this.elRef,className:s.join(" "),style:{width:e.clientWidth,minWidth:e.tableMinWidth}},p("table",{role:"presentation",className:"fc-scrollgrid-sync-table",style:{width:e.clientWidth,minWidth:e.tableMinWidth,height:r?e.clientHeight:""}},e.colGroupNode,p("tbody",{role:"presentation"},p(El,{dateProfile:e.dateProfile,cells:e.cells,renderRowIntro:e.renderRowIntro,showWeekNumbers:e.showWeekNumbers,clientWidth:e.clientWidth,clientHeight:e.clientHeight,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,dayMaxEvents:n,dayMaxEventRows:t,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed}))))}componentDidMount(){this.requestScrollReset()}componentDidUpdate(e){e.dateProfile!==this.props.dateProfile?this.requestScrollReset():this.flushScrollReset()}requestScrollReset(){this.needsScrollReset=!0,this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&this.props.clientWidth){const e=function(e,t){let n;t.currentRangeUnit.match(/year|month/)&&(n=e.querySelector(`[data-date="${Wt(t.currentDate)}-01"]`));n||(n=e.querySelector(`[data-date="${Lt(t.currentDate)}"]`));return n}(this.elRef.current,this.props.dateProfile);if(e){const t=e.closest(".fc-daygrid-body"),n=t.closest(".fc-scroller"),r=e.getBoundingClientRect().top-t.getBoundingClientRect().top;n.scrollTop=r?r+1:0}this.needsScrollReset=!1}}}class wl extends ks{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}class Cl extends ls{constructor(){super(...arguments),this.slicer=new wl,this.tableRef={current:null}}render(){let{props:e,context:t}=this;return p(Dl,Object.assign({ref:this.tableRef},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,t,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))}}function Rl(e,t){let n=new _s(e.renderRange,t);return new Ts(n,/year|month|week/.test(e.currentRangeUnit))}class xl extends hr{buildRenderRange(e,t,n){let r=super.buildRenderRange(e,t,n),{props:i}=this;return _l({currentRange:r,snapToWeek:/^(year|month)$/.test(t),fixedWeekCount:i.fixedWeekCount,dateEnv:i.dateEnv})}}function _l(e){let t,{dateEnv:n,currentRange:r}=e,{start:i,end:s}=r;if(e.snapToWeek&&(i=n.startOfWeek(i),t=n.startOfWeek(s),t.valueOf()!==s.valueOf()&&(s=Dt(t,1))),e.fixedWeekCount){let e=n.startOfWeek(n.startOfMonth(wt(r.end,-1)));s=Dt(s,6-Math.ceil(Rt(e,s)))}return{start:i,end:s}}xe(':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}');var Tl=Oo({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:class extends el{constructor(){super(...arguments),this.buildDayTableModel=Gt(Rl),this.headerRef={current:null},this.tableRef={current:null}}render(){let{options:e,dateProfileGenerator:t}=this.context,{props:n}=this,r=this.buildDayTableModel(n.dateProfile,t),i=e.dayHeaders&&p(Rs,{ref:this.headerRef,dateProfile:n.dateProfile,dates:r.headerDates,datesRepDistinctDays:1===r.rowCnt}),s=t=>p(Cl,{ref:this.tableRef,dateProfile:n.dateProfile,dayTableModel:r,businessHours:n.businessHours,dateSelection:n.dateSelection,eventStore:n.eventStore,eventUiBases:n.eventUiBases,eventSelection:n.eventSelection,eventDrag:n.eventDrag,eventResize:n.eventResize,nextDayThreshold:e.nextDayThreshold,colGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.weekNumbers,expandRows:!n.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:n.forPrint});return e.dayMinWidth?this.renderHScrollLayout(i,s,r.colCnt,e.dayMinWidth):this.renderSimpleLayout(i,s)}},dateProfileGeneratorClass:xl},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}});class kl extends Li{getKeyInfo(){return{allDay:{},timed:{}}}getKeysForDateSpan(e){return e.allDay?["allDay"]:["timed"]}getKeysForEventDef(e){return e.allDay?ri(e)?["timed","allDay"]:["allDay"]:["timed"]}}const Ml=an({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function Il(e){let t=["fc-timegrid-slot","fc-timegrid-slot-label",e.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return p(Ln.Consumer,null,n=>{if(!e.isLabeled)return p("td",{className:t.join(" "),"data-time":e.isoTimeStr});let{dateEnv:r,options:i,viewApi:s}=n,o=null==i.slotLabelFormat?Ml:Array.isArray(i.slotLabelFormat)?an(i.slotLabelFormat[0]):an(i.slotLabelFormat),a={level:0,time:e.time,date:r.toDate(e.date),view:s,text:r.format(e.date,o)};return p($n,{elTag:"td",elClasses:t,elAttrs:{"data-time":e.isoTimeStr},renderProps:a,generatorName:"slotLabelContent",customGenerator:i.slotLabelContent,defaultGenerator:Ol,classNameGenerator:i.slotLabelClassNames,didMount:i.slotLabelDidMount,willUnmount:i.slotLabelWillUnmount},e=>p("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},p(e,{elTag:"div",elClasses:["fc-timegrid-slot-label-cushion","fc-scrollgrid-shrink-cushion"]})))})}function Ol(e){return e.text}class Nl extends Vn{render(){return this.props.slatMetas.map(e=>p("tr",{key:e.key},p(Il,Object.assign({},e))))}}const Pl=an({week:"short"});class Hl extends ls{constructor(){super(...arguments),this.allDaySplitter=new kl,this.headerElRef={current:null},this.rootElRef={current:null},this.scrollerElRef={current:null},this.state={slatCoords:null},this.handleScrollTopRequest=e=>{let t=this.scrollerElRef.current;t&&(t.scrollTop=e)},this.renderHeadAxis=(e,t="")=>{let{options:n}=this.context,{dateProfile:r}=this.props,i=r.renderRange,s=1===xt(i.start,i.end)?qi(this.context,i.start,"week"):{};return n.weekNumbers&&"day"===e?p(po,{elTag:"th",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},date:i.start,defaultFormat:Pl},e=>p("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame","fc-timegrid-axis-frame-liquid"].join(" "),style:{height:t}},p(e,{elTag:"a",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"],elAttrs:s}))):p("th",{"aria-hidden":!0,className:"fc-timegrid-axis"},p("div",{className:"fc-timegrid-axis-frame",style:{height:t}}))},this.renderTableRowAxis=e=>{let{options:t,viewApi:n}=this.context,r={text:t.allDayText,view:n};return p($n,{elTag:"td",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},renderProps:r,generatorName:"allDayContent",customGenerator:t.allDayContent,defaultGenerator:Bl,classNameGenerator:t.allDayClassNames,didMount:t.allDayDidMount,willUnmount:t.allDayWillUnmount},t=>p("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame",null==e?" fc-timegrid-axis-frame-liquid":""].join(" "),style:{height:e}},p(t,{elTag:"span",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"]})))},this.handleSlatCoords=e=>{this.setState({slatCoords:e})}}renderSimpleLayout(e,t,n){let{context:r,props:i}=this,s=[],o=eo(r.options);return e&&s.push({type:"header",key:"header",isSticky:o,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),t&&(s.push({type:"body",key:"all-day",chunk:{content:t}}),s.push({type:"body",key:"all-day-divider",outerContent:p("tr",{role:"presentation",className:"fc-scrollgrid-section"},p("td",{className:"fc-timegrid-divider "+r.theme.getClass("tableCellShaded")}))})),s.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(r.options.expandRows),chunk:{scrollerElRef:this.scrollerElRef,content:n}}),p(Kn,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:r.viewSpec},p(no,{liquid:!i.isHeightAuto&&!i.forPrint,collapsibleWidth:i.forPrint,cols:[{width:"shrink"}],sections:s}))}renderHScrollLayout(e,t,n,r,i,s,o){let a=this.context.pluginHooks.scrollGridImpl;if(!a)throw new Error("No ScrollGrid implementation");let{context:l,props:c}=this,d=!c.forPrint&&eo(l.options),u=!c.forPrint&&to(l.options),h=[];e&&h.push({type:"header",key:"header",isSticky:d,syncRowHeights:!0,chunks:[{key:"axis",rowContent:e=>p("tr",{role:"presentation"},this.renderHeadAxis("day",e.rowSyncHeights[0]))},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),t&&(h.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:e=>p("tr",{role:"presentation"},this.renderTableRowAxis(e.rowSyncHeights[0]))},{key:"cols",content:t}]}),h.push({key:"all-day-divider",type:"body",outerContent:p("tr",{role:"presentation",className:"fc-scrollgrid-section"},p("td",{colSpan:2,className:"fc-timegrid-divider "+l.theme.getClass("tableCellShaded")}))}));let f=l.options.nowIndicator;return h.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(l.options.expandRows),chunks:[{key:"axis",content:e=>p("div",{className:"fc-timegrid-axis-chunk"},p("table",{"aria-hidden":!0,style:{height:e.expandRows?e.clientHeight:""}},e.tableColGroupNode,p("tbody",null,p(Nl,{slatMetas:s}))),p("div",{className:"fc-timegrid-now-indicator-container"},p(Ii,{unit:f?"minute":"day"},e=>{let t=f&&o&&o.safeComputeTop(e);return"number"==typeof t?p(oo,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:t},isAxis:!0,date:e}):null})))},{key:"cols",scrollerElRef:this.scrollerElRef,content:n}]}),u&&h.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:Ks},{key:"cols",content:Ks}]}),p(Kn,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:l.viewSpec},p(a,{liquid:!c.isHeightAuto&&!c.forPrint,forPrint:c.forPrint,collapsibleWidth:!1,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:r,minWidth:i}]}],sections:h}))}getAllDayMaxEventProps(){let{dayMaxEvents:e,dayMaxEventRows:t}=this.context.options;return!0!==e&&!0!==t||(e=void 0,t=5),{dayMaxEvents:e,dayMaxEventRows:t}}}function Bl(e){return e.text}class jl{constructor(e,t,n){this.positions=e,this.dateProfile=t,this.slotDuration=n}safeComputeTop(e){let{dateProfile:t}=this;if(ar(t.currentRange,e)){let n=Mt(e),r=e.valueOf()-n.valueOf();if(r>=yt(t.slotMinTime)&&r{let o={time:i.time,date:t.dateEnv.toDate(i.date),view:t.viewApi};return p("tr",{key:i.key,ref:r.createRef(i.key)},e.axis&&p(Il,Object.assign({},i)),p($n,{elTag:"td",elClasses:["fc-timegrid-slot","fc-timegrid-slot-lane",!i.isLabeled&&"fc-timegrid-slot-minor"],elAttrs:{"data-time":i.isoTimeStr},renderProps:o,generatorName:"slotLaneContent",customGenerator:n.slotLaneContent,classNameGenerator:n.slotLaneClassNames,didMount:n.slotLaneDidMount,willUnmount:n.slotLaneWillUnmount}))}))}}class Ul extends Vn{constructor(){super(...arguments),this.rootElRef={current:null},this.slatElRefs=new Ws}render(){let{props:e,context:t}=this;return p("div",{ref:this.rootElRef,className:"fc-timegrid-slots"},p("table",{"aria-hidden":!0,className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},e.tableColGroupNode,p(zl,{slatElRefs:this.slatElRefs,axis:e.axis,slatMetas:e.slatMetas})))}componentDidMount(){this.updateSizing()}componentDidUpdate(){this.updateSizing()}componentWillUnmount(){this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{context:e,props:t}=this;if(t.onCoords&&null!==t.clientWidth){this.rootElRef.current.offsetHeight&&t.onCoords(new jl(new rs(this.rootElRef.current,(n=this.slatElRefs.currentMap,t.slatMetas.map(e=>n[e.key])),!1,!0),this.props.dateProfile,e.options.slotDuration))}var n}}function Ll(e,t){let n,r=[];for(n=0;nec(e.hiddenSegs,e),defaultGenerator:Vl,forceTimed:!0},e=>p(e,{elTag:"div",elClasses:["fc-timegrid-more-link-inner","fc-sticky"]}))}}function Vl(e){return e.shortText}function Gl(e,t,n){let r=new cs;null!=t&&(r.strictOrder=t),null!=n&&(r.maxStackCnt=n);let i=hs(r.addSegs(e)),s=function(e){const{entriesByLevel:t}=e,n=Zl((e,t)=>e+":"+t,(r,i)=>{let s=Ql(function(e,t,n){let{levelCoords:r,entriesByLevel:i}=e,s=i[t][n],o=r[t]+s.thickness,a=r.length,l=t;for(;lus(e),(e,r,i)=>{let s,{nextLevelNodes:o,thickness:a}=e,l=a+i,c=a/l,d=[];if(o.length)for(let e of o)if(void 0===s){let t=n(e,r,l);s=t[0],d.push(t[1])}else{let t=n(e,s,0);d.push(t[1])}else s=t;let u=(s-r)*c;return[s-u,Object.assign(Object.assign({},e),{thickness:u,nextLevelNodes:d})]});return e.map(e=>n(e,0,0)[1])}(s,1),{segRects:function(e){let t=[];const n=Zl((e,t,n)=>us(e),(e,n,i)=>{let s=Object.assign(Object.assign({},e),{levelCoord:n,stackDepth:i,stackForward:0});return t.push(s),s.stackForward=r(e.nextLevelNodes,n+e.thickness,i+1)+1});function r(e,t,r){let i=0;for(let s of e)i=Math.max(n(s,t,r),i);return i}return r(e,0,0),t}(s),hiddenGroups:i}}function Ql(e,t){if(!e)return[[],0];let{level:n,lateralStart:r,lateralEnd:i}=e,s=r,o=[];for(;s{let i=e(...r);return i in n?n[i]:n[i]=t(...r)}}function Xl(e,t,n=null,r=0){let i=[];if(n)for(let s=0;sp("div",{className:"fc-timegrid-col-frame"},p("div",{className:"fc-timegrid-col-bg"},this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(e.dateSelectionSegs,"highlight")),p("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(o,s,!1,!1,!1)),p("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(i,{},Boolean(e.eventDrag),Boolean(e.eventResize),Boolean(r),"mirror")),p("div",{className:"fc-timegrid-now-indicator-container"},this.renderNowIndicator(e.nowIndicatorSegs)),co(n)&&p(t,{elTag:"div",elClasses:["fc-timegrid-col-misc"]})))}renderFgSegs(e,t,n,r,i,s){let{props:o}=this;return o.forPrint?ec(e,o):this.renderPositionedFgSegs(e,t,n,r,i,s)}renderPositionedFgSegs(e,t,n,r,i,s){let{eventMaxStack:o,eventShortHeight:a,eventOrderStrict:l,eventMinHeight:c}=this.context.options,{date:d,slatCoords:u,eventSelection:h,todayRange:f,nowDate:g}=this.props,m=n||r||i,v=Xl(e,d,u,c),{segPlacements:b,hiddenGroups:E}=function(e,t,n,r){let i=[],s=[];for(let n=0;n{let{seg:o,rect:l}=e,c=o.eventRange.instance.instanceId,d=m||Boolean(!t[c]&&l),u=tc(l&&l.span),v=!m&&l?this.computeSegHStyle(l):{left:0,right:0},y=Boolean(l)&&l.stackForward>0,b=Boolean(l)&&l.span.end-l.span.start{let c=tc(e.span),d=(u=e.entries,h=t,u.map(e=>h[e.index]));var u,h;return p(Fl,{key:Ut(Ao(d)),hiddenSegs:d,top:c.top,bottom:c.bottom,extraDateSpan:n,dateProfile:r,todayRange:i,nowDate:s,eventSelection:o,eventDrag:a,eventResize:l})}))}renderFillSegs(e,t){let{props:n,context:r}=this,i=Xl(e,n.date,n.slatCoords,r.options.eventMinHeight).map((r,i)=>{let s=e[i];return p("div",{key:mi(s.eventRange),className:"fc-timegrid-bg-harness",style:tc(r)},"bg-event"===t?p(ho,Object.assign({seg:s},gi(s,n.todayRange,n.nowDate))):go(t))});return p(y,null,i)}renderNowIndicator(e){let{slatCoords:t,date:n}=this.props;return t?e.map((e,r)=>p(oo,{key:r,elClasses:["fc-timegrid-now-indicator-line"],elStyle:{top:t.computeDateTop(e.start,n)},isAxis:!1,date:n})):null}computeSegHStyle(e){let t,n,{isRtl:r,options:i}=this.context,s=i.slotEventOverlap,o=e.levelCoord,a=e.levelCoord+e.thickness;s&&(a=Math.min(1,o+2*(a-o))),r?(t=1-a,n=o):(t=o,n=1-a);let l={zIndex:e.stackDepth+1,left:100*t+"%",right:100*n+"%"};return s&&!e.stackForward&&(l[r?"marginLeft":"marginRight"]=20),l}}function ec(e,{todayRange:t,nowDate:n,eventSelection:r,eventDrag:i,eventResize:s}){let o=(i?i.affectedInstances:null)||(s?s.affectedInstances:null)||{};return p(y,null,e.map(e=>{let i=e.eventRange.instance.instanceId;return p("div",{key:i,style:{visibility:o[i]?"hidden":""}},p(Jl,Object.assign({seg:e,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:i===r,isShort:!1},gi(e,t,n))))}))}function tc(e){return e?{top:e.start,bottom:-e.end}:{top:"",bottom:""}}class nc extends Vn{constructor(){super(...arguments),this.splitFgEventSegs=Gt(Ll),this.splitBgEventSegs=Gt(Ll),this.splitBusinessHourSegs=Gt(Ll),this.splitNowIndicatorSegs=Gt(Ll),this.splitDateSelectionSegs=Gt(Ll),this.splitEventDrag=Gt(Wl),this.splitEventResize=Gt(Wl),this.rootElRef={current:null},this.cellElRefs=new Ws}render(){let{props:e,context:t}=this,n=t.options.nowIndicator&&e.slatCoords&&e.slatCoords.safeComputeTop(e.nowDate),r=e.cells.length,i=this.splitFgEventSegs(e.fgEventSegs,r),s=this.splitBgEventSegs(e.bgEventSegs,r),o=this.splitBusinessHourSegs(e.businessHourSegs,r),a=this.splitNowIndicatorSegs(e.nowIndicatorSegs,r),l=this.splitDateSelectionSegs(e.dateSelectionSegs,r),c=this.splitEventDrag(e.eventDrag,r),d=this.splitEventResize(e.eventResize,r);return p("div",{className:"fc-timegrid-cols",ref:this.rootElRef},p("table",{role:"presentation",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,p("tbody",{role:"presentation"},p("tr",{role:"row"},e.axis&&p("td",{"aria-hidden":!0,className:"fc-timegrid-col fc-timegrid-axis"},p("div",{className:"fc-timegrid-col-frame"},p("div",{className:"fc-timegrid-now-indicator-container"},"number"==typeof n&&p(oo,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:n},isAxis:!0,date:e.nowDate})))),e.cells.map((t,n)=>p(Kl,{key:t.key,elRef:this.cellElRefs.createRef(t.key),dateProfile:e.dateProfile,date:t.date,nowDate:e.nowDate,todayRange:e.todayRange,extraRenderProps:t.extraRenderProps,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,extraDateSpan:t.extraDateSpan,fgEventSegs:i[n],bgEventSegs:s[n],businessHourSegs:o[n],nowIndicatorSegs:a[n],dateSelectionSegs:l[n],eventDrag:c[n],eventResize:d[n],slatCoords:e.slatCoords,eventSelection:e.eventSelection,forPrint:e.forPrint}))))))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}updateCoords(){let{props:e}=this;var t;e.onColCoords&&null!==e.clientWidth&&e.onColCoords(new rs(this.rootElRef.current,(t=this.cellElRefs.currentMap,e.cells.map(e=>t[e.key])),!0,!1))}}class rc extends ls{constructor(){super(...arguments),this.processSlotOptions=Gt(ic),this.state={slatCoords:null},this.handleRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)},this.handleScrollRequest=e=>{let{onScrollTopRequest:t}=this.props,{slatCoords:n}=this.state;if(t&&n){if(e.time){let r=n.computeTimeTop(e.time);r=Math.ceil(r),r&&(r+=1),t(r)}return!0}return!1},this.handleColCoords=e=>{this.colCoords=e},this.handleSlatCoords=e=>{this.setState({slatCoords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:t}=this;return p("div",{className:"fc-timegrid-body",ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},p(Ul,{axis:e.axis,dateProfile:e.dateProfile,slatMetas:e.slatMetas,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,tableColGroupNode:e.axis?e.tableColGroupNode:null,onCoords:this.handleSlatCoords}),p(nc,{cells:e.cells,axis:e.axis,dateProfile:e.dateProfile,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange,nowDate:e.nowDate,nowIndicatorSegs:e.nowIndicatorSegs,clientWidth:e.clientWidth,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,slatCoords:t.slatCoords,onColCoords:this.handleColCoords,forPrint:e.forPrint}))}componentDidMount(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach()}queryHit(e,t){let{dateEnv:n,options:r}=this.context,{colCoords:i}=this,{dateProfile:s}=this.props,{slatCoords:o}=this.state,{snapDuration:a,snapsPerSlot:l}=this.processSlotOptions(this.props.slotDuration,r.snapDuration),c=i.leftToIndex(e),d=o.positions.topToIndex(t);if(null!=c&&null!=d){let e=this.props.cells[c],r=o.positions.tops[d],u=o.positions.getHeight(d),h=(t-r)/u,f=d*l+Math.floor(h*l),g=this.props.cells[c].date,p=pt(s.slotMinTime,mt(a,f)),m=n.add(g,p),v=n.add(m,a);return{dateProfile:s,dateSpan:Object.assign({range:{start:m,end:v},allDay:!1},e.extraDateSpan),dayEl:i.els[c],rect:{left:i.lefts[c],right:i.rights[c],top:r,bottom:r+u},layer:0}}return null}}function ic(e,t){let n=t||e,r=bt(e,n);return null===r&&(n=e,r=1),{snapDuration:n,snapsPerSlot:r}}class sc extends ks{sliceRange(e,t){let n=[];for(let r=0;rp(rc,Object.assign({ref:this.timeColsRef},this.slicer.sliceProps(e,n,null,t,o),{forPrint:e.forPrint,axis:e.axis,dateProfile:n,slatMetas:e.slatMetas,slotDuration:e.slotDuration,cells:r.cells[0],tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,clientWidth:e.clientWidth,clientHeight:e.clientHeight,expandRows:e.expandRows,nowDate:a,nowIndicatorSegs:i&&this.slicer.sliceNowDate(a,n,s,t,o),todayRange:l,onScrollTopRequest:e.onScrollTopRequest,onSlatCoords:e.onSlatCoords})))}}function ac(e,t,n){let r=[];for(let i of e.headerDates)r.push({start:n.add(i,t.slotMinTime),end:n.add(i,t.slotMaxTime)});return r}const lc=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];function cc(e,t,n,r,i){let s=new Date(0),o=e,a=ft(0),l=n||function(e){let t,n,r;for(t=lc.length-1;t>=0;t-=1)if(n=ft(lc[t]),r=bt(n,e),null!==r&&r>1)return n;return e}(r),c=[];for(;yt(o)table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-arrow,.fc .fc-timegrid-now-indicator-line{pointer-events:none}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}');var uc=Oo({name:"@fullcalendar/timegrid",initialView:"timeGridWeek",optionRefiners:{allDaySlot:Boolean},views:{timeGrid:{component:class extends Hl{constructor(){super(...arguments),this.buildTimeColsModel=Gt(dc),this.buildSlatMetas=Gt(cc)}render(){let{options:e,dateEnv:t,dateProfileGenerator:n}=this.context,{props:r}=this,{dateProfile:i}=r,s=this.buildTimeColsModel(i,n),o=this.allDaySplitter.splitProps(r),a=this.buildSlatMetas(i.slotMinTime,i.slotMaxTime,e.slotLabelInterval,e.slotDuration,t),{dayMinWidth:l}=e,c=!l,d=l,u=e.dayHeaders&&p(Rs,{dates:s.headerDates,dateProfile:i,datesRepDistinctDays:!0,renderIntro:c?this.renderHeadAxis:null}),h=!1!==e.allDaySlot&&(t=>p(Cl,Object.assign({},o.allDay,{dateProfile:i,dayTableModel:s,nextDayThreshold:e.nextDayThreshold,tableMinWidth:t.tableMinWidth,colGroupNode:t.tableColGroupNode,renderRowIntro:c?this.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:this.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:r.forPrint},this.getAllDayMaxEventProps()))),f=t=>p(oc,Object.assign({},o.timed,{dayTableModel:s,dateProfile:i,axis:c,slotDuration:e.slotDuration,slatMetas:a,forPrint:r.forPrint,tableColGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,clientWidth:t.clientWidth,clientHeight:t.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:t.expandRows,onScrollTopRequest:this.handleScrollTopRequest}));return d?this.renderHScrollLayout(u,h,f,s.colCnt,l,a,this.state.slatCoords):this.renderSimpleLayout(u,h,f)}},usesMinMaxTime:!0,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});class hc extends Vn{constructor(){super(...arguments),this.state={textId:Le()}}render(){let{theme:e,dateEnv:t,options:n,viewApi:r}=this.context,{cellId:i,dayDate:s,todayRange:o}=this.props,{textId:a}=this.state,l=Fi(s,o),c=n.listDayFormat?t.format(s,n.listDayFormat):"",d=n.listDaySideFormat?t.format(s,n.listDaySideFormat):"",u=Object.assign({date:t.toDate(s),view:r,textId:a,text:c,sideText:d,navLinkAttrs:qi(this.context,s),sideNavLinkAttrs:qi(this.context,s,"day",!1)},l);return p($n,{elTag:"tr",elClasses:["fc-list-day",...Vi(l,e)],elAttrs:{"data-date":Lt(s)},renderProps:u,generatorName:"dayHeaderContent",customGenerator:n.dayHeaderContent,defaultGenerator:fc,classNameGenerator:n.dayHeaderClassNames,didMount:n.dayHeaderDidMount,willUnmount:n.dayHeaderWillUnmount},t=>p("th",{scope:"colgroup",colSpan:3,id:i,"aria-labelledby":a},p(t,{elTag:"div",elClasses:["fc-list-day-cushion",e.getClass("tableCellShaded")]})))}}function fc(e){return p(y,null,e.text&&p("a",Object.assign({id:e.textId,className:"fc-list-day-text"},e.navLinkAttrs),e.text),e.sideText&&p("a",Object.assign({"aria-hidden":!0,className:"fc-list-day-side-text"},e.sideNavLinkAttrs),e.sideText))}const gc=an({hour:"numeric",minute:"2-digit",meridiem:"short"});class pc extends Vn{render(){let{props:e,context:t}=this,{options:n}=t,{seg:r,timeHeaderId:i,eventHeaderId:s,dateHeaderId:o}=e,a=n.eventTimeFormat||gc;return p(ro,Object.assign({},e,{elTag:"tr",elClasses:["fc-list-event",r.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>function(e,t){let n=vi(e,t);return p("a",Object.assign({},n),e.eventRange.def.title)}(r,t),seg:r,timeText:"",disableDragging:!0,disableResizing:!0}),(e,n)=>p(y,null,function(e,t,n,r,i){let{options:s}=n;if(!1!==s.displayEventTime){let o,a=e.eventRange.def,l=e.eventRange.instance,c=!1;if(a.allDay?c=!0:dr(e.eventRange.range)?e.isStart?o=fi(e,t,n,null,null,l.range.start,e.end):e.isEnd?o=fi(e,t,n,null,null,e.start,l.range.end):c=!0:o=fi(e,t,n),c){let e={text:n.options.allDayText,view:n.viewApi};return p($n,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${r} ${i}`},renderProps:e,generatorName:"allDayContent",customGenerator:s.allDayContent,defaultGenerator:mc,classNameGenerator:s.allDayClassNames,didMount:s.allDayDidMount,willUnmount:s.allDayWillUnmount})}return p("td",{className:"fc-list-event-time"},o)}return null}(r,a,t,i,o),p("td",{"aria-hidden":!0,className:"fc-list-event-graphic"},p("span",{className:"fc-list-event-dot",style:{borderColor:n.borderColor||n.backgroundColor}})),p(e,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${s} ${o}`}})))}}function mc(e){return e.text}function vc(e){return e.text}function yc(e){let t=Mt(e.renderRange.start),n=e.renderRange.end,r=[],i=[];for(;t*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}');function bc(e){return!1===e?null:an(e)}var Ec=Oo({name:"@fullcalendar/list",optionRefiners:{listDayFormat:bc,listDaySideFormat:bc,noEventsClassNames:yn,noEventsContent:yn,noEventsDidMount:yn,noEventsWillUnmount:yn},views:{list:{component:class extends ls{constructor(){super(...arguments),this.computeDateVars=Gt(yc),this.eventStoreToSegs=Gt(this._eventStoreToSegs),this.state={timeHeaderId:Le(),eventHeaderId:Le(),dateHeaderIdRoot:Le()},this.setRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t}=this,{dayDates:n,dayRanges:r}=this.computeDateVars(e.dateProfile),i=this.eventStoreToSegs(e.eventStore,e.eventUiBases,r);return p(Kn,{elRef:this.setRootEl,elClasses:["fc-list",t.theme.getClass("table"),!1!==t.options.stickyHeaderDates?"fc-list-sticky":""],viewSpec:t.viewSpec},p(Ls,{liquid:!e.isHeightAuto,overflowX:e.isHeightAuto?"visible":"hidden",overflowY:e.isHeightAuto?"visible":"auto"},i.length>0?this.renderSegList(i,n):this.renderEmptyMessage()))}renderEmptyMessage(){let{options:e,viewApi:t}=this.context,n={text:e.noEventsText,view:t};return p($n,{elTag:"div",elClasses:["fc-list-empty"],renderProps:n,generatorName:"noEventsContent",customGenerator:e.noEventsContent,defaultGenerator:vc,classNameGenerator:e.noEventsClassNames,didMount:e.noEventsDidMount,willUnmount:e.noEventsWillUnmount},e=>p(e,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(e,t){let{theme:n,options:r}=this.context,{timeHeaderId:i,eventHeaderId:s,dateHeaderIdRoot:o}=this.state,a=function(e){let t,n,r=[];for(t=0;t{let c=[];for(let n=0;n{e&&this.updateSize()}}render(){const{context:e,props:t,state:n}=this,{options:r}=e,{clientWidth:i,clientHeight:s}=n,o=n.monthHPadding||0,a=Math.min(null!=i?Math.floor(i/(r.multiMonthMinWidth+o)):1,r.multiMonthMaxColumns)||1,l=100/a+"%",c=null==i?null:i/a-o,d=null!=i&&1===a,u=this.splitDateProfileByMonth(e.dateProfileGenerator,t.dateProfile,e.dateEnv,!d&&r.fixedWeekCount,r.showNonCurrentDates),h=this.buildMonthFormat(r.multiMonthTitleFormat,u),f=["fc-multimonth",d?"fc-multimonth-singlecol":"fc-multimonth-multicol",null!=c&&c<400?"fc-multimonth-compact":"",t.isHeightAuto?"":"fc-scroller"];return p(Kn,{elRef:this.scrollElRef,elClasses:f,viewSpec:e.viewSpec},u.map((e,n)=>{const r=Wt(e.currentRange.start);return p(Sc,Object.assign({},t,{key:r,isoDateStr:r,elRef:0===n?this.firstMonthElRef:void 0,titleFormat:h,dateProfile:e,width:l,tableWidth:c,clientWidth:i,clientHeight:s}))}))}componentDidMount(){this.updateSize(),this.context.addResizeHandler(this.handleSizing),this.requestScrollReset()}componentDidUpdate(e){Cn(e,this.props)||this.handleSizing(!1),e.dateProfile!==this.props.dateProfile?this.requestScrollReset():this.flushScrollReset()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}updateSize(){const e=this.scrollElRef.current,t=this.firstMonthElRef.current;e&&this.setState({clientWidth:e.clientWidth,clientHeight:e.clientHeight}),t&&e&&null==this.state.monthHPadding&&this.setState({monthHPadding:e.clientWidth-t.firstChild.offsetWidth})}requestScrollReset(){this.needsScrollReset=!0,this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&null!=this.state.monthHPadding){const{currentDate:e}=this.props.dateProfile,t=this.scrollElRef.current,n=t.querySelector(`[data-date="${Wt(e)}"]`);t.scrollTop=n.getBoundingClientRect().top-this.firstMonthElRef.current.getBoundingClientRect().top,this.needsScrollReset=!1}}shouldComponentUpdate(){return!0}},dateProfileGeneratorClass:xl,multiMonthMinWidth:350,multiMonthMaxColumns:3},multiMonthYear:{type:"multiMonth",duration:{years:1},fixedWeekCount:!0,showNonCurrentDates:!1}}});return aa.push(Ka,Tl,uc,Ec,_c),e.Calendar=class extends Ni{constructor(e,t={}){super(),this.isRendering=!1,this.isRendered=!1,this.currentClassNames=[],this.customContentRenderId=0,this.handleAction=e=>{switch(e.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":this.renderRunner.tryDrain()}},this.handleData=e=>{this.currentData=e,this.renderRunner.request(e.calendarOptions.rerenderDelay)},this.handleRenderRequest=()=>{if(this.isRendering){this.isRendered=!0;let{currentData:e}=this;Bn(()=>{U(p(_i,{options:e.calendarOptions,theme:e.theme,emitter:e.emitter},(t,n,r,i)=>(this.setClassNames(t),this.setHeight(n),p(Xn.Provider,{value:this.customContentRenderId},p(xa,Object.assign({isHeightAuto:r,forPrint:i},e))))),this.el)})}else this.isRendered&&(this.isRendered=!1,U(null,this.el),this.setClassNames([]),this.setHeight(""))},function(e){e.isConnected&&e.getRootNode&&_e(e.getRootNode())}(e),this.el=e,this.renderRunner=new Me(this.handleRenderRequest),new ua({optionOverrides:t,calendarApi:this,onAction:this.handleAction,onData:this.handleData})}render(){let e=this.isRendering;e?this.customContentRenderId+=1:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()}destroy(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())}updateSize(){Bn(()=>{super.updateSize()})}batchRendering(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")}pauseRendering(){this.renderRunner.pause("pauseRendering")}resumeRendering(){this.renderRunner.resume("pauseRendering",!0)}resetOptions(e,t){this.currentDataManager.resetOptions(e,t)}setClassNames(e){if(!St(e,this.currentClassNames)){let{classList:t}=this.el;for(let e of this.currentClassNames)t.remove(e);for(let n of e)t.add(n);this.currentClassNames=e}}setHeight(e){je(this.el,"height",e)}},e.Draggable=class{constructor(e,t={}){this.handlePointerDown=e=>{let{dragging:t}=this,{minDistance:n,longPressDelay:r}=this.settings;t.minDistance=null!=n?n:e.isTouch?0:cn.eventDragMinDistance,t.delay=e.isTouch?null!=r?r:cn.longPressDelay:0},this.handleDragStart=e=>{e.isTouch&&this.dragging.delay&&e.subjectEl.classList.contains("fc-event")&&this.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")},this.settings=t;let n=this.dragging=new Wa(e);n.touchScrollAllowed=!1,null!=t.itemSelector&&(n.pointer.selector=t.itemSelector),null!=t.appendTo&&(n.mirror.parentNode=t.appendTo),n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragstart",this.handleDragStart),new $a(n,t.eventData)}destroy(){this.dragging.destroy()}},e.Internal=Co,e.JsonRequestError=wi,e.Preact=Ro,e.ThirdPartyDraggable=class{constructor(e,t){let n=document;e===document||e instanceof Element?(n=e,t=t||{}):t=e||{};let r=this.dragging=new Ja(n);"string"==typeof t.itemSelector?r.pointer.selector=t.itemSelector:n===document&&(r.pointer.selector="[data-event]"),"string"==typeof t.mirrorSelector&&(r.mirrorSelector=t.mirrorSelector),new $a(r,t.eventData).hitDragging.disablePointCheck=!0}destroy(){this.dragging.destroy()}},e.createPlugin=Oo,e.formatDate=function(e,t={}){let n=ka(t),r=an(t),i=n.createMarkerMeta(e);return i?n.format(i.marker,r,{forcedTzo:i.forcedTzo}):""},e.formatRange=function(e,t,n){let r=ka("object"==typeof n&&n?n:{}),i=an(n),s=r.createMarkerMeta(e),o=r.createMarkerMeta(t);return s&&o?r.formatRange(s.marker,o.marker,i,{forcedStartTzo:s.forcedTzo,forcedEndTzo:o.forcedTzo,isEndExclusive:n.isEndExclusive,defaultSeparator:cn.defaultRangeSeparator}):""},e.globalLocales=xo,e.globalPlugins=aa,e.sliceEvents=function(e,t){return ni(e.eventStore,e.eventUiBases,e.dateProfile.activeRange,t?e.nextDayThreshold:null).fg},e.version="6.1.18",Object.defineProperty(e,"__esModule",{value:!0}),e}({}); \ No newline at end of file diff --git a/legacy/smartadmin/plugins/highlightjs/go.min.js b/legacy/smartadmin/plugins/highlightjs/go.min.js new file mode 100644 index 0000000..fdb009a --- /dev/null +++ b/legacy/smartadmin/plugins/highlightjs/go.min.js @@ -0,0 +1,20 @@ +/*! `go` grammar compiled for Highlight.js 11.11.1 */ +(()=>{var e=(()=>{"use strict";return e=>{const a={ +keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], +type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], +literal:["true","false","iota","nil"], +built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] +};return{name:"Go",aliases:["golang"],keywords:a,illegal:" and other contributors + License: BSD-3-Clause + */ +var hljs=function(){"use strict";function e(n){ +return n instanceof Map?n.clear=n.delete=n.set=()=>{ +throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ +const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a) +})),n}class n{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] +;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope +;class r{constructor(e,n){ +this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ +this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const t=e.split(".") +;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") +}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} +closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const s=(e={})=>{const n={children:[]} +;return Object.assign(n,e),n};class o{constructor(){ +this.rootNode=s(),this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const n=s({scope:e}) +;this.add(n),this.stack.push(n)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ +return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), +n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,n){const t=e.root +;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ +return new r(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function c(e){ +return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")} +function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")} +function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{ +const n=e[e.length-1] +;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} +})(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t +;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break} +i+=a.substring(0,e.index), +a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], +"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} +const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",v="\\b(0b[01]+)",N={ +begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[N]},x={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[N]},O=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n, +contains:[]},t);i.contains.push({scope:"doctag", +begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", +end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) +;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i +},M=O("//","$"),A=O("/\\*","\\*/"),S=O("#","$");var C=Object.freeze({ +__proto__:null,APOS_STRING_MODE:k,BACKSLASH_ESCAPE:N,BINARY_NUMBER_MODE:{ +scope:"number",begin:v,relevance:0},BINARY_NUMBER_RE:v,COMMENT:O, +C_BLOCK_COMMENT_MODE:A,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number", +begin:w,relevance:0},C_NUMBER_RE:w,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:S,IDENT_RE:f, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0}, +NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, +PHRASAL_WORDS_MODE:{ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},QUOTE_STRING_MODE:x,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[N,{begin:/\[/,end:/\]/,relevance:0,contains:[N]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const n=/^#![ ]*\// +;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, +end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){ +"."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){ +n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function I(e,n){ +Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){ +if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function B(e,n){ +void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return +;if(e.starts)throw Error("beforeMatch cannot be used with starts") +;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] +})),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={ +relevance:0,contains:[Object.assign(t,{endsParent:!0})] +},e.relevance=0,delete t.beforeMatch +},F=["of","and","for","in","not","or","if","then","parent","list","value"] +;function z(e,n,t="keyword"){const a=Object.create(null) +;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ +Object.assign(a,z(e[t],n,t))})),a;function i(e,t){ +n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") +;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ +return n?Number(n):(e=>F.includes(e.toLowerCase()))(e)?0:1}const U={},P=e=>{ +console.error(e)},K=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ +U[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),U[`${e}/${n}`]=!0) +},H=Error();function G(e,n,{key:t}){let a=0;const i=e[t],r={},s={} +;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1]) +;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function Z(e){(e=>{ +e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, +delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ +_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope +}),(e=>{if(Array.isArray(e.begin)){ +if(e.skip||e.excludeBegin||e.returnBegin)throw P("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +H +;if("object"!=typeof e.beginScope||null===e.beginScope)throw P("beginScope must be object"), +H;G(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{ +if(Array.isArray(e.end)){ +if(e.skip||e.excludeEnd||e.returnEnd)throw P("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +H +;if("object"!=typeof e.endScope||null===e.endScope)throw P("endScope must be object"), +H;G(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function W(e){ +function n(n,t){ +return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) +}class t{constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,n){ +n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|" +}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex +;const n=this.matcherRe.exec(e);if(!n)return null +;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] +;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t +;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), +n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ +this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ +const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex +;let t=n.exec(e) +;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ +const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} +return t&&(this.regexIndex+=t.position+1, +this.regexIndex===this.count&&this.considerAll()),t}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r +;if(r.isCompiled)return o +;[R,L,Z,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), +r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null +;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), +l=r.keywords.$pattern, +delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=z(r.keywords,e.case_insensitive)), +o.keywordPatternRe=n(l,!0), +s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), +r.end&&(o.endRe=n(o.end)), +o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), +r.illegal&&(o.illegalRe=n(r.illegal)), +r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ +variants:null},n)))),e.cachedVariants?e.cachedVariants:Q(e)?a(e,{ +starts:e.starts?a(e.starts):null +}):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) +})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i +;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function Q(e){ +return!!e&&(e.endsWithParent||Q(e.starts))}class X extends Error{ +constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} +const V=t,J=a,Y=Symbol("nomatch"),ee=t=>{ +const a=Object.create(null),i=Object.create(null),r=[];let s=!0 +;const o="Could not find the language '{}', did you forget to load/include a language module?",c={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ +ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +cssSelector:"pre code",languages:null,__emitter:l};function _(e){ +return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" +;"object"==typeof n?(a=e, +t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), +q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};O("before:highlight",r) +;const s=r.result?r.result:f(r.language,r.code,t) +;return s.code=r.code,O("after:highlight",s),s}function f(e,t,i,r){ +const l=Object.create(null);function c(){if(!O.keywords)return void A.addText(S) +;let e=0;O.keywordPatternRe.lastIndex=0;let n=O.keywordPatternRe.exec(S),t="" +;for(;n;){t+=S.substring(e,n.index) +;const i=v.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,O.keywords[a]);if(r){ +const[e,a]=r +;if(A.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{ +const t=v.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] +;e=O.keywordPatternRe.lastIndex,n=O.keywordPatternRe.exec(S)}var a +;t+=S.substring(e),A.addText(t)}function d(){null!=O.subLanguage?(()=>{ +if(""===S)return;let e=null;if("string"==typeof O.subLanguage){ +if(!a[O.subLanguage])return void A.addText(S) +;e=f(O.subLanguage,S,!0,M[O.subLanguage]),M[O.subLanguage]=e._top +}else e=E(S,O.subLanguage.length?O.subLanguage:null) +;O.relevance>0&&(C+=e.relevance),A.__addSublanguage(e._emitter,e.language) +})():c(),S=""}function g(e,n){ +""!==e&&(A.startScope(n),A.addText(e),A.endScope())}function u(e,n){let t=1 +;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} +const a=v.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(S=i,c(),S=""),t++}} +function b(e,n){ +return e.scope&&"string"==typeof e.scope&&A.openNode(v.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(g(S,v.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +S=""):e.beginScope._multi&&(u(e.beginScope,n),S="")),O=Object.create(e,{parent:{ +value:O}}),O}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n) +;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e) +;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return m(e.parent,t,a)}function _(e){ +return 0===O.matcher.regexIndex?(S+=e[0],1):(D=!0,0)}function h(e){ +const n=e[0],a=t.substring(e.index),i=m(O,e,a);if(!i)return Y;const r=O +;O.endScope&&O.endScope._wrap?(d(), +g(n,O.endScope._wrap)):O.endScope&&O.endScope._multi?(d(), +u(O.endScope,e)):r.skip?S+=n:(r.returnEnd||r.excludeEnd||(S+=n), +d(),r.excludeEnd&&(S=n));do{ +O.scope&&A.closeNode(),O.skip||O.subLanguage||(C+=O.relevance),O=O.parent +}while(O!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length} +let y={};function w(a,r){const o=r&&r[0];if(S+=a,null==o)return d(),0 +;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){ +if(S+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) +;throw n.languageName=e,n.badRule=y.rule,n}return 1} +if(y=r,"begin"===r.type)return(e=>{ +const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]] +;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t) +;return a.skip?S+=t:(a.excludeBegin&&(S+=t), +d(),a.returnBegin||a.excludeBegin||(S=t)),b(a,e),a.returnBegin?0:t.length})(r) +;if("illegal"===r.type&&!i){ +const e=Error('Illegal lexeme "'+o+'" for mode "'+(O.scope||"")+'"') +;throw e.mode=O,e}if("end"===r.type){const e=h(r);if(e!==Y)return e} +if("illegal"===r.type&&""===o)return S+="\n",1 +;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches") +;return S+=o,o.length}const v=N(e) +;if(!v)throw P(o.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const k=W(v);let x="",O=r||k;const M={},A=new p.__emitter(p);(()=>{const e=[] +;for(let n=O;n!==v;n=n.parent)n.scope&&e.unshift(n.scope) +;e.forEach((e=>A.openNode(e)))})();let S="",C=0,T=0,R=0,D=!1;try{ +if(v.__emitTokens)v.__emitTokens(t,A);else{for(O.matcher.considerAll();;){ +R++,D?D=!1:O.matcher.considerAll(),O.matcher.lastIndex=T +;const e=O.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e) +;T=e.index+n}w(t.substring(T))}return A.finalize(),x=A.toHTML(),{language:e, +value:x,relevance:C,illegal:!1,_emitter:A,_top:O}}catch(n){ +if(n.message&&n.message.includes("Illegal"))return{language:e,value:V(t), +illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, +context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:x},_emitter:A};if(s)return{ +language:e,value:V(t),illegal:!1,relevance:0,errorRaised:n,_emitter:A,_top:O} +;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ +const n={value:V(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)} +;return n._emitter.addText(e),n})(e),i=n.filter(N).filter(x).map((n=>f(n,e,!1))) +;i.unshift(t);const r=i.sort(((e,n)=>{ +if(e.relevance!==n.relevance)return n.relevance-e.relevance +;if(e.language&&n.language){if(N(e.language).supersetOf===n.language)return 1 +;if(N(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s +;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{ +let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" +;const t=p.languageDetectRe.exec(n);if(t){const n=N(t[1]) +;return n||(K(o.replace("{}",t[1])), +K("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} +return n.split(/\s+/).find((e=>_(e)||N(e)))})(e);if(_(t))return +;if(O("before:highlightElement",{el:e,language:t +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), +console.warn("The element with unescaped HTML:"), +console.warn(e)),p.throwUnescapedHTML))throw new X("One of your code blocks includes unescaped HTML.",e.innerHTML) +;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) +;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t +;e.classList.add("hljs"),e.classList.add("language-"+a) +})(e,t,r.language),e.result={language:r.language,re:r.relevance, +relevance:r.relevance},r.secondBest&&(e.secondBest={ +language:r.secondBest.language,relevance:r.secondBest.relevance +}),O("after:highlightElement",{el:e,result:r,text:a})}let w=!1;function v(){ +if("loading"===document.readyState)return w||window.addEventListener("DOMContentLoaded",(()=>{ +v()}),!1),void(w=!0);document.querySelectorAll(p.cssSelector).forEach(y)} +function N(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} +function k(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +i[e.toLowerCase()]=n}))}function x(e){const n=N(e) +;return n&&!n.disableAutodetect}function O(e,n){const t=e;r.forEach((e=>{ +e[t]&&e[t](n)}))}Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:v, +highlightElement:y, +highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), +q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=J(p,e)}, +initHighlighting:()=>{ +v(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +initHighlightingOnLoad:()=>{ +v(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){ +if(P("Language definition for '{}' could not be registered.".replace("{}",e)), +!s)throw n;P(n),i=c} +i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&k(i.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete a[e] +;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, +listLanguages:()=>Object.keys(a),getLanguage:N,registerAliases:k, +autoDetection:x,inherit:J,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ +e["before:highlightBlock"](Object.assign({block:n.el},n)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ +e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}, +removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{ +s=!1},t.safeMode=()=>{s=!0},t.versionString="11.11.1",t.regex={concat:b, +lookahead:d,either:m,optional:u,anyNumberOfTimes:g} +;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t +},ne=ee({});ne.newInstance=()=>ee({});const te=e=>({IMPORTANT:{scope:"meta", +begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ +scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, +FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, +ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", +contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ +scope:"number", +begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} +}),ae=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],ie=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),re=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),se=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),oe=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),le=re.concat(se).sort().reverse() +;var ce="[0-9](_*[0-9])*",de=`\\.(${ce})`,ge="[0-9a-fA-F](_*[0-9a-fA-F])*",ue={ +className:"number",variants:[{ +begin:`(\\b(${ce})((${de})|\\.)?|(${de}))[eE][+-]?(${ce})[fFdD]?\\b`},{ +begin:`\\b(${ce})((${de})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${de})[fFdD]?\\b`},{begin:`\\b(${ce})[fFdD]\\b`},{ +begin:`\\b0[xX]((${ge})\\.?|(${ge})?\\.(${ge}))[pP][+-]?(${ce})[fFdD]?\\b`},{ +begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${ge})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};function be(e,n,t){return-1===t?"":e.replace(n,(a=>be(e,n,t-1)))} +const me="[A-Za-z$_][0-9A-Za-z$_]*",pe=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],_e=["true","false","null","undefined","NaN","Infinity"],he=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],fe=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ee=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ye=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],we=[].concat(Ee,he,fe) +;function ve(e){const n=e.regex,t=me,a={begin:/<[A-Za-z0-9\\._:-]+/, +end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ +const t=e[0].length+e.index,a=e.input[t] +;if("<"===a||","===a)return void n.ignoreMatch();let i +;">"===a&&(((e,{after:n})=>{const t="e+"\\s*\\(")), +n.concat("(?!",N.join("|"),")")),t,n.lookahead(/\s*\(/)), +className:"title.function",relevance:0};var N;const k={ +begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t, +excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},x={ +match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"}, +contains:[{begin:/\(\)/},f] +},O="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",M={ +match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(O)], +keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]} +;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ +PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, +contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ +label:"use_strict",className:"meta",relevance:10, +begin:/^\s*['"]use (strict|asm)['"]/ +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{ +scope:"attr",match:t+n.lookahead(":"),relevance:0},M,{ +begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", +keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{ +className:"function",begin:O,returnBegin:!0,end:"\\s*=>",contains:[{ +className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ +className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/, +excludeBegin:!0,excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0 +},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{ +match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, +"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ +begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},w,{ +beginKeywords:"while if switch catch for"},{ +begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t, +className:"title.function"})]},{match:/\.\.\./,relevance:0},k,{match:"\\$"+t, +relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, +contains:[f]},v,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},E,x,{match:/\$[(.]/}]}} +const Ne=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),ke=["Protocol","Type"].map(Ne),xe=["init","self"].map(Ne),Oe=["Any","Self"],Me=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ae=["false","nil","true"],Se=["assignment","associativity","higherThan","left","lowerThan","none","right"],Ce=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],Te=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Re=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),De=m(Re,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Ie=b(Re,De,"*"),Le=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),Be=m(Le,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),$e=b(Le,Be,"*"),Fe=b(/[A-Z]/,Be,"*"),ze=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,$e,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],je=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] +;var Ue=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ +begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} +;Object.assign(t,{className:"variable",variants:[{ +begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE] +},r=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),s={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(o);const l={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},c=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[c,e.SHEBANG(),d,l,r,s,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{ +className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},grmr_c:e=>{ +const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ +match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{match:/\b(0b[01']+)/},{ +match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/ +},{ +match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/ +},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0 +},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], +type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"], +literal:"true false NULL", +built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" +},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:b.concat(["self"]),relevance:0}]),relevance:0},p={ +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], +relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, +keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/, +end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s] +}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, +disableAutodetect:!0,illegal:"=]/,contains:[{ +beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, +strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{ +begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)" +},{ +begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},b={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function", +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, +contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u, +relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}] +},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ +keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"]), +built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], +literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ +begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ +begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] +},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, +keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, +end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ +},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ +begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, +contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) +;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], +o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ +illegal:/\n/})];const g={variants:[{className:"string", +begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1 +},c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u={begin:"<",end:">", +contains:[{beginKeywords:"in out"},t] +},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ +begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], +keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, +contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ +begin:"\x3c!--|--\x3e"},{begin:""}]}] +}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", +end:"$",keywords:{ +keyword:"if else elif endif define undef warning error line region endregion pragma checksum" +}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, +illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" +},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", +relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", +begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ +className:"string",begin:/"/,end:/"/}]},{ +beginKeywords:"new return throw await else",relevance:0},{className:"function", +begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", +relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", +begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, +contains:[g,a,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ +const n=e.regex,t=te(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ +name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ +keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, +contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ +},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 +},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+re.join("|")+")"},{begin:":(:)?("+se.join("|")+")"}] +},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b"},{ +begin:/:/,end:/[;}{]/, +contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, +excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", +relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ +},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:ie.join(" ")},contains:[{ +begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ +className:"selector-tag",begin:"\\b("+ae.join("|")+")\\b"}]}},grmr_diff:e=>{ +const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ +className:"meta",relevance:10, +match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) +},{className:"comment",variants:[{ +begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), +end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ +className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, +end:/$/}]}},grmr_go:e=>{const n={ +keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], +type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], +literal:["true","false","iota","nil"], +built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] +};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex +;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1, +keywords:{ +keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], +literal:["true","false","null"]}, +contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ +scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", +begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, +end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ +scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), +relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ +className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ +begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, +end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ +begin:/\$\{(.*?)\}/}]},r={className:"literal", +begin:/\bon|off|true|false|yes|no\b/},s={className:"string", +contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ +begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] +},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 +},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ +name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, +contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ +begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), +className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ +const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+be("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ +keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"], +literal:["false","true","null"], +type:["char","boolean","long","float","int","byte","short","double"], +built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ +begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} +;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, +relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ +begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, +className:"string",contains:[e.BACKSLASH_ESCAPE] +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ +match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ +1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ +begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", +3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", +3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"new throw return else",relevance:0},{ +begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ +2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0, +contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,ue,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},ue,r]}},grmr_javascript:ve, +grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", +beginKeywords:n.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{ +literal:n},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/, +relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], +illegal:"\\S"}},grmr_kotlin:e=>{const n={ +keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", +built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", +literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" +},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ +className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", +variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", +illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, +contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ +className:"meta", +begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" +},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, +end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] +},l=ue,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ +variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, +contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], +{name:"Kotlin",aliases:["kt","kts"],keywords:n, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", +begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", +begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", +begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", +returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, +keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, +endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, +endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 +},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ +begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ +3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, +illegal:"extends implements",contains:[{ +beginKeywords:"public protected internal private constructor" +},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, +excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, +excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", +end:"$",illegal:"\n"},l]}},grmr_less:e=>{ +const n=te(e),t=le,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({ +className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n, +relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only", +attribute:ie.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c, +relevance:0} +;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{ +begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", +excludeEnd:!0} +},n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{ +className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 +},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({ +begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0, +contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:", +returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ +},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b", +end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}] +},m={className:"keyword", +begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", +starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={ +className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a +}],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{ +begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0, +returnEnd:!0,illegal:"[<='$\"]",relevance:0, +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{ +begin:"\\b("+ae.join("|")+")\\b",className:"selector-tag" +},n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ +className:"selector-pseudo",begin:":("+re.join("|")+")"},{ +className:"selector-pseudo",begin:":(:)?("+se.join("|")+")"},{begin:/\(/, +end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={ +begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]} +;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH), +{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}}, +grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] +},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10 +})];return{name:"Lua",aliases:["pluto"],keywords:{ +$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil", +keyword:"and break do else elseif end for goto if in local not or repeat return then until while", +built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" +},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", +contains:[e.inherit(e.TITLE_MODE,{ +begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", +begin:"\\(",endsWithParent:!0,contains:i}].concat(i) +},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", +begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ +className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ +const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={ +variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ +begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, +relevance:2},{ +begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), +relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ +begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ +},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, +returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], +variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] +},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ +begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] +}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) +;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) +})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ +begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", +contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, +end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ +begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ +begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", +contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ +begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal", +match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}, +grmr_objectivec:e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, +keyword:["@interface","@class","@protocol","@implementation"]};return{ +name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], +keywords:{"variable.language":["this","super"],$pattern:n, +keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], +literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], +built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], +type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] +},illegal:"/,end:/$/,illegal:"\\n" +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", +begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, +contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, +relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ +$pattern:/[\w.]+/, +keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot class close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl field fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map method mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" +},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, +end:/\}/},s={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},o={scope:"variable", +variants:[{begin:/\$\d/},{ +begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") +},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[s]},l={ +className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{ +match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{ +match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{ +match:/\b0b[0-1][0-1_]*\b/}],relevance:0 +},c=[e.BACKSLASH_ESCAPE,i,o],d=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,a,i="\\1")=>{ +const r="\\1"===i?i:n.concat(i,a) +;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) +},u=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),b=[o,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ +endsWithParent:!0}),r,{className:"string",contains:c,variants:[{ +begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", +end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ +begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", +relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", +contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ +begin:"-?\\w+\\s*=>",relevance:0}]},l,{ +begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", +keywords:"split return print reverse grep",relevance:0, +contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ +begin:g("s|tr|y",n.either(...d,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{ +begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{ +className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ +begin:u("(?:m|qr)?",/\//,/\//)},{begin:u("m|qr",n.either(...d,{capture:!0 +}),/\1/)},{begin:u("m|qr",/\(/,/\)/)},{begin:u("m|qr",/\[/,/\]/)},{ +begin:u("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method", +end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s] +},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5, +contains:[e.TITLE_MODE,s,l]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$", +end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$", +className:"comment"}]}];return i.contains=b,r.contains=b,{name:"Perl", +aliases:["pl","pm"],keywords:a,contains:b}},grmr_php:e=>{ +const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r=n.concat(/[A-Z]+/,t),s={ +scope:"variable",match:"\\$+"+a},o={scope:"subst",variants:[{begin:/\$\w+/},{ +begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null +}),c="[ \t\n]",d={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ +illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(o)}),l,{ +begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, +contains:e.QUOTE_STRING_MODE.contains.concat(o),"on:begin":(e,n)=>{ +n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({ +begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},g={scope:"number",variants:[{ +begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ +begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ +begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" +}],relevance:0 +},u=["false","null","true"],b=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],m=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],p={ +keyword:b,literal:(e=>{const n=[];return e.forEach((e=>{ +n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) +})),n})(u),built_in:m},_=e=>e.map((e=>e.replace(/\|\d+$/,""))),h={variants:[{ +match:[/new/,n.concat(c,"+"),n.concat("(?!",_(m).join("\\b|"),"\\b)"),i],scope:{ +1:"keyword",4:"title.class"}}]},f=n.concat(a,"\\b(?!\\()"),E={variants:[{ +match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),f],scope:{2:"variable.constant" +}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ +match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),f],scope:{1:"title.class", +3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], +scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", +3:"variable.language"}}]},y={scope:"attr", +match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},w={relevance:0, +begin:/\(/,end:/\)/,keywords:p,contains:[y,s,E,e.C_BLOCK_COMMENT_MODE,d,g,h] +},v={relevance:0, +match:[/\b/,n.concat("(?!fn\\b|function\\b|",_(b).join("\\b|"),"|",_(m).join("\\b|"),"\\b)"),a,n.concat(c,"*"),n.lookahead(/(?=\()/)], +scope:{3:"title.function.invoke"},contains:[w]};w.contains.push(v) +;const N=[y,E,e.C_BLOCK_COMMENT_MODE,d,g,h],k={ +begin:n.concat(/#\[\s*\\?/,n.either(i,r)),beginScope:"meta",end:/]/, +endScope:"meta",keywords:{literal:u,keyword:["new","array"]},contains:[{ +begin:/\[/,end:/]/,keywords:{literal:u,keyword:["new","array"]}, +contains:["self",...N]},...N,{scope:"meta",variants:[{match:i},{match:r}]}]} +;return{case_insensitive:!1,keywords:p, +contains:[k,e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{ +contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, +keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, +contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ +begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ +begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},s,v,E,{ +match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},h,{ +scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, +excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" +},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", +begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:p, +contains:["self",k,s,E,e.C_BLOCK_COMMENT_MODE,d,g]}]},{scope:"class",variants:[{ +beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", +illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ +beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, +contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ +beginKeywords:"use",relevance:0,end:";",contains:[{ +match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},d,g]} +},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ +begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", +end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 +},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, +skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, +contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", +aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ +const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ +$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, +built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], +literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], +type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] +},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, +end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ +className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, +end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, +relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ +begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, +end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, +contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ +className:"number",relevance:0,variants:[{ +begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ +begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ +begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` +},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` +}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, +contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ +className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, +end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, +contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ +name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, +illegal:/(<\/|\?)|=>/,contains:[r,u,{scope:"variable.language",match:/\bself\b/ +},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword" +},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword", +3:"title.function"},contains:[m]},{variants:[{ +match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], +scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ +className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, +grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", +starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ +begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ +const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) +;return{name:"R",keywords:{$pattern:t, +keyword:"function if in break next repeat else for while", +literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", +built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" +},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, +starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), +endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ +scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 +}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] +}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], +variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', +relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ +1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, +match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ +2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, +match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ +match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", +contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ +const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ +"variable.constant":["__FILE__","__LINE__","__ENCODING__"], +"variable.language":["self","super"], +keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], +built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], +literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ +begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] +}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 +}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, +end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ +begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ +begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, +end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ +begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ +begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ +begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ +begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ +begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), +contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, +contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", +relevance:0,variants:[{ +begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ +begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" +},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ +begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ +begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ +className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, +keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ +match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", +4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ +2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ +1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ +match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ +begin:e.IDENT_RE+"::"},{className:"symbol", +begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", +begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", +begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ +className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0, +relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", +keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], +illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ +begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", +end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) +;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} +},{className:"meta.prompt", +begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", +starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", +aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, +contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, +grmr_rust:e=>{ +const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),i=n.concat(t,e.IDENT_RE),r={ +className:"title.function.invoke",relevance:0, +begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,i,n.lookahead(/\s*\(/)) +},s="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],l=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] +;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:l, +keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"], +literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:""},r]}}, +grmr_scss:e=>{const n=te(e),t=se,a=re,i="@[a-z-]+",r={className:"variable", +begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", +case_insensitive:!0,illegal:"[=/|']", +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ +className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ +className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 +},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", +begin:"\\b("+ae.join("|")+")\\b",relevance:0},{className:"selector-pseudo", +begin:":("+a.join("|")+")"},{className:"selector-pseudo", +begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, +contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", +begin:"\\b("+oe.join("|")+")\\b"},{ +begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" +},{begin:/:/,end:/[;}{]/,relevance:0, +contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] +},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ +begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, +keyword:"and or not only",attribute:ie.join(" ")},contains:[{begin:i, +className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" +},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] +},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", +aliases:["console","shellsession"],contains:[{className:"meta.prompt", +begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, +subLanguage:"bash"}}]}),grmr_sql:e=>{ +const n=e.regex,t=e.COMMENT("--","$"),a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],i=a,r=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),s={ +match:n.concat(/\b/,n.either(...i),/\s*\(/),relevance:0,keywords:{built_in:i}} +;function o(e){ +return n.concat(/\b/,n.either(...e.map((e=>e.replace(/\s+/,"\\s+")))),/\b/)} +const l={scope:"keyword", +match:o(["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"]), +relevance:0};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ +$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t +;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) +})(r,{when:e=>e.length<3}),literal:["true","false","unknown"], +type:["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"], +built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] +},contains:[{scope:"type", +match:o(["double precision","large object","with timezone","without timezone"]) +},l,s,{scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},{scope:"string",variants:[{ +begin:/'/,end:/'/,contains:[{match:/''/}]}]},{begin:/"/,end:/"/,contains:[{ +match:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{scope:"operator", +match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}, +grmr_swift:e=>{const n={match:/\s+/,relevance:0},t=e.COMMENT("/\\*","\\*/",{ +contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={match:[/\./,m(...ke,...xe)], +className:{2:"keyword"}},r={match:b(/\./,m(...Me)),relevance:0 +},s=Me.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ +className:"keyword", +match:m(...Me.filter((e=>"string"!=typeof e)).concat(Oe).map(Ne),...xe)}]},l={ +$pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Ce),literal:Ae},c=[i,r,o],g=[{ +match:b(/\./,m(...Te)),relevance:0},{className:"built_in", +match:b(/\b/,m(...Te),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{ +className:"operator",relevance:0,variants:[{match:Ie},{match:`\\.(\\.|${De})+`}] +}],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0, +variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{ +match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/ +},{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{ +match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] +}),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) +}),w=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/ +}),v=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),w(e)] +}),N=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),w(e)]}),k={ +className:"string", +variants:[v(),v("#"),v("##"),v("###"),N(),N("#"),N("##"),N("###")] +},x=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, +contains:[e.BACKSLASH_ESCAPE]}],O={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, +contains:x},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t, +contains:[...x,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},A={ +scope:"regexp",variants:[M("###"),M("##"),M("#"),O]},S={match:b(/`/,$e,/`/) +},C=[S,{className:"variable",match:/\$\d+/},{className:"variable", +match:`\\$${Be}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ +contains:[{begin:/\(/,end:/\)/,keywords:je,contains:[...p,f,k]}]}},{ +scope:"keyword",match:b(/@/,m(...ze),d(m(/\(/,/\s+/)))},{scope:"meta", +match:b(/@/,$e)}],R={match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type", +match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,Be,"+") +},{className:"type",match:Fe,relevance:0},{match:/[?!]+/,relevance:0},{ +match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Fe)),relevance:0}]},D={ +begin://,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D) +;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ +match:b($e,/\s*:/),keywords:"_|0",relevance:0 +},...a,A,...c,...g,...p,f,k,...C,...T,R]},L={begin://, +keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l, +contains:[{begin:m(d(b($e,/\s*:/)),d(b($e,/\s+/,$e,/\s*:/))),end:/:/, +relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params", +match:$e}]},...a,...c,...p,f,k,...T,R,I],endsParent:!0,illegal:/["']/},$={ +match:[/(func|macro)/,/\s+/,m(S.match,$e,Ie)],className:{1:"keyword", +3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},F={ +match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, +contains:[L,B,n],illegal:/\[|%/},z={match:[/operator/,/\s+/,Ie],className:{ +1:"keyword",3:"title"}},j={begin:[/precedencegroup/,/\s+/,Fe],className:{ +1:"keyword",3:"title"},contains:[R],keywords:[...Se,...Ae],end:/}/},U={ +begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,$e,/\s*/], +beginScope:{1:"keyword",3:"title.class"},keywords:l,contains:[L,...c,{begin:/:/, +end:/\{/,keywords:l,contains:[{scope:"title.class.inherited",match:Fe},...c], +relevance:0}]};for(const e of k.variants){ +const n=e.contains.find((e=>"interpol"===e.label));n.keywords=l +;const t=[...c,...g,...p,f,k,...C];n.contains=[...t,{begin:/\(/,end:/\)/, +contains:["self",...t]}]}return{name:"Swift",keywords:l,contains:[...a,$,F,{ +match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{ +1:"keyword",3:"keyword",5:"title.function"}},{match:[/class\b/,/\s+/,/var\b/], +scope:{1:"keyword",3:"keyword"}},U,z,j,{beginKeywords:"import",end:/$/, +contains:[...a],relevance:0},A,...c,...g,...p,f,k,...C,...T,R,I]}}, +grmr_typescript:e=>{ +const n=e.regex,t=ve(e),a=me,i=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],r={ +begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"} +},s={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{ +keyword:"interface extends",built_in:i},contains:[t.exports.CLASS_REFERENCE] +},o={$pattern:me, +keyword:pe.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]), +literal:_e,built_in:we.concat(i),"variable.language":ye},l={className:"meta", +begin:"@"+a},c=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n)) +;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} +;Object.assign(t.keywords,o),t.exports.PARAMS_CONTAINS.push(l) +;const d=t.contains.find((e=>"attr"===e.scope)),g=Object.assign({},d,{ +match:n.concat(a,n.lookahead(/\s*\?:/))}) +;return t.exports.PARAMS_CONTAINS.push([t.exports.CLASS_REFERENCE,d,g]), +t.contains=t.contains.concat([l,r,s,g]), +c(t,"shebang",e.SHEBANG()),c(t,"use_strict",{className:"meta",relevance:10, +begin:/^\s*['"]use strict['"]/ +}),t.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(t,{ +name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),t},grmr_vbnet:e=>{ +const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ +className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ +begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ +begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] +},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] +}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) +;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, +classNameAliases:{label:"symbol"},keywords:{ +keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", +built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", +type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", +literal:"true false nothing"}, +illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ +className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, +end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, +variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ +},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ +begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ +className:"label",begin:/^\w+:/},o,l,{className:"meta", +begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, +end:/$/,keywords:{ +keyword:"const disable else elseif enable end externalsource if region then"}, +contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) +;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, +keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] +},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], +className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ +match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ +begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", +3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, +className:"type"},{className:"keyword", +match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ +},{className:"number",relevance:0, +match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ +}]}},grmr_xml:e=>{ +const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, +contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ +className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ +endsWithParent:!0,illegal:/`]+/}]}]}]};return{ +name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ +className:"meta",begin://,contains:[i,r,o,s]}]}] +},e.COMMENT(//,{relevance:10}),{begin://, +relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, +relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:n.concat(//,/>/,/\s/)))), +end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ +className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ +className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} +},grmr_yaml:e=>{ +const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ +className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}], +contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{ +begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{variants:[{ +begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{ +begin:/[^\s,{}[\]]+/}]}),r={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n, +relevance:0},s={begin:/\{/,end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={ +begin:"\\[",end:"\\]",contains:[r],illegal:"\\n",relevance:0},l=[{ +className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{ +begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{ +begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},{className:"meta", +begin:"^---\\s*$",relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", +begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,{ +className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/, +scope:"char.escape",relevance:0}]},a],c=[...l] +;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:l}}});const Pe=ne;for(const e of Object.keys(Ue)){ +const n=e.replace("grmr_","").replace("_","-");Pe.registerLanguage(n,Ue[e])} +return Pe}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); \ No newline at end of file diff --git a/legacy/smartadmin/plugins/highlightjs/night-owl.css b/legacy/smartadmin/plugins/highlightjs/night-owl.css new file mode 100644 index 0000000..3cad0eb --- /dev/null +++ b/legacy/smartadmin/plugins/highlightjs/night-owl.css @@ -0,0 +1,174 @@ +pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em +} +code.hljs { + padding: 3px 5px +} +/* + +Night Owl for highlight.js (c) Carl Baxter + +An adaptation of Sarah Drasner's Night Owl VS Code Theme +https://github.com/sdras/night-owl-vscode-theme + +Copyright (c) 2018 Sarah Drasner + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ +.hljs { + background: #011627; + color: #d6deeb +} +/* General Purpose */ +.hljs-keyword { + color: #c792ea; + font-style: italic +} +.hljs-built_in { + color: #addb67; + font-style: italic +} +.hljs-type { + color: #82aaff +} +.hljs-literal { + color: #ff5874 +} +.hljs-number { + color: #F78C6C +} +.hljs-regexp { + color: #5ca7e4 +} +.hljs-string { + color: #ecc48d +} +.hljs-subst { + color: #d3423e +} +.hljs-symbol { + color: #82aaff +} +.hljs-class { + color: #ffcb8b +} +.hljs-function { + color: #82AAFF +} +.hljs-title { + color: #DCDCAA; + font-style: italic +} +.hljs-params { + color: #7fdbca +} +/* Meta */ +.hljs-comment { + color: #637777; + font-style: italic +} +.hljs-doctag { + color: #7fdbca +} +.hljs-meta { + color: #82aaff +} +.hljs-meta .hljs-keyword { + color: #82aaff +} +.hljs-meta .hljs-string { + color: #ecc48d +} +/* Tags, attributes, config */ +.hljs-section { + color: #82b1ff +} +.hljs-tag, +.hljs-name { + color: #7fdbca +} +.hljs-attr { + color: #7fdbca +} +.hljs-attribute { + color: #80cbc4 +} +.hljs-variable { + color: #addb67 +} +/* Markup */ +.hljs-bullet { + color: #d9f5dd +} +.hljs-code { + color: #80CBC4 +} +.hljs-emphasis { + color: #c792ea; + font-style: italic +} +.hljs-strong { + color: #addb67; + font-weight: bold +} +.hljs-formula { + color: #c792ea +} +.hljs-link { + color: #ff869a +} +.hljs-quote { + color: #697098; + font-style: italic +} +/* CSS */ +.hljs-selector-tag { + color: #ff6363 +} +.hljs-selector-id { + color: #fad430 +} +.hljs-selector-class { + color: #addb67; + font-style: italic +} +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #c792ea; + font-style: italic +} +/* Templates */ +.hljs-template-tag { + color: #c792ea +} +.hljs-template-variable { + color: #addb67 +} +/* diff */ +.hljs-addition { + color: #addb67ff; + font-style: italic +} +.hljs-deletion { + color: #EF535090; + font-style: italic +} \ No newline at end of file diff --git a/legacy/smartadmin/plugins/jsvectormap/jsvectormap.min.css b/legacy/smartadmin/plugins/jsvectormap/jsvectormap.min.css new file mode 100644 index 0000000..4e8d77c --- /dev/null +++ b/legacy/smartadmin/plugins/jsvectormap/jsvectormap.min.css @@ -0,0 +1 @@ +:root{--jvm-border-color: #E5E6E7;--jvm-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);--jvm-tooltip-font-size: 0.9rem;--jvm-tooltip-bg-color: #337FFA;--jvm-tooltip-color: #FFF;--jvm-tooltip-padding: 3px 5px;--jvm-tooltip-shadow: var(--jvm-box-shadow);--jvm-tooltip-radius: 3px;--jvm-zoom-btn-bg-color: #292929;--jvm-zoom-btn-color: #FFF;--jvm-zoom-btn-size: 15px;--jvm-zoom-btn-radius: 3px;--jvm-series-container-right: 15px;--jvm-legend-bg-color: #FFF;--jvm-legend-radius: 0.15rem;--jvm-legend-margin-left: 0.75rem;--jvm-legend-padding: 0.6rem;--jvm-legend-title-padding-bottom: 0.5rem;--jvm-legend-title-margin-bottom: 0.575rem;--jvm-legend-tick-margin-top: 0.575rem;--jvm-legend-tick-sample-radius: 0;--jvm-legend-tick-sample-height: 12px;--jvm-legend-tick-sample-width: 30px;--jvm-legend-tick-text-font-size: 12px;--jvm-legend-tick-text-margin-top: 3px}image,text,.jvm-zoom-btn{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jvm-container{position:relative;height:100%;width:100%}.jvm-tooltip{border-radius:var(--jvm-tooltip-radius);background-color:var(--jvm-tooltip-bg-color);color:var(--jvm-tooltip-color);font-size:var(--jvm-tooltip-font-size);box-shadow:var(--jvm-tooltip-shadow);padding:var(--jvm-tooltip-padding);white-space:nowrap;position:absolute;display:none}.jvm-tooltip.active{display:block}.jvm-zoom-btn{background-color:var(--jvm-zoom-btn-bg-color);color:var(--jvm-zoom-btn-color);border-radius:var(--jvm-zoom-btn-radius);height:var(--jvm-zoom-btn-size);width:var(--jvm-zoom-btn-size);box-sizing:border-box;position:absolute;left:10px;line-height:var(--jvm-zoom-btn-size);text-align:center;cursor:pointer}.jvm-zoom-btn.jvm-zoomin{top:var(--jvm-zoom-btn-size)}.jvm-zoom-btn.jvm-zoomout{top:calc(var(--jvm-zoom-btn-size)*2 + var(--jvm-zoom-btn-size)/3)}.jvm-series-container{position:absolute;right:var(--jvm-series-container-right)}.jvm-series-container.jvm-series-h{bottom:15px}.jvm-series-container.jvm-series-v{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;gap:.75rem;top:15px}.jvm-legend{background-color:var(--jvm-legend-bg-color);border:1px solid var(--jvm-border-color);margin-left:var(--jvm-legend-margin-left);border-radius:var(--jvm-legend-radius);padding:var(--jvm-legend-padding);box-shadow:var(--jvm-box-shadow)}.jvm-legend-title{line-height:1;border-bottom:1px solid var(--jvm-border-color);padding-bottom:var(--jvm-legend-title-padding-bottom);margin-bottom:var(--jvm-legend-title-margin-bottom);text-align:left}.jvm-legend-tick{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-width:40px}.jvm-legend-tick:not(:first-child){margin-top:var(--jvm-legend-tick-margin-top)}.jvm-legend-tick-sample{border-radius:var(--jvm-legend-tick-sample-radius);margin-right:.45rem;height:var(--jvm-legend-tick-sample-height);width:var(--jvm-legend-tick-sample-width)}.jvm-legend-tick-text{font-size:var(--jvm-legend-tick-text-font-size);text-align:center;line-height:1}.jvm-line[animation=true]{-webkit-animation:jvm-line-animation 10s linear forwards infinite;animation:jvm-line-animation 10s linear forwards infinite}@-webkit-keyframes jvm-line-animation{from{stroke-dashoffset:250}}@keyframes jvm-line-animation{from{stroke-dashoffset:250}} \ No newline at end of file diff --git a/legacy/smartadmin/plugins/jsvectormap/jsvectormap.min.js b/legacy/smartadmin/plugins/jsvectormap/jsvectormap.min.js new file mode 100644 index 0000000..68edce6 --- /dev/null +++ b/legacy/smartadmin/plugins/jsvectormap/jsvectormap.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).jsVectorMap=e()}(this,(function(){"use strict";var t=function(t){return function(t){return!!t&&"object"==typeof t}(t)&&!function(t){var i=Object.prototype.toString.call(t);return"[object RegExp]"===i||"[object Date]"===i||function(t){return t instanceof Node}(t)||function(t){return t.$$typeof===e}(t)}(t)};var e="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function i(t,e){return!1!==e.clone&&e.isMergeableObject(t)?o((i=t,Array.isArray(i)?[]:{}),t,e):t;var i}function s(t,e,s){return t.concat(e).map((function(t){return i(t,s)}))}function n(t){return Object.keys(t).concat(function(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter((function(e){return t.propertyIsEnumerable(e)})):[]}(t))}function r(t,e){try{return e in t}catch(t){return!1}}function a(t,e,s){var a={};return s.isMergeableObject(t)&&n(t).forEach((function(e){a[e]=i(t[e],s)})),n(e).forEach((function(n){(function(t,e){return r(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))})(t,n)||(r(t,n)&&s.isMergeableObject(e[n])?a[n]=function(t,e){if(!e.customMerge)return o;var i=e.customMerge(t);return"function"==typeof i?i:o}(n,s)(t[n],e[n],s):a[n]=i(e[n],s))})),a}var o=function(e,n,r){(r=r||{}).arrayMerge=r.arrayMerge||s,r.isMergeableObject=r.isMergeableObject||t,r.cloneUnlessOtherwiseSpecified=i;var o=Array.isArray(n);return o===Array.isArray(e)?o?r.arrayMerge(e,n,r):a(e,n,r):i(n,r)},h=function(t){return"object"==typeof t&&void 0!==t.nodeType?t:"string"==typeof t?document.querySelector(t):null},l=function(t,e,i,s){void 0===s&&(s=!1);var n=document.createElement(t);return i&&(n[s?"innerHTML":"textContent"]=i),e&&(n.className=e),n},c=function(t){t.parentNode.removeChild(t)},u=function(t,e,i){return void 0===i&&(i=!1),i?o(t,e):Object.assign(t,e)},p=function(t,e){return t.toLowerCase()+":to:"+e.toLowerCase()},d=function(t,e){Object.assign(t.prototype,e)},f={},m=1,g={on:function(t,e,i,s){void 0===s&&(s={});var n="jvm:"+e+"::"+m++;f[n]={selector:t,handler:i},i._uid=n,t.addEventListener(e,i,s)},delegate:function(t,e,i,s){(e=e.split(" ")).forEach((function(e){g.on(t,e,(function(t){var e=t.target;e.matches(i)&&s.call(e,t)}))}))},off:function(t,e,i){var s=e.split(":")[1];t.removeEventListener(s,i),delete f[i._uid]},flush:function(){Object.keys(f).forEach((function(t){g.off(f[t].selector,t,f[t].handler)}))},getEventRegistry:function(){return f}};var v={onLoaded:"map:loaded",onViewportChange:"viewport:changed",onRegionClick:"region:clicked",onMarkerClick:"marker:clicked",onRegionSelected:"region:selected",onMarkerSelected:"marker:selected",onRegionTooltipShow:"region.tooltip:show",onMarkerTooltipShow:"marker.tooltip:show",onDestroyed:"map:destroyed"},_=function(t,e,i){var s=h(e),n=-1===s.getAttribute("class").indexOf("jvm-region")?"marker":"region",r="region"===n,a=r?s.getAttribute("data-code"):s.getAttribute("data-index"),o=r?v.onRegionSelected:v.onMarkerSelected;return i&&(o=r?v.onRegionTooltipShow:v.onMarkerTooltipShow),{type:n,code:a,event:o,element:r?t.regions[a].element:t._markers[a].element,tooltipText:r?t._mapData.paths[a].name||"":t._markers[a].config.name||""}};function y(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,s=Array(e);i=t.length?{done:!0}:{done:!1,value:t[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function w(){return w=Object.assign?Object.assign.bind():function(t){for(var e=1;e>10||1),n=i.container.getBoundingClientRect(),r=t.pageX-n.left-window.scrollX,a=t.pageY-n.top-window.scrollY,o=Math.pow(1+s.params.zoomOnScrollSpeed/1e3,-1.5*e);s.tooltip&&s._tooltip.hide(),s._setScale(s.scale*o,r,a),t.preventDefault()}))},_setupElementEvents:function(){var t,e,i,s=this,n=this.container;g.on(n,"mousemove",(function(s){Math.abs(t-s.pageX)+Math.abs(e-s.pageY)>2&&(i=!0)})),g.delegate(n,"mousedown",".jvm-element",(function(s){t=s.pageX,e=s.pageY,i=!1})),g.delegate(n,"mouseover mouseout",".jvm-element",(function(t){var e=_(s,this,!0),i=s.params.showTooltip;"mouseover"===t.type?(e.element.hover(!0),i&&(s._tooltip.text(e.tooltipText),s._emit(e.event,[t,s._tooltip,e.code]),t.defaultPrevented||s._tooltip.show())):(e.element.hover(!1),i&&s._tooltip.hide())})),g.delegate(n,"mouseup",".jvm-element",(function(t){var e=_(s,this);if(!i&&("region"===e.type&&s.params.regionsSelectable||"marker"===e.type&&s.params.markersSelectable)){var n=e.element;s.params[e.type+"sSelectableOne"]&&("region"===e.type?s.clearSelectedRegions():s.clearSelectedMarkers()),e.element.isSelected?n.select(!1):n.select(!0),s._emit(e.event,[e.code,n.isSelected,"region"===e.type?s.getSelectedRegions():s.getSelectedMarkers()])}})),g.delegate(n,"click",".jvm-element",(function(t){var e=_(s,this),i=e.type,n=e.code;s._emit("region"===i?v.onRegionClick:v.onMarkerClick,[t,n])}))},_setupZoomButtons:function(){var t=this,e=this.params.zoomInButton,i=this.params.zoomOutButton,s=function(t){return"string"==typeof t?document.querySelector(t):t},n=e?s(e):l("div","jvm-zoom-btn jvm-zoomin","+",!0),r=i?s(i):l("div","jvm-zoom-btn jvm-zoomout","−",!0);e||this.container.appendChild(n),i||this.container.appendChild(r);var a=function(e){return void 0===e&&(e=!0),function(){return t._setScale(e?t.scale*t.params.zoomStep:t.scale/t.params.zoomStep,t._width/2,t._height/2,!1,t.params.zoomAnimate)}};g.on(n,"click",a()),g.on(r,"click",a(!1))},_setupContainerTouchEvents:function(){var t,e,i,s,n,r,a,o=this,h=function(h){var l,c,u,p,d=h.touches;if("touchstart"==h.type&&(a=0),1==d.length){var f;if(1==a)u=o.transX,p=o.transY,o.transX-=(i-d[0].pageX)/o.scale,o.transY-=(s-d[0].pageY)/o.scale,null==(f=o._tooltip)||f.hide(),o._applyTransform(),u==o.transX&&p==o.transY||h.preventDefault();i=d[0].pageX,s=d[0].pageY}else if(2==d.length)if(2==a){var m;c=Math.sqrt(Math.pow(d[0].pageX-d[1].pageX,2)+Math.pow(d[0].pageY-d[1].pageY,2))/e,o._setScale(t*c,n,r),null==(m=o._tooltip)||m.hide(),h.preventDefault()}else{var g=o.container.getBoundingClientRect();l={top:g.top+window.scrollY,left:g.left+window.scrollX},n=d[0].pageX>d[1].pageX?d[1].pageX+(d[0].pageX-d[1].pageX)/2:d[0].pageX+(d[1].pageX-d[0].pageX)/2,r=d[0].pageY>d[1].pageY?d[1].pageY+(d[0].pageY-d[1].pageY)/2:d[0].pageY+(d[1].pageY-d[0].pageY)/2,n-=l.left,r-=l.top,t=o.scale,e=Math.sqrt(Math.pow(d[0].pageX-d[1].pageX,2)+Math.pow(d[0].pageY-d[1].pageY,2))}a=d.length};g.on(o.container,"touchstart",h),g.on(o.container,"touchmove",h)},_createRegions:function(){for(var t in this._regionLabelsGroup=this._regionLabelsGroup||this.canvas.createGroup("jvm-regions-labels-group"),this._mapData.paths){var e=new O({map:this,code:t,path:this._mapData.paths[t].path,style:u({},this.params.regionStyle),labelStyle:this.params.regionLabelStyle,labelsGroup:this._regionLabelsGroup,label:this.params.labels&&this.params.labels.regions});this.regions[t]={config:this._mapData.paths[t],element:e}}},_createLines:function(t){var e=!1,i=!1,s=this.params.lineStyle,n=s.curvature,r=M(s,X);for(var a in t){for(var o=t[a],h=0,l=Object.values(this._markers);he?this.transY=e:this.transYt?this.transX=t:this.transXthis._defaultWidth/this._defaultHeight?(this._baseScale=this._height/this._defaultHeight,this._baseTransX=Math.abs(this._width-this._defaultWidth*this._baseScale)/(2*this._baseScale)):(this._baseScale=this._width/this._defaultWidth,this._baseTransY=Math.abs(this._height-this._defaultHeight*this._baseScale)/(2*this._baseScale)),this.scale*=this._baseScale/t,this.transX*=this._baseScale/t,this.transY*=this._baseScale/t},_setScale:function(t,e,i,s,n){var r,a,o,h,l,c,u,p,d,f,m=this,g=0,_=Math.abs(Math.round(60*(t-this.scale)/Math.max(t,this.scale)));t>this.params.zoomMax*this._baseScale?t=this.params.zoomMax*this._baseScale:t0?(o=this.scale,h=(t-o)/_,l=this.transX*this.scale,u=this.transY*this.scale,c=(d*t-l)/_,p=(f*t-u)/_,a=setInterval((function(){g+=1,m.scale=o+h*g,m.transX=(l+c*g)/m.scale,m.transY=(u+p*g)/m.scale,m._applyTransform(),g==_&&(clearInterval(a),m._emit(v.onViewportChange,[m.scale,m.transX,m.transY]))}),10)):(this.transX=d,this.transY=f,this.scale=t,this._applyTransform(),this._emit(v.onViewportChange,[this.scale,this.transX,this.transY]))},setFocus:function(t){var e=this;void 0===t&&(t={});var i,s=[];if(t.region?s.push(t.region):t.regions&&(s=t.regions),s.length)return s.forEach((function(t){if(e.regions[t]){var s=e.regions[t].element.shape.getBBox();s&&(i=void 0===i?s:{x:Math.min(i.x,s.x),y:Math.min(i.y,s.y),width:Math.max(i.x+i.width,s.x+s.width)-Math.min(i.x,s.x),height:Math.max(i.y+i.height,s.y+s.height)-Math.min(i.y,s.y)})}})),this._setScale(Math.min(this._width/i.width,this._height/i.height),-(i.x+i.width/2),-(i.y+i.height/2),!0,t.animate);if(t.coords){var n=this.coordsToPoint(t.coords[0],t.coords[1]),r=this.transX-n.x/this.scale,a=this.transY-n.y/this.scale;return this._setScale(t.scale*this._baseScale,r,a,!0,t.animate)}},updateSize:function(){this._width=this.container.offsetWidth,this._height=this.container.offsetHeight,this._resize(),this.canvas.setSize(this._width,this._height),this._applyTransform()},coordsToPoint:function(t,e){var i=st.maps[this.params.map].projection,s=H[i.type](t,e,i.centralMeridian),n=s.x,r=s.y,a=this.getInsetForPoint(n,r);if(!a)return!1;var o=a.bbox;return n=(n-o[0].x)/(o[1].x-o[0].x)*a.width*this.scale,r=(r-o[0].y)/(o[1].y-o[0].y)*a.height*this.scale,{x:n+this.transX*this.scale+a.left*this.scale,y:r+this.transY*this.scale+a.top*this.scale}},getInsetForPoint:function(t,e){for(var i=st.maps[this.params.map].insets,s=0;sr.x&&tr.y&&ethis.max&&(this.max=e),e-1)})),!0)},e.removeLines=function(t){var e=this;(t=Array.isArray(t)?t.map((function(t){return p(t.from,t.to)})):this._getLinesAsUids()).forEach((function(t){e._lines[t].dispose(),delete e._lines[t]}))},e.removeLine=function(t,e){console.warn("`removeLine` method is deprecated, please use `removeLines` instead.");var i=p(t,e);this._lines.hasOwnProperty(i)&&(this._lines[i].element.remove(),delete this._lines[i])},e.reset=function(){for(var t in this.series)for(var e=0;ee;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s=200==Math.round(t(o.width)),r.isBoxSizeOuter=s,i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;is?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}); \ No newline at end of file diff --git a/legacy/smartadmin/plugins/sortablejs/Sortable.min.js b/legacy/smartadmin/plugins/sortablejs/Sortable.min.js new file mode 100644 index 0000000..95423a6 --- /dev/null +++ b/legacy/smartadmin/plugins/sortablejs/Sortable.min.js @@ -0,0 +1,2 @@ +/*! Sortable 1.15.6 - MIT | git://github.com/SortableJS/Sortable.git */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function I(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function g(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&f(t,e)||o&&t===n)return t}while(t!==n&&(t=g(t)))}return null}var m,v=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(v," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(v," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function b(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function D(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Ft(t){Z&&Z.parentNode[K]._isOutsideThisEl(t.target)}function jt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return kt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==jt.supportPointer&&"PointerEvent"in window&&(!u||c),emptyInsertThreshold:5};for(n in z.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in Rt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&It,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),St.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,A())}function Ht(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Lt(t){t.draggable=!1}function Kt(){xt=!1}function Wt(t){return setTimeout(t,0)}function zt(t){return clearTimeout(t)}jt.prototype={constructor:jt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(vt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Z):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){Ot.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&Ot.push(o)}}(o),!Z&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||et===l)){if(it=j(l),at=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return V({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),U("filter",n,{evt:e}),void(i&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return V({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),U("filter",n,{evt:e}),!0}))return void(i&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!Z&&n.parentNode===r&&(o=X(n),J=r,$=(Z=n).parentNode,tt=Z.nextSibling,et=n,st=a.group,ut={target:jt.dragged=Z,clientX:(e||t).clientX,clientY:(e||t).clientY},ft=ut.clientX-o.left,gt=ut.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Z.style["will-change"]="all",o=function(){U("delayEnded",i,{evt:t}),jt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(Z.draggable=!0),i._triggerDragStart(t,e),V({sortable:i,name:"choose",originalEvent:t}),k(Z,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){D(Z,t.trim(),Lt)}),h(l,"dragover",Bt),h(l,"mousemove",Bt),h(l,"touchmove",Bt),a.supportPointer?(h(l,"pointerup",i._onDrop),this.nativeDraggable||h(l,"pointercancel",i._onDrop)):(h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop)),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Z.draggable=!0),U("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():jt.eventCanceled?this._onDrop():(a.supportPointer?(h(l,"pointerup",i._disableDelayedDrag),h(l,"pointercancel",i._disableDelayedDrag)):(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag)),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Z&&Lt(Z),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;p(t,"mouseup",this._disableDelayedDrag),p(t,"touchend",this._disableDelayedDrag),p(t,"touchcancel",this._disableDelayedDrag),p(t,"pointerup",this._disableDelayedDrag),p(t,"pointercancel",this._disableDelayedDrag),p(t,"mousemove",this._delayedDragTouchMoveHandler),p(t,"touchmove",this._delayedDragTouchMoveHandler),p(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(Z,"dragend",this),h(J,"dragstart",this._onDragStart));try{document.selection?Wt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;Dt=!1,J&&Z?(U("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Ft),n=this.options,t||k(Z,n.dragClass,!1),k(Z,n.ghostClass,!0),jt.active=this,t&&this._appendGhost(),V({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(dt){this._lastX=dt.clientX,this._lastY=dt.clientY,Xt();for(var t=document.elementFromPoint(dt.clientX,dt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(dt.clientX,dt.clientY))!==e;)e=t;if(Z.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:dt.clientX,clientY:dt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=g(t=e));Yt()}},_onTouchMove:function(t){if(ut){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=Q&&b(Q,!0),a=Q&&r&&r.a,l=Q&&r&&r.d,e=At&&wt&&E(wt),a=(i.clientX-ut.clientX+o.x)/(a||1)+(e?e[0]-Tt[0]:0)/(a||1),l=(i.clientY-ut.clientY+o.y)/(l||1)+(e?e[1]-Tt[1]:0)/(l||1);if(!jt.active&&!Dt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))E.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>E.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,Q),e?t.clientX<_.left-10||t.clientY0?1:+t}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n>8&255]+it[t>>16&255]+it[t>>24&255]+"-"+it[255&e]+it[e>>8&255]+"-"+it[e>>16&15|64]+it[e>>24&255]+"-"+it[63&n|128]+it[n>>8&255]+"-"+it[n>>16&255]+it[n>>24&255]+it[255&r]+it[r>>8&255]+it[r>>16&255]+it[r>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(ot=t%2147483647),((ot=16807*ot%2147483647)-1)/2147483646},degToRad:function(t){return t*st.DEG2RAD},radToDeg:function(t){return t*st.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,r,i){var a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((e+r)/2),u=o((e+r)/2),h=a((e-r)/2),d=o((e-r)/2),p=a((r-e)/2),f=o((r-e)/2);switch(i){case"XYX":t.set(s*u,c*h,c*d,s*l);break;case"YZY":t.set(c*d,s*u,c*h,s*l);break;case"ZXZ":t.set(c*h,c*d,s*u,s*l);break;case"XZX":t.set(s*u,c*f,c*p,s*l);break;case"YXY":t.set(c*p,s*u,c*f,s*l);break;case"ZYZ":t.set(c*f,c*p,s*u,s*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i)}}};function ct(t,e){for(var n=0;n0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}var e=t.prototype;return e.set=function(t,e,n,r,i,a,o,s,c){var l=this.elements;return l[0]=t,l[1]=r,l[2]=o,l[3]=e,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this},e.identity=function(){return this.set(1,0,0,0,1,0,0,0,1),this},e.clone=function(){return(new this.constructor).fromArray(this.elements)},e.copy=function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this},e.extractBasis=function(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this},e.setFromMatrix4=function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},e.multiply=function(t){return this.multiplyMatrices(this,t)},e.premultiply=function(t){return this.multiplyMatrices(t,this)},e.multiplyMatrices=function(t,e){var n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],h=n[2],d=n[5],p=n[8],f=r[0],m=r[3],v=r[6],g=r[1],y=r[4],x=r[7],_=r[2],b=r[5],w=r[8];return i[0]=a*f+o*g+s*_,i[3]=a*m+o*y+s*b,i[6]=a*v+o*x+s*w,i[1]=c*f+l*g+u*_,i[4]=c*m+l*y+u*b,i[7]=c*v+l*x+u*w,i[2]=h*f+d*g+p*_,i[5]=h*m+d*y+p*b,i[8]=h*v+d*x+p*w,this},e.multiplyScalar=function(t){var e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this},e.determinant=function(){var t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8];return e*a*l-e*o*c-n*i*l+n*o*s+r*i*c-r*a*s},e.getInverse=function(t,e){void 0!==e&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var n=t.elements,r=this.elements,i=n[0],a=n[1],o=n[2],s=n[3],c=n[4],l=n[5],u=n[6],h=n[7],d=n[8],p=d*c-l*h,f=l*u-d*s,m=h*s-c*u,v=i*p+a*f+o*m;if(0===v)return this.set(0,0,0,0,0,0,0,0,0);var g=1/v;return r[0]=p*g,r[1]=(o*h-d*a)*g,r[2]=(l*a-o*c)*g,r[3]=f*g,r[4]=(d*i-o*u)*g,r[5]=(o*s-l*i)*g,r[6]=m*g,r[7]=(a*u-h*i)*g,r[8]=(c*i-a*s)*g,this},e.transpose=function(){var t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this},e.getNormalMatrix=function(t){return this.setFromMatrix4(t).getInverse(this).transpose()},e.transposeIntoArray=function(t){var e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this},e.setUvTransform=function(t,e,n,r,i,a,o){var s=Math.cos(i),c=Math.sin(i);this.set(n*s,n*c,-n*(s*a+c*o)+a+t,-r*c,r*s,-r*(-c*a+s*o)+o+e,0,0,1)},e.scale=function(t,e){var n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this},e.rotate=function(t){var e=Math.cos(t),n=Math.sin(t),r=this.elements,i=r[0],a=r[3],o=r[6],s=r[1],c=r[4],l=r[7];return r[0]=e*i+n*s,r[3]=e*a+n*c,r[6]=e*o+n*l,r[1]=-n*i+e*s,r[4]=-n*a+e*c,r[7]=-n*o+e*l,this},e.translate=function(t,e){var n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this},e.equals=function(t){for(var e=this.elements,n=t.elements,r=0;r<9;r++)if(e[r]!==n[r])return!1;return!0},e.fromArray=function(t,e){void 0===e&&(e=0);for(var n=0;n<9;n++)this.elements[n]=t[n+e];return this},e.toArray=function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t},t}(),mt={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;var e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===dt&&(dt=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),dt.width=t.width,dt.height=t.height;var n=dt.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=dt}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}},vt=0;function gt(t,e,n,r,i,a,o,s,c,l){Object.defineProperty(this,"id",{value:vt++}),this.uuid=st.generateUUID(),this.name="",this.image=void 0!==t?t:gt.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:gt.DEFAULT_MAPPING,this.wrapS=void 0!==n?n:u,this.wrapT=void 0!==r?r:u,this.magFilter=void 0!==i?i:m,this.minFilter=void 0!==a?a:g,this.anisotropy=void 0!==c?c:1,this.format=void 0!==o?o:T,this.internalFormat=null,this.type=void 0!==s?s:y,this.offset=new pt(0,0),this.repeat=new pt(1,1),this.center=new pt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new ft,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==l?l:q,this.version=0,this.onUpdate=null}gt.DEFAULT_IMAGE=void 0,gt.DEFAULT_MAPPING=n,gt.prototype=Object.assign(Object.create(rt.prototype),{constructor:gt,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){var e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];var n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var r=this.image;if(void 0===r.uuid&&(r.uuid=st.generateUUID()),!e&&void 0===t.images[r.uuid]){var i;if(Array.isArray(r)){i=[];for(var a=0,o=r.length;a1)switch(this.wrapS){case l:t.x=t.x-Math.floor(t.x);break;case u:t.x=t.x<0?0:1;break;case h:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case l:t.y=t.y-Math.floor(t.y);break;case u:t.y=t.y<0?0:1;break;case h:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(gt.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});var yt=function(){function t(t,e,n,r){void 0===t&&(t=0),void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=1),Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=r}var e=t.prototype;return e.set=function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},e.setScalar=function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},e.setX=function(t){return this.x=t,this},e.setY=function(t){return this.y=t,this},e.setZ=function(t){return this.z=t,this},e.setW=function(t){return this.w=t,this},e.setComponent=function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},e.getComponent=function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},e.clone=function(){return new this.constructor(this.x,this.y,this.z,this.w)},e.copy=function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},e.add=function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},e.addScalar=function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},e.addVectors=function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},e.addScaledVector=function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},e.sub=function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},e.subScalar=function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},e.subVectors=function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},e.multiplyScalar=function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},e.applyMatrix4=function(t){var e=this.x,n=this.y,r=this.z,i=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*e+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*e+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*e+a[7]*n+a[11]*r+a[15]*i,this},e.divideScalar=function(t){return this.multiplyScalar(1/t)},e.setAxisAngleFromQuaternion=function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},e.setAxisAngleFromRotationMatrix=function(t){var e,n,r,i,a=.01,o=.1,s=t.elements,c=s[0],l=s[4],u=s[8],h=s[1],d=s[5],p=s[9],f=s[2],m=s[6],v=s[10];if(Math.abs(l-h)y&&g>x?gx?y=0?1:-1,y=1-v*v;if(y>Number.EPSILON){var x=Math.sqrt(y),_=Math.atan2(x,v*g);m=Math.sin(m*_)/x,o=Math.sin(o*_)/x}var b=o*g;if(s=s*m+h*b,c=c*m+d*b,l=l*m+p*b,u=u*m+f*b,m===1-o){var w=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=w,c*=w,l*=w,u*=w}}t[e]=s,t[e+1]=c,t[e+2]=l,t[e+3]=u},t.multiplyQuaternionsFlat=function(t,e,n,r,i,a){var o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],h=i[a+1],d=i[a+2],p=i[a+3];return t[e]=o*p+l*u+s*d-c*h,t[e+1]=s*p+l*h+c*u-o*d,t[e+2]=c*p+l*d+o*h-s*u,t[e+3]=l*p-o*u-s*h-c*d,t};var e=t.prototype;return e.set=function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this._onChangeCallback(),this},e.clone=function(){return new this.constructor(this._x,this._y,this._z,this._w)},e.copy=function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this},e.setFromEuler=function(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=t._x,r=t._y,i=t._z,a=t._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),h=s(n/2),d=s(r/2),p=s(i/2);switch(a){case"XYZ":this._x=h*l*u+c*d*p,this._y=c*d*u-h*l*p,this._z=c*l*p+h*d*u,this._w=c*l*u-h*d*p;break;case"YXZ":this._x=h*l*u+c*d*p,this._y=c*d*u-h*l*p,this._z=c*l*p-h*d*u,this._w=c*l*u+h*d*p;break;case"ZXY":this._x=h*l*u-c*d*p,this._y=c*d*u+h*l*p,this._z=c*l*p+h*d*u,this._w=c*l*u-h*d*p;break;case"ZYX":this._x=h*l*u-c*d*p,this._y=c*d*u+h*l*p,this._z=c*l*p-h*d*u,this._w=c*l*u+h*d*p;break;case"YZX":this._x=h*l*u+c*d*p,this._y=c*d*u+h*l*p,this._z=c*l*p-h*d*u,this._w=c*l*u-h*d*p;break;case"XZY":this._x=h*l*u-c*d*p,this._y=c*d*u-h*l*p,this._z=c*l*p+h*d*u,this._w=c*l*u+h*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==e&&this._onChangeCallback(),this},e.setFromAxisAngle=function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this._onChangeCallback(),this},e.setFromRotationMatrix=function(t){var e=t.elements,n=e[0],r=e[4],i=e[8],a=e[1],o=e[5],s=e[9],c=e[2],l=e[6],u=e[10],h=n+o+u;if(h>0){var d=.5/Math.sqrt(h+1);this._w=.25/d,this._x=(l-s)*d,this._y=(i-c)*d,this._z=(a-r)*d}else if(n>o&&n>u){var p=2*Math.sqrt(1+n-o-u);this._w=(l-s)/p,this._x=.25*p,this._y=(r+a)/p,this._z=(i+c)/p}else if(o>u){var f=2*Math.sqrt(1+o-n-u);this._w=(i-c)/f,this._x=(r+a)/f,this._y=.25*f,this._z=(s+l)/f}else{var m=2*Math.sqrt(1+u-n-o);this._w=(a-r)/m,this._x=(i+c)/m,this._y=(s+l)/m,this._z=.25*m}return this._onChangeCallback(),this},e.setFromUnitVectors=function(t,e){var n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()},e.angleTo=function(t){return 2*Math.acos(Math.abs(st.clamp(this.dot(t),-1,1)))},e.rotateTowards=function(t,e){var n=this.angleTo(t);if(0===n)return this;var r=Math.min(1,e/n);return this.slerp(t,r),this},e.identity=function(){return this.set(0,0,0,1)},e.inverse=function(){return this.conjugate()},e.conjugate=function(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this},e.dot=function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},e.lengthSq=function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},e.length=function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},e.normalize=function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this},e.multiply=function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},e.premultiply=function(t){return this.multiplyQuaternions(t,this)},e.multiplyQuaternions=function(t,e){var n=t._x,r=t._y,i=t._z,a=t._w,o=e._x,s=e._y,c=e._z,l=e._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this},e.slerp=function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,a=this._w,o=a*t._w+n*t._x+r*t._y+i*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;var s=1-o*o;if(s<=Number.EPSILON){var c=1-e;return this._w=c*a+e*this._w,this._x=c*n+e*this._x,this._y=c*r+e*this._y,this._z=c*i+e*this._z,this.normalize(),this._onChangeCallback(),this}var l=Math.sqrt(s),u=Math.atan2(l,o),h=Math.sin((1-e)*u)/l,d=Math.sin(e*u)/l;return this._w=a*h+this._w*d,this._x=n*h+this._x*d,this._y=r*h+this._y*d,this._z=i*h+this._z*d,this._onChangeCallback(),this},e.equals=function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},e.fromArray=function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},e.fromBufferAttribute=function(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this},e._onChange=function(t){return this._onChangeCallback=t,this},e._onChangeCallback=function(){},lt(t,[{key:"x",get:function(){return this._x},set:function(t){this._x=t,this._onChangeCallback()}},{key:"y",get:function(){return this._y},set:function(t){this._y=t,this._onChangeCallback()}},{key:"z",get:function(){return this._z},set:function(t){this._z=t,this._onChangeCallback()}},{key:"w",get:function(){return this._w},set:function(t){this._w=t,this._onChangeCallback()}}]),t}(),wt=function(){function t(t,e,n){void 0===t&&(t=0),void 0===e&&(e=0),void 0===n&&(n=0),Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}var e=t.prototype;return e.set=function(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this},e.setScalar=function(t){return this.x=t,this.y=t,this.z=t,this},e.setX=function(t){return this.x=t,this},e.setY=function(t){return this.y=t,this},e.setZ=function(t){return this.z=t,this},e.setComponent=function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},e.getComponent=function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},e.clone=function(){return new this.constructor(this.x,this.y,this.z)},e.copy=function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},e.add=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},e.addScalar=function(t){return this.x+=t,this.y+=t,this.z+=t,this},e.addVectors=function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},e.addScaledVector=function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},e.sub=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},e.subScalar=function(t){return this.x-=t,this.y-=t,this.z-=t,this},e.subVectors=function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},e.multiply=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},e.multiplyScalar=function(t){return this.x*=t,this.y*=t,this.z*=t,this},e.multiplyVectors=function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},e.applyEuler=function(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(St.setFromEuler(t))},e.applyAxisAngle=function(t,e){return this.applyQuaternion(St.setFromAxisAngle(t,e))},e.applyMatrix3=function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},e.applyNormalMatrix=function(t){return this.applyMatrix3(t).normalize()},e.applyMatrix4=function(t){var e=this.x,n=this.y,r=this.z,i=t.elements,a=1/(i[3]*e+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*e+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*e+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*e+i[6]*n+i[10]*r+i[14])*a,this},e.applyQuaternion=function(t){var e=this.x,n=this.y,r=this.z,i=t.x,a=t.y,o=t.z,s=t.w,c=s*e+a*r-o*n,l=s*n+o*e-i*r,u=s*r+i*n-a*e,h=-i*e-a*n-o*r;return this.x=c*s+h*-i+l*-o-u*-a,this.y=l*s+h*-a+u*-i-c*-o,this.z=u*s+h*-o+c*-a-l*-i,this},e.project=function(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)},e.unproject=function(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)},e.transformDirection=function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},e.divide=function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},e.divideScalar=function(t){return this.multiplyScalar(1/t)},e.min=function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},e.max=function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},e.clamp=function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},e.clampScalar=function(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this},e.clampLength=function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},e.floor=function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},e.ceil=function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},e.round=function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},e.roundToZero=function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},e.negate=function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},e.dot=function(t){return this.x*t.x+this.y*t.y+this.z*t.z},e.lengthSq=function(){return this.x*this.x+this.y*this.y+this.z*this.z},e.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},e.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},e.normalize=function(){return this.divideScalar(this.length()||1)},e.setLength=function(t){return this.normalize().multiplyScalar(t)},e.lerp=function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},e.lerpVectors=function(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this},e.cross=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)},e.crossVectors=function(t,e){var n=t.x,r=t.y,i=t.z,a=e.x,o=e.y,s=e.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this},e.projectOnVector=function(t){var e=t.lengthSq();if(0===e)return this.set(0,0,0);var n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)},e.projectOnPlane=function(t){return Mt.copy(this).projectOnVector(t),this.sub(Mt)},e.reflect=function(t){return this.sub(Mt.copy(t).multiplyScalar(2*this.dot(t)))},e.angleTo=function(t){var e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;var n=this.dot(t)/e;return Math.acos(st.clamp(n,-1,1))},e.distanceTo=function(t){return Math.sqrt(this.distanceToSquared(t))},e.distanceToSquared=function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},e.manhattanDistanceTo=function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},e.setFromSpherical=function(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)},e.setFromSphericalCoords=function(t,e,n){var r=Math.sin(e)*t;return this.x=r*Math.sin(n),this.y=Math.cos(e)*t,this.z=r*Math.cos(n),this},e.setFromCylindrical=function(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)},e.setFromCylindricalCoords=function(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this},e.setFromMatrixPosition=function(t){var e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},e.setFromMatrixScale=function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},e.setFromMatrixColumn=function(t,e){return this.fromArray(t.elements,4*e)},e.setFromMatrix3Column=function(t,e){return this.fromArray(t.elements,3*e)},e.equals=function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},e.fromArray=function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},e.fromBufferAttribute=function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this},e.random=function(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this},t}(),Mt=new wt,St=new bt,Tt=function(){function t(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new wt(1/0,1/0,1/0),this.max=void 0!==e?e:new wt(-1/0,-1/0,-1/0)}var e=t.prototype;return e.set=function(t,e){return this.min.copy(t),this.max.copy(e),this},e.setFromArray=function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,o=-1/0,s=0,c=t.length;si&&(i=l),u>a&&(a=u),h>o&&(o=h)}return this.min.set(e,n,r),this.max.set(i,a,o),this},e.setFromBufferAttribute=function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,o=-1/0,s=0,c=t.count;si&&(i=l),u>a&&(a=u),h>o&&(o=h)}return this.min.set(e,n,r),this.max.set(i,a,o),this},e.setFromPoints=function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},e.containsBox=function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},e.getParameter=function(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new wt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},e.intersectsBox=function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},e.intersectsSphere=function(t){return this.clampPoint(t.center,Lt),Lt.distanceToSquared(t.center)<=t.radius*t.radius},e.intersectsPlane=function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant},e.intersectsTriangle=function(t){if(this.isEmpty())return!1;this.getCenter(Bt),zt.subVectors(this.max,Bt),Ct.subVectors(t.a,Bt),Pt.subVectors(t.b,Bt),It.subVectors(t.c,Bt),Dt.subVectors(Pt,Ct),Nt.subVectors(It,Pt),Ot.subVectors(Ct,It);var e=[0,-Dt.z,Dt.y,0,-Nt.z,Nt.y,0,-Ot.z,Ot.y,Dt.z,0,-Dt.x,Nt.z,0,-Nt.x,Ot.z,0,-Ot.x,-Dt.y,Dt.x,0,-Nt.y,Nt.x,0,-Ot.y,Ot.x,0];return!!Et(e,Ct,Pt,It,zt)&&(!!Et(e=[1,0,0,0,1,0,0,0,1],Ct,Pt,It,zt)&&(Gt.crossVectors(Dt,Nt),Et(e=[Gt.x,Gt.y,Gt.z],Ct,Pt,It,zt)))},e.clampPoint=function(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new wt),e.copy(t).clamp(this.min,this.max)},e.distanceToPoint=function(t){return Lt.copy(t).clamp(this.min,this.max).sub(t).length()},e.getBoundingSphere=function(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(Lt).length(),t},e.intersect=function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},e.union=function(t){return this.min.min(t.min),this.max.max(t.max),this},e.applyMatrix4=function(t){return this.isEmpty()||(At[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),At[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),At[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),At[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),At[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),At[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),At[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),At[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(At)),this},e.translate=function(t){return this.min.add(t),this.max.add(t),this},e.equals=function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},t}();function Et(t,e,n,r,i){for(var a=0,o=t.length-3;a<=o;a+=3){Ft.fromArray(t,a);var s=i.x*Math.abs(Ft.x)+i.y*Math.abs(Ft.y)+i.z*Math.abs(Ft.z),c=e.dot(Ft),l=n.dot(Ft),u=r.dot(Ft);if(Math.max(-Math.max(c,l,u),Math.min(c,l,u))>s)return!1}return!0}var At=[new wt,new wt,new wt,new wt,new wt,new wt,new wt,new wt],Lt=new wt,Rt=new Tt,Ct=new wt,Pt=new wt,It=new wt,Dt=new wt,Nt=new wt,Ot=new wt,Bt=new wt,zt=new wt,Gt=new wt,Ft=new wt,Ut=new Tt,Ht=function(){function t(t,e){this.center=void 0!==t?t:new wt,this.radius=void 0!==e?e:-1}var e=t.prototype;return e.set=function(t,e){return this.center.copy(t),this.radius=e,this},e.setFromPoints=function(t,e){var n=this.center;void 0!==e?n.copy(e):Ut.setFromPoints(t).getCenter(n);for(var r=0,i=0,a=t.length;ithis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},e.getBoundingBox=function(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new Tt),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)},e.applyMatrix4=function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},e.translate=function(t){return this.center.add(t),this},e.equals=function(t){return t.center.equals(this.center)&&t.radius===this.radius},t}(),kt=new wt,Vt=new wt,Wt=new wt,jt=new wt,qt=new wt,Xt=new wt,Yt=new wt,Zt=function(){function t(t,e){this.origin=void 0!==t?t:new wt,this.direction=void 0!==e?e:new wt(0,0,-1)}var e=t.prototype;return e.set=function(t,e){return this.origin.copy(t),this.direction.copy(e),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},e.at=function(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new wt),e.copy(this.direction).multiplyScalar(t).add(this.origin)},e.lookAt=function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},e.recast=function(t){return this.origin.copy(this.at(t,kt)),this},e.closestPointToPoint=function(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new wt),e.subVectors(t,this.origin);var n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)},e.distanceToPoint=function(t){return Math.sqrt(this.distanceSqToPoint(t))},e.distanceSqToPoint=function(t){var e=kt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(kt.copy(this.direction).multiplyScalar(e).add(this.origin),kt.distanceToSquared(t))},e.distanceSqToSegment=function(t,e,n,r){Vt.copy(t).add(e).multiplyScalar(.5),Wt.copy(e).sub(t).normalize(),jt.copy(this.origin).sub(Vt);var i,a,o,s,c=.5*t.distanceTo(e),l=-this.direction.dot(Wt),u=jt.dot(this.direction),h=-jt.dot(Wt),d=jt.lengthSq(),p=Math.abs(1-l*l);if(p>0)if(a=l*u-h,s=c*p,(i=l*h-u)>=0)if(a>=-s)if(a<=s){var f=1/p;o=(i*=f)*(i+l*(a*=f)+2*u)+a*(l*i+a+2*h)+d}else a=c,o=-(i=Math.max(0,-(l*a+u)))*i+a*(a+2*h)+d;else a=-c,o=-(i=Math.max(0,-(l*a+u)))*i+a*(a+2*h)+d;else a<=-s?o=-(i=Math.max(0,-(-l*c+u)))*i+(a=i>0?-c:Math.min(Math.max(-c,-h),c))*(a+2*h)+d:a<=s?(i=0,o=(a=Math.min(Math.max(-c,-h),c))*(a+2*h)+d):o=-(i=Math.max(0,-(l*c+u)))*i+(a=i>0?c:Math.min(Math.max(-c,-h),c))*(a+2*h)+d;else a=l>0?-c:c,o=-(i=Math.max(0,-(l*a+u)))*i+a*(a+2*h)+d;return n&&n.copy(this.direction).multiplyScalar(i).add(this.origin),r&&r.copy(Wt).multiplyScalar(a).add(Vt),o},e.intersectSphere=function(t,e){kt.subVectors(t.center,this.origin);var n=kt.dot(this.direction),r=kt.dot(kt)-n*n,i=t.radius*t.radius;if(r>i)return null;var a=Math.sqrt(i-r),o=n-a,s=n+a;return o<0&&s<0?null:o<0?this.at(s,e):this.at(o,e)},e.intersectsSphere=function(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius},e.distanceToPlane=function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},e.intersectPlane=function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},e.intersectsPlane=function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},e.intersectBox=function(t,e){var n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,h=this.origin;return c>=0?(n=(t.min.x-h.x)*c,r=(t.max.x-h.x)*c):(n=(t.max.x-h.x)*c,r=(t.min.x-h.x)*c),l>=0?(i=(t.min.y-h.y)*l,a=(t.max.y-h.y)*l):(i=(t.max.y-h.y)*l,a=(t.min.y-h.y)*l),n>a||i>r?null:((i>n||n!=n)&&(n=i),(a=0?(o=(t.min.z-h.z)*u,s=(t.max.z-h.z)*u):(o=(t.max.z-h.z)*u,s=(t.min.z-h.z)*u),n>s||o>r?null:((o>n||n!=n)&&(n=o),(s=0?n:r,e)))},e.intersectsBox=function(t){return null!==this.intersectBox(t,kt)},e.intersectTriangle=function(t,e,n,r,i){qt.subVectors(e,t),Xt.subVectors(n,t),Yt.crossVectors(qt,Xt);var a,o=this.direction.dot(Yt);if(o>0){if(r)return null;a=1}else{if(!(o<0))return null;a=-1,o=-o}jt.subVectors(this.origin,t);var s=a*this.direction.dot(Xt.crossVectors(jt,Xt));if(s<0)return null;var c=a*this.direction.dot(qt.cross(jt));if(c<0)return null;if(s+c>o)return null;var l=-a*jt.dot(Yt);return l<0?null:this.at(l/o,i)},e.applyMatrix4=function(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this},e.equals=function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)},t}(),Jt=function(){function t(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}var e=t.prototype;return e.set=function(t,e,n,r,i,a,o,s,c,l,u,h,d,p,f,m){var v=this.elements;return v[0]=t,v[4]=e,v[8]=n,v[12]=r,v[1]=i,v[5]=a,v[9]=o,v[13]=s,v[2]=c,v[6]=l,v[10]=u,v[14]=h,v[3]=d,v[7]=p,v[11]=f,v[15]=m,this},e.identity=function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},e.clone=function(){return(new t).fromArray(this.elements)},e.copy=function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this},e.copyPosition=function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},e.extractBasis=function(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},e.makeBasis=function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},e.extractRotation=function(t){var e=this.elements,n=t.elements,r=1/Qt.setFromMatrixColumn(t,0).length(),i=1/Qt.setFromMatrixColumn(t,1).length(),a=1/Qt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*r,e[1]=n[1]*r,e[2]=n[2]*r,e[3]=0,e[4]=n[4]*i,e[5]=n[5]*i,e[6]=n[6]*i,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},e.makeRotationFromEuler=function(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if("XYZ"===t.order){var h=a*l,d=a*u,p=o*l,f=o*u;e[0]=s*l,e[4]=-s*u,e[8]=c,e[1]=d+p*c,e[5]=h-f*c,e[9]=-o*s,e[2]=f-h*c,e[6]=p+d*c,e[10]=a*s}else if("YXZ"===t.order){var m=s*l,v=s*u,g=c*l,y=c*u;e[0]=m+y*o,e[4]=g*o-v,e[8]=a*c,e[1]=a*u,e[5]=a*l,e[9]=-o,e[2]=v*o-g,e[6]=y+m*o,e[10]=a*s}else if("ZXY"===t.order){var x=s*l,_=s*u,b=c*l,w=c*u;e[0]=x-w*o,e[4]=-a*u,e[8]=b+_*o,e[1]=_+b*o,e[5]=a*l,e[9]=w-x*o,e[2]=-a*c,e[6]=o,e[10]=a*s}else if("ZYX"===t.order){var M=a*l,S=a*u,T=o*l,E=o*u;e[0]=s*l,e[4]=T*c-S,e[8]=M*c+E,e[1]=s*u,e[5]=E*c+M,e[9]=S*c-T,e[2]=-c,e[6]=o*s,e[10]=a*s}else if("YZX"===t.order){var A=a*s,L=a*c,R=o*s,C=o*c;e[0]=s*l,e[4]=C-A*u,e[8]=R*u+L,e[1]=u,e[5]=a*l,e[9]=-o*l,e[2]=-c*l,e[6]=L*u+R,e[10]=A-C*u}else if("XZY"===t.order){var P=a*s,I=a*c,D=o*s,N=o*c;e[0]=s*l,e[4]=-u,e[8]=c*l,e[1]=P*u+N,e[5]=a*l,e[9]=I*u-D,e[2]=D*u-I,e[6]=o*l,e[10]=N*u+P}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},e.makeRotationFromQuaternion=function(t){return this.compose($t,t,te)},e.lookAt=function(t,e,n){var r=this.elements;return re.subVectors(t,e),0===re.lengthSq()&&(re.z=1),re.normalize(),ee.crossVectors(n,re),0===ee.lengthSq()&&(1===Math.abs(n.z)?re.x+=1e-4:re.z+=1e-4,re.normalize(),ee.crossVectors(n,re)),ee.normalize(),ne.crossVectors(re,ee),r[0]=ee.x,r[4]=ne.x,r[8]=re.x,r[1]=ee.y,r[5]=ne.y,r[9]=re.y,r[2]=ee.z,r[6]=ne.z,r[10]=re.z,this},e.multiply=function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},e.premultiply=function(t){return this.multiplyMatrices(t,this)},e.multiplyMatrices=function(t,e){var n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],v=n[14],g=n[3],y=n[7],x=n[11],_=n[15],b=r[0],w=r[4],M=r[8],S=r[12],T=r[1],E=r[5],A=r[9],L=r[13],R=r[2],C=r[6],P=r[10],I=r[14],D=r[3],N=r[7],O=r[11],B=r[15];return i[0]=a*b+o*T+s*R+c*D,i[4]=a*w+o*E+s*C+c*N,i[8]=a*M+o*A+s*P+c*O,i[12]=a*S+o*L+s*I+c*B,i[1]=l*b+u*T+h*R+d*D,i[5]=l*w+u*E+h*C+d*N,i[9]=l*M+u*A+h*P+d*O,i[13]=l*S+u*L+h*I+d*B,i[2]=p*b+f*T+m*R+v*D,i[6]=p*w+f*E+m*C+v*N,i[10]=p*M+f*A+m*P+v*O,i[14]=p*S+f*L+m*I+v*B,i[3]=g*b+y*T+x*R+_*D,i[7]=g*w+y*E+x*C+_*N,i[11]=g*M+y*A+x*P+_*O,i[15]=g*S+y*L+x*I+_*B,this},e.multiplyScalar=function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},e.determinant=function(){var t=this.elements,e=t[0],n=t[4],r=t[8],i=t[12],a=t[1],o=t[5],s=t[9],c=t[13],l=t[2],u=t[6],h=t[10],d=t[14];return t[3]*(+i*s*u-r*c*u-i*o*h+n*c*h+r*o*d-n*s*d)+t[7]*(+e*s*d-e*c*h+i*a*h-r*a*d+r*c*l-i*s*l)+t[11]*(+e*c*u-e*o*d-i*a*u+n*a*d+i*o*l-n*c*l)+t[15]*(-r*o*l-e*s*u+e*o*h+r*a*u-n*a*h+n*s*l)},e.transpose=function(){var t,e=this.elements;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this},e.setPosition=function(t,e,n){var r=this.elements;return t.isVector3?(r[12]=t.x,r[13]=t.y,r[14]=t.z):(r[12]=t,r[13]=e,r[14]=n),this},e.getInverse=function(t,e){void 0!==e&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");var n=this.elements,r=t.elements,i=r[0],a=r[1],o=r[2],s=r[3],c=r[4],l=r[5],u=r[6],h=r[7],d=r[8],p=r[9],f=r[10],m=r[11],v=r[12],g=r[13],y=r[14],x=r[15],_=p*y*h-g*f*h+g*u*m-l*y*m-p*u*x+l*f*x,b=v*f*h-d*y*h-v*u*m+c*y*m+d*u*x-c*f*x,w=d*g*h-v*p*h+v*l*m-c*g*m-d*l*x+c*p*x,M=v*p*u-d*g*u-v*l*f+c*g*f+d*l*y-c*p*y,S=i*_+a*b+o*w+s*M;if(0===S)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);var T=1/S;return n[0]=_*T,n[1]=(g*f*s-p*y*s-g*o*m+a*y*m+p*o*x-a*f*x)*T,n[2]=(l*y*s-g*u*s+g*o*h-a*y*h-l*o*x+a*u*x)*T,n[3]=(p*u*s-l*f*s-p*o*h+a*f*h+l*o*m-a*u*m)*T,n[4]=b*T,n[5]=(d*y*s-v*f*s+v*o*m-i*y*m-d*o*x+i*f*x)*T,n[6]=(v*u*s-c*y*s-v*o*h+i*y*h+c*o*x-i*u*x)*T,n[7]=(c*f*s-d*u*s+d*o*h-i*f*h-c*o*m+i*u*m)*T,n[8]=w*T,n[9]=(v*p*s-d*g*s-v*a*m+i*g*m+d*a*x-i*p*x)*T,n[10]=(c*g*s-v*l*s+v*a*h-i*g*h-c*a*x+i*l*x)*T,n[11]=(d*l*s-c*p*s-d*a*h+i*p*h+c*a*m-i*l*m)*T,n[12]=M*T,n[13]=(d*g*o-v*p*o+v*a*f-i*g*f-d*a*y+i*p*y)*T,n[14]=(v*l*o-c*g*o-v*a*u+i*g*u+c*a*y-i*l*y)*T,n[15]=(c*p*o-d*l*o+d*a*u-i*p*u-c*a*f+i*l*f)*T,this},e.scale=function(t){var e=this.elements,n=t.x,r=t.y,i=t.z;return e[0]*=n,e[4]*=r,e[8]*=i,e[1]*=n,e[5]*=r,e[9]*=i,e[2]*=n,e[6]*=r,e[10]*=i,e[3]*=n,e[7]*=r,e[11]*=i,this},e.getMaxScaleOnAxis=function(){var t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],r=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,r))},e.makeTranslation=function(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this},e.makeRotationX=function(t){var e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this},e.makeRotationY=function(t){var e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this},e.makeRotationZ=function(t){var e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this},e.makeRotationAxis=function(t,e){var n=Math.cos(e),r=Math.sin(e),i=1-n,a=t.x,o=t.y,s=t.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this},e.makeScale=function(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this},e.makeShear=function(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this},e.compose=function(t,e,n){var r=this.elements,i=e._x,a=e._y,o=e._z,s=e._w,c=i+i,l=a+a,u=o+o,h=i*c,d=i*l,p=i*u,f=a*l,m=a*u,v=o*u,g=s*c,y=s*l,x=s*u,_=n.x,b=n.y,w=n.z;return r[0]=(1-(f+v))*_,r[1]=(d+x)*_,r[2]=(p-y)*_,r[3]=0,r[4]=(d-x)*b,r[5]=(1-(h+v))*b,r[6]=(m+g)*b,r[7]=0,r[8]=(p+y)*w,r[9]=(m-g)*w,r[10]=(1-(h+f))*w,r[11]=0,r[12]=t.x,r[13]=t.y,r[14]=t.z,r[15]=1,this},e.decompose=function(t,e,n){var r=this.elements,i=Qt.set(r[0],r[1],r[2]).length(),a=Qt.set(r[4],r[5],r[6]).length(),o=Qt.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),t.x=r[12],t.y=r[13],t.z=r[14],Kt.copy(this);var s=1/i,c=1/a,l=1/o;return Kt.elements[0]*=s,Kt.elements[1]*=s,Kt.elements[2]*=s,Kt.elements[4]*=c,Kt.elements[5]*=c,Kt.elements[6]*=c,Kt.elements[8]*=l,Kt.elements[9]*=l,Kt.elements[10]*=l,e.setFromRotationMatrix(Kt),n.x=i,n.y=a,n.z=o,this},e.makePerspective=function(t,e,n,r,i,a){void 0===a&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var o=this.elements,s=2*i/(e-t),c=2*i/(n-r),l=(e+t)/(e-t),u=(n+r)/(n-r),h=-(a+i)/(a-i),d=-2*a*i/(a-i);return o[0]=s,o[4]=0,o[8]=l,o[12]=0,o[1]=0,o[5]=c,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=h,o[14]=d,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this},e.makeOrthographic=function(t,e,n,r,i,a){var o=this.elements,s=1/(e-t),c=1/(n-r),l=1/(a-i),u=(e+t)*s,h=(n+r)*c,d=(a+i)*l;return o[0]=2*s,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*c,o[9]=0,o[13]=-h,o[2]=0,o[6]=0,o[10]=-2*l,o[14]=-d,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this},e.equals=function(t){for(var e=this.elements,n=t.elements,r=0;r<16;r++)if(e[r]!==n[r])return!1;return!0},e.fromArray=function(t,e){void 0===e&&(e=0);for(var n=0;n<16;n++)this.elements[n]=t[n+e];return this},e.toArray=function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t},t}(),Qt=new wt,Kt=new Jt,$t=new wt(0,0,0),te=new wt(1,1,1),ee=new wt,ne=new wt,re=new wt,ie=function(){function t(e,n,r,i){void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=0),void 0===i&&(i=t.DefaultOrder),Object.defineProperty(this,"isEuler",{value:!0}),this._x=e,this._y=n,this._z=r,this._order=i}var e=t.prototype;return e.set=function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._order=r||this._order,this._onChangeCallback(),this},e.clone=function(){return new this.constructor(this._x,this._y,this._z,this._order)},e.copy=function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this},e.setFromRotationMatrix=function(t,e,n){var r=st.clamp,i=t.elements,a=i[0],o=i[4],s=i[8],c=i[1],l=i[5],u=i[9],h=i[2],d=i[6],p=i[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(r(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-u,p),this._z=Math.atan2(-o,a)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-r(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(s,p),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-h,a),this._z=0);break;case"ZXY":this._x=Math.asin(r(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-h,p),this._z=Math.atan2(-o,l)):(this._y=0,this._z=Math.atan2(c,a));break;case"ZYX":this._y=Math.asin(-r(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(c,a)):(this._x=0,this._z=Math.atan2(-o,l));break;case"YZX":this._z=Math.asin(r(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-h,a)):(this._x=0,this._y=Math.atan2(s,p));break;case"XZY":this._z=Math.asin(-r(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(s,a)):(this._x=Math.atan2(-u,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this},e.setFromQuaternion=function(t,e,n){return ae.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ae,e,n)},e.setFromVector3=function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},e.reorder=function(t){return oe.setFromEuler(this),this.setFromQuaternion(oe,t)},e.equals=function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},e.fromArray=function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},e.toVector3=function(t){return t?t.set(this._x,this._y,this._z):new wt(this._x,this._y,this._z)},e._onChange=function(t){return this._onChangeCallback=t,this},e._onChangeCallback=function(){},lt(t,[{key:"x",get:function(){return this._x},set:function(t){this._x=t,this._onChangeCallback()}},{key:"y",get:function(){return this._y},set:function(t){this._y=t,this._onChangeCallback()}},{key:"z",get:function(){return this._z},set:function(t){this._z=t,this._onChangeCallback()}},{key:"order",get:function(){return this._order},set:function(t){this._order=t,this._onChangeCallback()}}]),t}();ie.DefaultOrder="XYZ",ie.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];var ae=new Jt,oe=new bt,se=function(){function t(){this.mask=1}var e=t.prototype;return e.set=function(t){this.mask=1<1){for(var e=0;e1){for(var e=0;e0){r.children=[];for(var p=0;p0&&(n.geometries=f),m.length>0&&(n.materials=m),v.length>0&&(n.textures=v),g.length>0&&(n.images=g),y.length>0&&(n.shapes=y)}return n.object=r,n;function x(t){var e=[];for(var n in t){var r=t[n];delete r.metadata,e.push(r)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;n1?void 0:e.copy(n).multiplyScalar(i).add(t.start)},e.intersectsLine=function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0},e.intersectsBox=function(t){return t.intersectsPlane(this)},e.intersectsSphere=function(t){return t.intersectsPlane(this)},e.coplanarPoint=function(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new wt),t.copy(this.normal).multiplyScalar(-this.constant)},e.applyMatrix4=function(t,e){var n=e||Se.getNormalMatrix(t),r=this.coplanarPoint(we).applyMatrix4(t),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this},e.translate=function(t){return this.constant-=t.dot(this.normal),this},e.equals=function(t){return t.normal.equals(this.normal)&&t.constant===this.constant},t}(),Ee=new wt,Ae=new wt,Le=new wt,Re=new wt,Ce=new wt,Pe=new wt,Ie=new wt,De=new wt,Ne=new wt,Oe=new wt,Be=function(){function t(t,e,n){this.a=void 0!==t?t:new wt,this.b=void 0!==e?e:new wt,this.c=void 0!==n?n:new wt}t.getNormal=function(t,e,n,r){void 0===r&&(console.warn("THREE.Triangle: .getNormal() target is now required"),r=new wt),r.subVectors(n,e),Ee.subVectors(t,e),r.cross(Ee);var i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)},t.getBarycoord=function(t,e,n,r,i){Ee.subVectors(r,e),Ae.subVectors(n,e),Le.subVectors(t,e);var a=Ee.dot(Ee),o=Ee.dot(Ae),s=Ee.dot(Le),c=Ae.dot(Ae),l=Ae.dot(Le),u=a*c-o*o;if(void 0===i&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),i=new wt),0===u)return i.set(-2,-1,-1);var h=1/u,d=(c*s-o*l)*h,p=(a*l-o*s)*h;return i.set(1-d-p,p,d)},t.containsPoint=function(t,e,n,r){return this.getBarycoord(t,e,n,r,Re),Re.x>=0&&Re.y>=0&&Re.x+Re.y<=1},t.getUV=function(t,e,n,r,i,a,o,s){return this.getBarycoord(t,e,n,r,Re),s.set(0,0),s.addScaledVector(i,Re.x),s.addScaledVector(a,Re.y),s.addScaledVector(o,Re.z),s},t.isFrontFacing=function(t,e,n,r){return Ee.subVectors(n,e),Ae.subVectors(t,e),Ee.cross(Ae).dot(r)<0};var e=t.prototype;return e.set=function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},e.setFromPointsAndIndices=function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},e.getArea=function(){return Ee.subVectors(this.c,this.b),Ae.subVectors(this.a,this.b),.5*Ee.cross(Ae).length()},e.getMidpoint=function(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new wt),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},e.getNormal=function(e){return t.getNormal(this.a,this.b,this.c,e)},e.getPlane=function(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Te),t.setFromCoplanarPoints(this.a,this.b,this.c)},e.getBarycoord=function(e,n){return t.getBarycoord(e,this.a,this.b,this.c,n)},e.getUV=function(e,n,r,i,a){return t.getUV(e,this.a,this.b,this.c,n,r,i,a)},e.containsPoint=function(e){return t.containsPoint(e,this.a,this.b,this.c)},e.isFrontFacing=function(e){return t.isFrontFacing(this.a,this.b,this.c,e)},e.intersectsBox=function(t){return t.intersectsTriangle(this)},e.closestPointToPoint=function(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new wt);var n,r,i=this.a,a=this.b,o=this.c;Ce.subVectors(a,i),Pe.subVectors(o,i),De.subVectors(t,i);var s=Ce.dot(De),c=Pe.dot(De);if(s<=0&&c<=0)return e.copy(i);Ne.subVectors(t,a);var l=Ce.dot(Ne),u=Pe.dot(Ne);if(l>=0&&u<=l)return e.copy(a);var h=s*u-l*c;if(h<=0&&s>=0&&l<=0)return n=s/(s-l),e.copy(i).addScaledVector(Ce,n);Oe.subVectors(t,o);var d=Ce.dot(Oe),p=Pe.dot(Oe);if(p>=0&&d<=p)return e.copy(o);var f=d*c-s*p;if(f<=0&&c>=0&&p<=0)return r=c/(c-p),e.copy(i).addScaledVector(Pe,r);var m=l*p-d*u;if(m<=0&&u-l>=0&&d-p>=0)return Ie.subVectors(o,a),r=(u-l)/(u-l+(d-p)),e.copy(a).addScaledVector(Ie,r);var v=1/(m+f+h);return n=f*v,r=h*v,e.copy(i).addScaledVector(Ce,n).addScaledVector(Pe,r)},e.equals=function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)},t}(),ze={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ge={h:0,s:0,l:0},Fe={h:0,s:0,l:0};function Ue(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function He(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function ke(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}var Ve=function(){function t(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}var e=t.prototype;return e.set=function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},e.setScalar=function(t){return this.r=t,this.g=t,this.b=t,this},e.setHex=function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},e.setRGB=function(t,e,n){return this.r=t,this.g=e,this.b=n,this},e.setHSL=function(t,e,n){if(t=st.euclideanModulo(t,1),e=st.clamp(e,0,1),n=st.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{var r=n<=.5?n*(1+e):n+e-n*e,i=2*n-r;this.r=Ue(i,r,t+1/3),this.g=Ue(i,r,t),this.b=Ue(i,r,t-1/3)}return this},e.setStyle=function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],a=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a)){var o=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,c=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(o,s,c)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var l=n[1],u=l.length;if(3===u)return this.r=parseInt(l.charAt(0)+l.charAt(0),16)/255,this.g=parseInt(l.charAt(1)+l.charAt(1),16)/255,this.b=parseInt(l.charAt(2)+l.charAt(2),16)/255,this;if(6===u)return this.r=parseInt(l.charAt(0)+l.charAt(1),16)/255,this.g=parseInt(l.charAt(2)+l.charAt(3),16)/255,this.b=parseInt(l.charAt(4)+l.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this},e.setColorName=function(t){var e=ze[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this},e.clone=function(){return new this.constructor(this.r,this.g,this.b)},e.copy=function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},e.copyGammaToLinear=function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},e.copyLinearToGamma=function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},e.convertGammaToLinear=function(t){return this.copyGammaToLinear(this,t),this},e.convertLinearToGamma=function(t){return this.copyLinearToGamma(this,t),this},e.copySRGBToLinear=function(t){return this.r=He(t.r),this.g=He(t.g),this.b=He(t.b),this},e.copyLinearToSRGB=function(t){return this.r=ke(t.r),this.g=ke(t.g),this.b=ke(t.b),this},e.convertSRGBToLinear=function(){return this.copySRGBToLinear(this),this},e.convertLinearToSRGB=function(){return this.copyLinearToSRGB(this),this},e.getHex=function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},e.getHexString=function(){return("000000"+this.getHex().toString(16)).slice(-6)},e.getHSL=function(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});var e,n,r=this.r,i=this.g,a=this.b,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(s+o)/2;if(s===o)e=0,n=0;else{var l=o-s;switch(n=c<=.5?l/(o+s):l/(2-o-s),o){case r:e=(i-a)/l+(i0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){var i=r(t.textures),a=r(t.images);i.length>0&&(n.textures=i),a.length>0&&(n.images=a)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(qe.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Xe.prototype=Object.create(qe.prototype),Xe.prototype.constructor=Xe,Xe.prototype.isMeshBasicMaterial=!0,Xe.prototype.copy=function(t){return qe.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};var Ye=new wt,Ze=new pt;function Je(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=tt,this.updateRange={offset:0,count:-1},this.version=0}function Qe(t,e,n){Je.call(this,new Int8Array(t),e,n)}function Ke(t,e,n){Je.call(this,new Uint8Array(t),e,n)}function $e(t,e,n){Je.call(this,new Uint8ClampedArray(t),e,n)}function tn(t,e,n){Je.call(this,new Int16Array(t),e,n)}function en(t,e,n){Je.call(this,new Uint16Array(t),e,n)}function nn(t,e,n){Je.call(this,new Int32Array(t),e,n)}function rn(t,e,n){Je.call(this,new Uint32Array(t),e,n)}function an(t,e,n){Je.call(this,new Float32Array(t),e,n)}function on(t,e,n){Je.call(this,new Float64Array(t),e,n)}Object.defineProperty(Je.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(Je.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(var r=0,i=this.itemSize;r0,o=i[1]&&i[1].length>0,s=t.morphTargets,c=s.length;if(c>0){e=[];for(var l=0;l0){u=[];for(var p=0;p0&&0===n.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(var y=0;ye&&(e=t[n]);return e}var ln=1,un=new Jt,hn=new be,dn=new wt,pn=new Tt,fn=new Tt,mn=new wt;function vn(){Object.defineProperty(this,"id",{value:ln+=2}),this.uuid=st.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}vn.prototype=Object.assign(Object.create(rt.prototype),{constructor:vn,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(t){return Array.isArray(t)?this.index=new(cn(t)>65535?rn:en)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,n){this.groups.push({start:t,count:e,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){var e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);var n=this.attributes.normal;if(void 0!==n){var r=(new ft).getNormalMatrix(t);n.applyNormalMatrix(r),n.needsUpdate=!0}var i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return un.makeRotationX(t),this.applyMatrix4(un),this},rotateY:function(t){return un.makeRotationY(t),this.applyMatrix4(un),this},rotateZ:function(t){return un.makeRotationZ(t),this.applyMatrix4(un),this},translate:function(t,e,n){return un.makeTranslation(t,e,n),this.applyMatrix4(un),this},scale:function(t,e,n){return un.makeScale(t,e,n),this.applyMatrix4(un),this},lookAt:function(t){return hn.lookAt(t),hn.updateMatrix(),this.applyMatrix4(hn.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(dn).negate(),this.translate(dn.x,dn.y,dn.z),this},setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new an(3*e.vertices.length,3),r=new an(3*e.colors.length,3);if(this.setAttribute("position",n.copyVector3sArray(e.vertices)),this.setAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new an(e.lineDistances.length,1);this.setAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){for(var e=[],n=0,r=t.length;n0){var n=new Float32Array(3*t.normals.length);this.setAttribute("normal",new Je(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.setAttribute("color",new Je(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.setAttribute("uv",new Je(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var a=new Float32Array(2*t.uvs2.length);this.setAttribute("uv2",new Je(a,2).copyVector2sArray(t.uvs2))}for(var o in this.groups=t.groups,t.morphTargets){for(var s=[],c=t.morphTargets[o],l=0,u=c.length;l0){var p=new an(4*t.skinIndices.length,4);this.setAttribute("skinIndex",p.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var f=new an(4*t.skinWeights.length,4);this.setAttribute("skinWeight",f.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Tt);var t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".',this),void this.boundingBox.set(new wt(-1/0,-1/0,-1/0),new wt(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(var n=0,r=e.length;n0&&(t.userData=this.userData),void 0!==this.parameters){var e=this.parameters;for(var n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};var r=this.index;null!==r&&(t.data.index={type:r.array.constructor.name,array:Array.prototype.slice.call(r.array)});var i=this.attributes;for(var a in i){var o=i[a],s=o.toJSON(t.data);""!==o.name&&(s.name=o.name),t.data.attributes[a]=s}var c={},l=!1;for(var u in this.morphAttributes){for(var h=this.morphAttributes[u],d=[],p=0,f=h.length;p0&&(c[u]=d,l=!0)}l&&(t.data.morphAttributes=c,t.data.morphTargetsRelative=this.morphTargetsRelative);var g=this.groups;g.length>0&&(t.data.groups=JSON.parse(JSON.stringify(g)));var y=this.boundingSphere;return null!==y&&(t.data.boundingSphere={center:y.center.toArray(),radius:y.radius}),t},clone:function(){return(new vn).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;var e={};this.name=t.name;var n=t.index;null!==n&&this.setIndex(n.clone(e));var r=t.attributes;for(var i in r){var a=r[i];this.setAttribute(i,a.clone(e))}var o=t.morphAttributes;for(var s in o){for(var c=[],l=o[s],u=0,h=l.length;un.far?null:{distance:c,point:Dn.clone(),object:t}}function Bn(t,e,n,r,i,a,o,s,c,l,u,h){_n.fromBufferAttribute(i,l),bn.fromBufferAttribute(i,u),wn.fromBufferAttribute(i,h);var d=t.morphTargetInfluences;if(e.morphTargets&&a&&d){En.set(0,0,0),An.set(0,0,0),Ln.set(0,0,0);for(var p=0,f=a.length;p0){var r=e[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var i=0,a=r.length;i0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){var n,r=this.geometry,i=this.material,a=this.matrixWorld;if(void 0!==i&&(null===r.boundingSphere&&r.computeBoundingSphere(),xn.copy(r.boundingSphere),xn.applyMatrix4(a),!1!==t.ray.intersectsSphere(xn)&&(gn.getInverse(a),yn.copy(t.ray).applyMatrix4(gn),null===r.boundingBox||!1!==yn.intersectsBox(r.boundingBox))))if(r.isBufferGeometry){var o=r.index,s=r.attributes.position,c=r.morphAttributes.position,l=r.morphTargetsRelative,u=r.attributes.uv,h=r.attributes.uv2,d=r.groups,p=r.drawRange;if(null!==o)if(Array.isArray(i))for(var f=0,m=d.length;f0&&(B=U);for(var H=0,k=F.length;H0?1:-1,h.push(A.x,A.y,A.z),d.push(C/m),d.push(1-L/v),T+=1}for(var I=0;I0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;var i={};for(var a in this.extensions)!0===this.extensions[a]&&(i[a]=!0);return Object.keys(i).length>0&&(e.extensions=i),e},kn.prototype=Object.assign(Object.create(be.prototype),{constructor:kn,isCamera:!0,copy:function(t,e){return be.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new wt),this.updateMatrixWorld(!0);var e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){be.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.getInverse(this.matrixWorld)},updateWorldMatrix:function(t,e){be.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}}),Vn.prototype=Object.assign(Object.create(kn.prototype),{constructor:Vn,isPerspectiveCamera:!0,copy:function(t,e){return kn.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){var e=.5*this.getFilmHeight()/t;this.fov=2*st.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){var t=Math.tan(.5*st.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*st.RAD2DEG*Math.atan(Math.tan(.5*st.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,r,i,a){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=this.near,e=t*Math.tan(.5*st.DEG2RAD*this.fov)/this.zoom,n=2*e,r=this.aspect*n,i=-.5*r,a=this.view;if(null!==this.view&&this.view.enabled){var o=a.fullWidth,s=a.fullHeight;i+=a.offsetX*r/o,e-=a.offsetY*n/s,r*=a.width/o,n*=a.height/s}var c=this.filmOffset;0!==c&&(i+=t*c/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,e,e-n,t,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(t){var e=be.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});var Wn=90;function jn(t,e,n){if(be.call(this),this.type="CubeCamera",!0===n.isWebGLCubeRenderTarget){this.renderTarget=n;var r=new Vn(Wn,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new wt(1,0,0)),this.add(r);var i=new Vn(Wn,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new wt(-1,0,0)),this.add(i);var a=new Vn(Wn,1,t,e);a.layers=this.layers,a.up.set(0,0,1),a.lookAt(new wt(0,1,0)),this.add(a);var o=new Vn(Wn,1,t,e);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(new wt(0,-1,0)),this.add(o);var s=new Vn(Wn,1,t,e);s.layers=this.layers,s.up.set(0,-1,0),s.lookAt(new wt(0,0,1)),this.add(s);var c=new Vn(Wn,1,t,e);c.layers=this.layers,c.up.set(0,-1,0),c.lookAt(new wt(0,0,-1)),this.add(c),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();var l=t.xr.enabled,u=t.getRenderTarget();t.xr.enabled=!1;var h=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,r),t.setRenderTarget(n,1),t.render(e,i),t.setRenderTarget(n,2),t.render(e,a),t.setRenderTarget(n,3),t.render(e,o),t.setRenderTarget(n,4),t.render(e,s),n.texture.generateMipmaps=h,t.setRenderTarget(n,5),t.render(e,c),t.setRenderTarget(u),t.xr.enabled=l},this.clear=function(t,e,r,i){for(var a=t.getRenderTarget(),o=0;o<6;o++)t.setRenderTarget(n,o),t.clear(e,r,i);t.setRenderTarget(a)}}else console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.")}function qn(t,e,n,i,a,o,s,c,l,u){t=void 0!==t?t:[],e=void 0!==e?e:r,s=void 0!==s?s:S,gt.call(this,t,e,n,i,a,o,s,c,l,u),this.flipY=!1,this._needsFlipEnvMap=!0}function Xn(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),xt.call(this,t,t,e),e=e||{},this.texture=new qn(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}function Yn(t,e,n,r,i,a,o,s,c,l,u,h){gt.call(this,null,a,o,s,c,l,r,i,u,h),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==c?c:d,this.minFilter=void 0!==l?l:d,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}jn.prototype=Object.create(be.prototype),jn.prototype.constructor=jn,qn.prototype=Object.create(gt.prototype),qn.prototype.constructor=qn,qn.prototype.isCubeTexture=!0,Object.defineProperty(qn.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}}),Xn.prototype=Object.create(xt.prototype),Xn.prototype.constructor=Xn,Xn.prototype.isWebGLCubeRenderTarget=!0,Xn.prototype.fromEquirectangularTexture=function(t,e){this.texture.type=e.type,this.texture.format=T,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;var n={tEquirect:{value:null}},r="\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t",i="\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t",a=new zn(5,5,5),o=new Hn({name:"CubemapFromEquirect",uniforms:Gn(n),vertexShader:r,fragmentShader:i,side:1,blending:0});o.uniforms.tEquirect.value=e;var s=new Nn(a,o),c=e.minFilter;return e.minFilter===g&&(e.minFilter=m),new jn(1,10,this).update(t,s),e.minFilter=c,s.geometry.dispose(),s.material.dispose(),this},Yn.prototype=Object.create(gt.prototype),Yn.prototype.constructor=Yn,Yn.prototype.isDataTexture=!0;var Zn=new Ht,Jn=new wt,Qn=function(){function t(t,e,n,r,i,a){this.planes=[void 0!==t?t:new Te,void 0!==e?e:new Te,void 0!==n?n:new Te,void 0!==r?r:new Te,void 0!==i?i:new Te,void 0!==a?a:new Te]}var e=t.prototype;return e.set=function(t,e,n,r,i,a){var o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},e.setFromProjectionMatrix=function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7],h=n[8],d=n[9],p=n[10],f=n[11],m=n[12],v=n[13],g=n[14],y=n[15];return e[0].setComponents(o-r,u-s,f-h,y-m).normalize(),e[1].setComponents(o+r,u+s,f+h,y+m).normalize(),e[2].setComponents(o+i,u+c,f+d,y+v).normalize(),e[3].setComponents(o-i,u-c,f-d,y-v).normalize(),e[4].setComponents(o-a,u-l,f-p,y-g).normalize(),e[5].setComponents(o+a,u+l,f+p,y+g).normalize(),this},e.intersectsObject=function(t){var e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Zn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Zn)},e.intersectsSprite=function(t){return Zn.center.set(0,0,0),Zn.radius=.7071067811865476,Zn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Zn)},e.intersectsSphere=function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?t.max.x:t.min.x,Jn.y=r.normal.y>0?t.max.y:t.min.y,Jn.z=r.normal.z>0?t.max.z:t.min.z,r.distanceToPoint(Jn)<0)return!1}return!0},e.containsPoint=function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0},t}();function Kn(){var t=null,e=!1,n=null,r=null;function i(e,a){n(e,a),r=t.requestAnimationFrame(i)}return{start:function(){!0!==e&&null!==n&&(r=t.requestAnimationFrame(i),e=!0)},stop:function(){t.cancelAnimationFrame(r),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function $n(t,e){var n=e.isWebGL2,r=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),r.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);var n=r.get(e);n&&(t.deleteBuffer(n.buffer),r.delete(e))},update:function(e,i){if(e.isGLBufferAttribute){var a=r.get(e);(!a||a.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},nr={common:{diffuse:{value:new Ve(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new ft},uv2Transform:{value:new ft},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new pt(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Ve(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Ve(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new ft}},sprite:{diffuse:{value:new Ve(15658734)},opacity:{value:1},center:{value:new pt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new ft}}},rr={basic:{uniforms:Fn([nr.common,nr.specularmap,nr.envmap,nr.aomap,nr.lightmap,nr.fog]),vertexShader:er.meshbasic_vert,fragmentShader:er.meshbasic_frag},lambert:{uniforms:Fn([nr.common,nr.specularmap,nr.envmap,nr.aomap,nr.lightmap,nr.emissivemap,nr.fog,nr.lights,{emissive:{value:new Ve(0)}}]),vertexShader:er.meshlambert_vert,fragmentShader:er.meshlambert_frag},phong:{uniforms:Fn([nr.common,nr.specularmap,nr.envmap,nr.aomap,nr.lightmap,nr.emissivemap,nr.bumpmap,nr.normalmap,nr.displacementmap,nr.fog,nr.lights,{emissive:{value:new Ve(0)},specular:{value:new Ve(1118481)},shininess:{value:30}}]),vertexShader:er.meshphong_vert,fragmentShader:er.meshphong_frag},standard:{uniforms:Fn([nr.common,nr.envmap,nr.aomap,nr.lightmap,nr.emissivemap,nr.bumpmap,nr.normalmap,nr.displacementmap,nr.roughnessmap,nr.metalnessmap,nr.fog,nr.lights,{emissive:{value:new Ve(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:er.meshphysical_vert,fragmentShader:er.meshphysical_frag},toon:{uniforms:Fn([nr.common,nr.aomap,nr.lightmap,nr.emissivemap,nr.bumpmap,nr.normalmap,nr.displacementmap,nr.gradientmap,nr.fog,nr.lights,{emissive:{value:new Ve(0)}}]),vertexShader:er.meshtoon_vert,fragmentShader:er.meshtoon_frag},matcap:{uniforms:Fn([nr.common,nr.bumpmap,nr.normalmap,nr.displacementmap,nr.fog,{matcap:{value:null}}]),vertexShader:er.meshmatcap_vert,fragmentShader:er.meshmatcap_frag},points:{uniforms:Fn([nr.points,nr.fog]),vertexShader:er.points_vert,fragmentShader:er.points_frag},dashed:{uniforms:Fn([nr.common,nr.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:er.linedashed_vert,fragmentShader:er.linedashed_frag},depth:{uniforms:Fn([nr.common,nr.displacementmap]),vertexShader:er.depth_vert,fragmentShader:er.depth_frag},normal:{uniforms:Fn([nr.common,nr.bumpmap,nr.normalmap,nr.displacementmap,{opacity:{value:1}}]),vertexShader:er.normal_vert,fragmentShader:er.normal_frag},sprite:{uniforms:Fn([nr.sprite,nr.fog]),vertexShader:er.sprite_vert,fragmentShader:er.sprite_frag},background:{uniforms:{uvTransform:{value:new ft},t2D:{value:null}},vertexShader:er.background_vert,fragmentShader:er.background_frag},cube:{uniforms:Fn([nr.envmap,{opacity:{value:1}}]),vertexShader:er.cube_vert,fragmentShader:er.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:er.equirect_vert,fragmentShader:er.equirect_frag},distanceRGBA:{uniforms:Fn([nr.common,nr.displacementmap,{referencePosition:{value:new wt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:er.distanceRGBA_vert,fragmentShader:er.distanceRGBA_frag},shadow:{uniforms:Fn([nr.lights,nr.fog,{color:{value:new Ve(0)},opacity:{value:1}}]),vertexShader:er.shadow_vert,fragmentShader:er.shadow_frag}};function ir(t,e,n,r,i){var a,o,c=new Ve(0),l=0,u=null,h=0,d=null;function p(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,i)}return{getClearColor:function(){return c},setClearColor:function(t,e){c.set(t),p(c,l=void 0!==e?e:1)},getClearAlpha:function(){return l},setClearAlpha:function(t){p(c,l=t)},render:function(n,i,f,m){var v=!0===i.isScene?i.background:null;v&&v.isTexture&&(v=e.get(v));var g=t.xr,y=g.getSession&&g.getSession();y&&"additive"===y.environmentBlendMode&&(v=null),null===v?p(c,l):v&&v.isColor&&(p(v,1),m=!0),(t.autoClear||m)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),v&&(v.isCubeTexture||v.isWebGLCubeRenderTarget||v.mapping===s)?(void 0===o&&((o=new Nn(new zn(1,1,1),new Hn({name:"BackgroundCubeMaterial",uniforms:Gn(rr.cube.uniforms),vertexShader:rr.cube.vertexShader,fragmentShader:rr.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),o.geometry.deleteAttribute("uv"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(o)),v.isWebGLCubeRenderTarget&&(v=v.texture),o.material.uniforms.envMap.value=v,o.material.uniforms.flipEnvMap.value=v.isCubeTexture&&v._needsFlipEnvMap?-1:1,u===v&&h===v.version&&d===t.toneMapping||(o.material.needsUpdate=!0,u=v,h=v.version,d=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):v&&v.isTexture&&(void 0===a&&((a=new Nn(new tr(2,2),new Hn({name:"BackgroundMaterial",uniforms:Gn(rr.background.uniforms),vertexShader:rr.background.vertexShader,fragmentShader:rr.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(a)),a.material.uniforms.t2D.value=v,!0===v.matrixAutoUpdate&&v.updateMatrix(),a.material.uniforms.uvTransform.value.copy(v.matrix),u===v&&h===v.version&&d===t.toneMapping||(a.material.needsUpdate=!0,u=v,h=v.version,d=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function ar(t,e,n,r){var i=t.getParameter(34921),a=r.isWebGL2?null:e.get("OES_vertex_array_object"),o=r.isWebGL2||null!==a,s={},c=d(null),l=c;function u(e){return r.isWebGL2?t.bindVertexArray(e):a.bindVertexArrayOES(e)}function h(e){return r.isWebGL2?t.deleteVertexArray(e):a.deleteVertexArrayOES(e)}function d(t){for(var e=[],n=[],r=[],a=0;a=0){var y=c[h];if(void 0!==y){var x=y.normalized,_=y.itemSize,b=n.get(y);if(void 0===b)continue;var w=b.buffer,M=b.type,S=b.bytesPerElement;if(y.isInterleavedBufferAttribute){var T=y.data,E=T.stride,A=y.offset;T&&T.isInstancedInterleavedBuffer?(m(d,T.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=T.meshPerAttribute*T.count)):f(d),t.bindBuffer(34962,w),g(d,_,M,x,E*S,A*S)}else y.isInstancedBufferAttribute?(m(d,y.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=y.meshPerAttribute*y.count)):f(d),t.bindBuffer(34962,w),g(d,_,M,x,0,0)}else if("instanceMatrix"===h){var L=n.get(i.instanceMatrix);if(void 0===L)continue;var R=L.buffer,C=L.type;m(d+0,1),m(d+1,1),m(d+2,1),m(d+3,1),t.bindBuffer(34962,R),t.vertexAttribPointer(d+0,4,C,!1,64,0),t.vertexAttribPointer(d+1,4,C,!1,64,16),t.vertexAttribPointer(d+2,4,C,!1,64,32),t.vertexAttribPointer(d+3,4,C,!1,64,48)}else if("instanceColor"===h){var P=n.get(i.instanceColor);if(void 0===P)continue;var I=P.buffer,D=P.type;m(d,1),t.bindBuffer(34962,I),t.vertexAttribPointer(d,3,D,!1,12,0)}else if(void 0!==u){var N=u[h];if(void 0!==N)switch(N.length){case 2:t.vertexAttrib2fv(d,N);break;case 3:t.vertexAttrib3fv(d,N);break;case 4:t.vertexAttrib4fv(d,N);break;default:t.vertexAttrib1fv(d,N)}}}}v()}(i,c,h,y),null!==x&&t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){for(var t in y(),s){var e=s[t];for(var n in e){var r=e[n];for(var i in r)h(r[i].object),delete r[i];delete e[n]}delete s[t]}},releaseStatesOfGeometry:function(t){if(void 0!==s[t.id]){var e=s[t.id];for(var n in e){var r=e[n];for(var i in r)h(r[i].object),delete r[i];delete e[n]}delete s[t.id]}},releaseStatesOfProgram:function(t){for(var e in s){var n=s[e];if(void 0!==n[t.id]){var r=n[t.id];for(var i in r)h(r[i].object),delete r[i];delete n[t.id]}}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:v}}function or(t,e,n,r){var i,a=r.isWebGL2;this.setMode=function(t){i=t},this.render=function(e,r){t.drawArrays(i,e,r),n.update(r,i,1)},this.renderInstances=function(r,o,s){if(0!==s){var c,l;if(a)c=t,l="drawArraysInstanced";else if(l="drawArraysInstancedANGLE",null===(c=e.get("ANGLE_instanced_arrays")))return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");c[l](i,r,o,s),n.update(o,i,s)}}}function sr(t,e,n){var r;function i(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var a="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext,o=void 0!==n.precision?n.precision:"highp",s=i(o);s!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",s,"instead."),o=s);var c=!0===n.logarithmicDepthBuffer,l=t.getParameter(34930),u=t.getParameter(35660),h=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),v=t.getParameter(36349),g=u>0,y=a||!!e.get("OES_texture_float");return{isWebGL2:a,getMaxAnisotropy:function(){if(void 0!==r)return r;var n=e.get("EXT_texture_filter_anisotropic");return r=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:i,precision:o,logarithmicDepthBuffer:c,maxTextures:l,maxVertexTextures:u,maxTextureSize:h,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:v,vertexTextures:g,floatFragmentTextures:y,floatVertexTextures:g&&y,maxSamples:a?t.getParameter(36183):0}}function cr(t){var e=this,n=null,r=0,i=!1,a=!1,o=new Te,s=new ft,c={value:null,needsUpdate:!1};function l(){c.value!==n&&(c.value=n,c.needsUpdate=r>0),e.numPlanes=r,e.numIntersection=0}function u(t,n,r,i){var a=null!==t?t.length:0,l=null;if(0!==a){if(l=c.value,!0!==i||null===l){var u=r+4*a,h=n.matrixWorldInverse;s.getNormalMatrix(h),(null===l||l.length0){var c=t.getRenderList(),l=t.getRenderTarget(),u=t.getRenderState(),h=new Xn(s.height/2);return h.fromEquirectangularTexture(t,r),e.set(r,h),t.setRenderTarget(l),t.setRenderList(c),t.setRenderState(u),n(h.texture,r.mapping)}return null}}return r},dispose:function(){e=new WeakMap}}}function ur(t){var e={};return{has:function(n){if(void 0!==e[n])return null!==e[n];var r;switch(n){case"WEBGL_depth_texture":r=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=t.getExtension(n)}return e[n]=r,null!==r},get:function(t){return this.has(t)||console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e[t]}}}function hr(t,e,n,r){var i=new WeakMap,a=new WeakMap;function o(t){var s=t.target,c=i.get(s);for(var l in null!==c.index&&e.remove(c.index),c.attributes)e.remove(c.attributes[l]);s.removeEventListener("dispose",o),i.delete(s);var u=a.get(c);u&&(e.remove(u),a.delete(c)),r.releaseStatesOfGeometry(s),!0===s.isInstancedBufferGeometry&&delete s._maxInstanceCount,n.memory.geometries--}function s(t){var n=[],r=t.index,i=t.attributes.position,o=0;if(null!==r){var s=r.array;o=r.version;for(var c=0,l=s.length;c65535?rn:en)(n,1);x.version=o;var _=a.get(t);_&&e.remove(_),a.set(t,x)}return{get:function(t,e){var r=i.get(e);return r||(e.addEventListener("dispose",o),e.isBufferGeometry?r=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new vn).setFromObject(t)),r=e._bufferGeometry),i.set(e,r),n.memory.geometries++,r)},update:function(t){var n=t.attributes;for(var r in n)e.update(n[r],34962);var i=t.morphAttributes;for(var a in i)for(var o=i[a],s=0,c=o.length;s0)return t;var i=e*n,a=Sr[i];if(void 0===a&&(a=new Float32Array(i),Sr[i]=a),0!==e){r.toArray(a,0);for(var o=1,s=0;o!==e;++o)s+=n,t[o].toArray(a,s)}return a}function Cr(t,e){if(t.length!==e.length)return!1;for(var n=0,r=t.length;n/gm;function Ti(t){return t.replace(Si,Ei)}function Ei(t,e){var n=er[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Ti(n)}var Ai=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Li=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Ri(t){return t.replace(Li,Pi).replace(Ai,Ci)}function Ci(t,e,n,r){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Pi(t,e,n,r)}function Pi(t,e,n,r){for(var i="",a=parseInt(e);a0?t.gammaFactor:1,w=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(bi).join("\n")}(n),M=function(t){var e=[];for(var n in t){var r=t[n];!1!==r&&e.push("#define "+n+" "+r)}return e.join("\n")}(f),S=p.createProgram(),T=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?((o=[M].filter(bi).join("\n")).length>0&&(o+="\n"),(l=[w,M].filter(bi).join("\n")).length>0&&(l+="\n")):(o=[Ii(n),"#define SHADER_NAME "+n.shaderName,M,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+b,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+x:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+g:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(bi).join("\n"),l=[w,Ii(n),"#define SHADER_NAME "+n.shaderName,M,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+b,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+y:"",n.envMap?"#define "+x:"",n.envMap?"#define "+_:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+g:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?er.tonemapping_pars_fragment:"",0!==n.toneMapping?_i("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",er.encodings_pars_fragment,n.map?xi("mapTexelToLinear",n.mapEncoding):"",n.matcap?xi("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?xi("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?xi("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?xi("lightMapTexelToLinear",n.lightMapEncoding):"",(u="linearToOutputTexel",h=n.outputEncoding,d=gi(h),"vec4 "+u+"( vec4 value ) { return LinearTo"+d[0]+d[1]+"; }"),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(bi).join("\n")),m=Mi(m=wi(m=Ti(m),n),n),v=Mi(v=wi(v=Ti(v),n),n),m=Ri(m),v=Ri(v),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(T="#version 300 es\n",o=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+o,l=["#define varying in",n.glslVersion===nt?"":"out highp vec4 pc_fragColor;",n.glslVersion===nt?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+l);var E,A,L=T+l+v,R=mi(p,35633,T+o+m),C=mi(p,35632,L);if(p.attachShader(S,R),p.attachShader(S,C),void 0!==n.index0AttributeName?p.bindAttribLocation(S,0,n.index0AttributeName):!0===n.morphTargets&&p.bindAttribLocation(S,0,"position"),p.linkProgram(S),t.debug.checkShaderErrors){var P=p.getProgramInfoLog(S).trim(),I=p.getShaderInfoLog(R).trim(),D=p.getShaderInfoLog(C).trim(),N=!0,O=!0;if(!1===p.getProgramParameter(S,35714)){N=!1;var B=yi(p,R,"vertex"),z=yi(p,C,"fragment");console.error("THREE.WebGLProgram: shader error: ",p.getError(),"35715",p.getProgramParameter(S,35715),"gl.getProgramInfoLog",P,B,z)}else""!==P?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",P):""!==I&&""!==D||(O=!1);O&&(this.diagnostics={runnable:N,programLog:P,vertexShader:{log:I,prefix:o},fragmentShader:{log:D,prefix:l}})}return p.deleteShader(R),p.deleteShader(C),this.getUniforms=function(){return void 0===E&&(E=new fi(p,S)),E},this.getAttributes=function(){return void 0===A&&(A=function(t,e){for(var n={},r=t.getProgramParameter(e,35721),i=0;i0,maxBones:E,useVertexTexture:h,morphTargets:i.morphTargets,morphNormals:i.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:i.dithering,shadowMapEnabled:t.shadowMap.enabled&&v.length>0,shadowMapType:t.shadowMap.type,toneMapping:i.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:i.premultipliedAlpha,alphaTest:i.alphaTest,doubleSided:2===i.side,flipSided:1===i.side,depthPacking:void 0!==i.depthPacking&&i.depthPacking,index0AttributeName:i.index0AttributeName,extensionDerivatives:i.extensions&&i.extensions.derivatives,extensionFragDepth:i.extensions&&i.extensions.fragDepth,extensionDrawBuffers:i.extensions&&i.extensions.drawBuffers,extensionShaderTextureLOD:i.extensions&&i.extensions.shaderTextureLOD,rendererExtensionFragDepth:l||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:l||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:l||n.has("EXT_shader_texture_lod"),customProgramCacheKey:i.customProgramCacheKey()}},getProgramCacheKey:function(e){var n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(var r in e.defines)n.push(r),n.push(e.defines[r]);if(!1===e.isRawShaderMaterial){for(var i=0;i1&&r.sort(t||Bi),i.length>1&&i.sort(e||zi)}}}function Fi(t){var e=new WeakMap;return{get:function(n,r){var i,a=e.get(n);return void 0===a?(i=new Gi(t),e.set(n,new WeakMap),e.get(n).set(r,i)):void 0===(i=a.get(r))&&(i=new Gi(t),a.set(r,i)),i},dispose:function(){e=new WeakMap}}}function Ui(){var t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];var n;switch(e.type){case"DirectionalLight":n={direction:new wt,color:new Ve};break;case"SpotLight":n={position:new wt,direction:new wt,color:new Ve,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new wt,color:new Ve,distance:0,decay:0};break;case"HemisphereLight":n={direction:new wt,skyColor:new Ve,groundColor:new Ve};break;case"RectAreaLight":n={color:new Ve,position:new wt,halfWidth:new wt,halfHeight:new wt}}return t[e.id]=n,n}}}var Hi=0;function ki(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Vi(){for(var t,e=new Ui,n=(t={},{get:function(e){if(void 0!==t[e.id])return t[e.id];var n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new pt};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new pt,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},i=0;i<9;i++)r.probe.push(new wt);var a=new wt,o=new Jt,s=new Jt;return{setup:function(t,i,c){for(var l=0,u=0,h=0,d=0;d<9;d++)r.probe[d].set(0,0,0);var p=0,f=0,m=0,v=0,g=0,y=0,x=0,_=0,b=c.matrixWorldInverse;t.sort(ki);for(var w=0,M=t.length;w0&&(r.rectAreaLTC1=nr.LTC_1,r.rectAreaLTC2=nr.LTC_2),r.ambient[0]=l,r.ambient[1]=u,r.ambient[2]=h;var H=r.hash;H.directionalLength===p&&H.pointLength===f&&H.spotLength===m&&H.rectAreaLength===v&&H.hemiLength===g&&H.numDirectionalShadows===y&&H.numPointShadows===x&&H.numSpotShadows===_||(r.directional.length=p,r.spot.length=m,r.rectArea.length=v,r.point.length=f,r.hemi.length=g,r.directionalShadow.length=y,r.directionalShadowMap.length=y,r.pointShadow.length=x,r.pointShadowMap.length=x,r.spotShadow.length=_,r.spotShadowMap.length=_,r.directionalShadowMatrix.length=y,r.pointShadowMatrix.length=x,r.spotShadowMatrix.length=_,H.directionalLength=p,H.pointLength=f,H.spotLength=m,H.rectAreaLength=v,H.hemiLength=g,H.numDirectionalShadows=y,H.numPointShadows=x,H.numSpotShadows=_,r.version=Hi++)},state:r}}function Wi(){var t=new Vi,e=[],n=[];return{init:function(){e.length=0,n.length=0},state:{lightsArray:e,shadowsArray:n,lights:t},setupLights:function(r){t.setup(e,n,r)},pushLight:function(t){e.push(t)},pushShadow:function(t){n.push(t)}}}function ji(){var t=new WeakMap;return{get:function(e,n){var r;return!1===t.has(e)?(r=new Wi,t.set(e,new WeakMap),t.get(e).set(n,r)):!1===t.get(e).has(n)?(r=new Wi,t.get(e).set(n,r)):r=t.get(e).get(n),r},dispose:function(){t=new WeakMap}}}function qi(t){qe.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function Xi(t){qe.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new wt,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}qi.prototype=Object.create(qe.prototype),qi.prototype.constructor=qi,qi.prototype.isMeshDepthMaterial=!0,qi.prototype.copy=function(t){return qe.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},Xi.prototype=Object.create(qe.prototype),Xi.prototype.constructor=Xi,Xi.prototype.isMeshDistanceMaterial=!0,Xi.prototype.copy=function(t){return qe.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function Yi(t,e,n){var r=new Qn,i=new pt,a=new pt,o=new yt,s=[],c=[],l={},u={0:1,1:0,2:2},h=new Hn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new pt},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=h.clone();p.defines.HORIZONAL_PASS=1;var f=new vn;f.setAttribute("position",new Je(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var v=new Nn(f,h),g=this;function y(n,r){var i=e.update(v);h.uniforms.shadow_pass.value=n.map.texture,h.uniforms.resolution.value=n.mapSize,h.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(r,null,i,h,v,null),p.uniforms.shadow_pass.value=n.mapPass.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(r,null,i,p,v,null)}function x(t,e,n){var r=t<<0|e<<1|n<<2,i=s[r];return void 0===i&&(i=new qi({depthPacking:3201,morphTargets:t,skinning:e}),s[r]=i),i}function _(t,e,n){var r=t<<0|e<<1|n<<2,i=c[r];return void 0===i&&(i=new Xi({morphTargets:t,skinning:e}),c[r]=i),i}function b(e,n,r,i,a,o,s){var c=null,h=x,d=e.customDepthMaterial;if(!0===i.isPointLight&&(h=_,d=e.customDistanceMaterial),void 0===d){var p=!1;!0===r.morphTargets&&(p=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);var f=!1;!0===e.isSkinnedMesh&&(!0===r.skinning?f=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e)),c=h(p,f,!0===e.isInstancedMesh)}else c=d;if(t.localClippingEnabled&&!0===r.clipShadows&&0!==r.clippingPlanes.length){var m=c.uuid,v=r.uuid,g=l[m];void 0===g&&(g={},l[m]=g);var y=g[v];void 0===y&&(y=c.clone(),g[v]=y),c=y}return c.visible=r.visible,c.wireframe=r.wireframe,c.side=3===s?null!==r.shadowSide?r.shadowSide:r.side:null!==r.shadowSide?r.shadowSide:u[r.side],c.clipShadows=r.clipShadows,c.clippingPlanes=r.clippingPlanes,c.clipIntersection=r.clipIntersection,c.wireframeLinewidth=r.wireframeLinewidth,c.linewidth=r.linewidth,!0===i.isPointLight&&!0===c.isMeshDistanceMaterial&&(c.referencePosition.setFromMatrixPosition(i.matrixWorld),c.nearDistance=a,c.farDistance=o),c}function w(n,i,a,o,s){if(!1!==n.visible){if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===s)&&(!n.frustumCulled||r.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);var c=e.update(n),l=n.material;if(Array.isArray(l))for(var u=c.groups,h=0,d=u.length;hn||i.y>n)&&(i.x>n&&(a.x=Math.floor(n/b.x),i.x=a.x*b.x,_.mapSize.x=a.x),i.y>n&&(a.y=Math.floor(n/b.y),i.y=a.y*b.y,_.mapSize.y=a.y)),null===_.map&&!_.isPointLightShadow&&3===this.type){var M={minFilter:m,magFilter:m,format:T};_.map=new xt(i.x,i.y,M),_.map.texture.name=x.name+".shadowMap",_.mapPass=new xt(i.x,i.y,M),_.camera.updateProjectionMatrix()}if(null===_.map){var S={minFilter:d,magFilter:d,format:T};_.map=new xt(i.x,i.y,S),_.map.texture.name=x.name+".shadowMap",_.camera.updateProjectionMatrix()}t.setRenderTarget(_.map),t.clear();for(var E=_.getViewportCount(),A=0;A=1):-1!==R.indexOf("OpenGL ES")&&(L=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(R)[1]),A=L>=2);var C=null,P={},I=new yt,D=new yt;function N(e,n,r){var i=new Uint8Array(4),a=t.createTexture();t.bindTexture(e,a),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(var o=0;or||t.height>r)&&(i=r/Math.max(t.width,t.height)),i<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){var a=e?st.floorPowerOfTwo:Math.floor,o=a(i*t.width),s=a(i*t.height);void 0===l&&(l=P(o,s));var c=n?P(o,s):l;return c.width=o,c.height=s,c.getContext("2d").drawImage(t,0,0,o,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+s+")."),c}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function D(t){return st.isPowerOfTwo(t.width)&&st.isPowerOfTwo(t.height)}function N(t,e){return t.generateMipmaps&&e&&t.minFilter!==d&&t.minFilter!==m}function O(e,n,i,a){t.generateMipmap(e),r.get(n).__maxMipLevel=Math.log(Math.max(i,a))*Math.LOG2E}function B(n,r,i){if(!1===h)return r;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}var a=r;return 6403===r&&(5126===i&&(a=33326),5131===i&&(a=33325),5121===i&&(a=33321)),6407===r&&(5126===i&&(a=34837),5131===i&&(a=34843),5121===i&&(a=32849)),6408===r&&(5126===i&&(a=34836),5131===i&&(a=34842),5121===i&&(a=32856)),33325!==a&&33326!==a&&34842!==a&&34836!==a||e.get("EXT_color_buffer_float"),a}function z(t){return t===d||t===p||t===f?9728:9729}function G(e){var n=e.target;n.removeEventListener("dispose",G),function(e){var n=r.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),r.remove(e)}(n),n.isVideoTexture&&R.delete(n),o.memory.textures--}function F(e){var n=e.target;n.removeEventListener("dispose",F),function(e){var n=r.get(e),i=r.get(e.texture);if(!e)return;void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(var a=0;a<6;a++)t.deleteFramebuffer(n.__webglFramebuffer[a]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[a]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);r.remove(e.texture),r.remove(e)}(n),o.memory.textures--}var U=0;function H(t,e){var i=r.get(t);if(t.isVideoTexture&&function(t){var e=o.render.frame;R.get(t)!==e&&(R.set(t,e),t.update())}(t),t.version>0&&i.__version!==t.version){var a=t.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==a.complete)return void X(i,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,i.__webglTexture)}function k(e,i){var o=r.get(e);e.version>0&&o.__version!==e.version?function(e,r,i){if(6!==r.image.length)return;q(e,r),n.activeTexture(33984+i),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,r.flipY);for(var o=r&&(r.isCompressedTexture||r.image[0].isCompressedTexture),s=r.image[0]&&r.image[0].isDataTexture,c=[],l=0;l<6;l++)c[l]=o||s?s?r.image[l].image:r.image[l]:I(r.image[l],!1,!0,g);var u,d=c[0],p=D(d)||h,f=a.convert(r.format),m=a.convert(r.type),v=B(r.internalFormat,f,m);if(j(34067,r,p),o){for(var y=0;y<6;y++){u=c[y].mipmaps;for(var x=0;x1||r.get(a).__currentAnisotropy)&&(t.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function q(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",G),e.__webglTexture=t.createTexture(),o.memory.textures++)}function X(e,r,i){var o=3553;r.isDataTexture2DArray&&(o=35866),r.isDataTexture3D&&(o=32879),q(e,r),n.activeTexture(33984+i),n.bindTexture(o,e.__webglTexture),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment);var s,c=function(t){return!h&&(t.wrapS!==u||t.wrapT!==u||t.minFilter!==d&&t.minFilter!==m)}(r)&&!1===D(r.image),l=I(r.image,c,!1,y),p=D(l)||h,f=a.convert(r.format),v=a.convert(r.type),g=B(r.internalFormat,f,v);j(o,r,p);var w=r.mipmaps;if(r.isDepthTexture)g=6402,h?g=r.type===b?36012:r.type===_?33190:r.type===M?35056:33189:r.type===b&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),r.format===E&&6402===g&&r.type!==x&&r.type!==_&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=x,v=a.convert(r.type)),r.format===A&&6402===g&&(g=34041,r.type!==M&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=M,v=a.convert(r.type))),n.texImage2D(3553,0,g,l.width,l.height,0,f,v,null);else if(r.isDataTexture)if(w.length>0&&p){for(var L=0,R=w.length;L0&&p){for(var z=0,G=w.length;z=v&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+v),U+=1,t},this.resetTextureUnits=function(){U=0},this.setTexture2D=H,this.setTexture2DArray=function(t,e){var i=r.get(t);t.version>0&&i.__version!==t.version?X(i,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,i.__webglTexture))},this.setTexture3D=function(t,e){var i=r.get(t);t.version>0&&i.__version!==t.version?X(i,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,i.__webglTexture))},this.setTextureCube=k,this.setupRenderTarget=function(e){var i=r.get(e),s=r.get(e.texture);e.addEventListener("dispose",F),s.__webglTexture=t.createTexture(),o.memory.textures++;var c=!0===e.isWebGLCubeRenderTarget,l=!0===e.isWebGLMultisampleRenderTarget,u=D(e)||h;if(!h||e.texture.format!==S||e.texture.type!==b&&e.texture.type!==w||(e.texture.format=T,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),c){i.__webglFramebuffer=[];for(var d=0;d<6;d++)i.__webglFramebuffer[d]=t.createFramebuffer()}else if(i.__webglFramebuffer=t.createFramebuffer(),l)if(h){i.__webglMultisampledFramebuffer=t.createFramebuffer(),i.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,i.__webglColorRenderbuffer);var p=a.convert(e.texture.format),f=a.convert(e.texture.type),m=B(e.texture.internalFormat,p,f),v=Q(e);t.renderbufferStorageMultisample(36161,v,m,e.width,e.height),t.bindFramebuffer(36160,i.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,i.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(i.__webglDepthRenderbuffer=t.createRenderbuffer(),Z(i.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){n.bindTexture(34067,s.__webglTexture),j(34067,e.texture,u);for(var g=0;g<6;g++)Y(i.__webglFramebuffer[g],e,36064,34069+g);N(e.texture,u)&&O(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,s.__webglTexture),j(3553,e.texture,u),Y(i.__webglFramebuffer,e,36064,3553),N(e.texture,u)&&O(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&J(e)},this.updateRenderTargetMipmap=function(t){var e=t.texture;if(N(e,D(t)||h)){var i=t.isWebGLCubeRenderTarget?34067:3553,a=r.get(e).__webglTexture;n.bindTexture(i,a),O(i,e,t.width,t.height),n.bindTexture(i,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(h){var n=r.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);var i=e.width,a=e.height,o=16384;e.depthBuffer&&(o|=256),e.stencilBuffer&&(o|=1024),t.blitFramebuffer(0,0,i,a,0,0,i,a,o,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===K&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),K=!0),t=t.texture),H(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===$&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),$=!0),t=t.texture),k(t,e)}}function Qi(t,e,n){var r=n.isWebGL2;return{convert:function(t){var n;if(t===y)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===x)return 5123;if(1013===t)return 5124;if(t===_)return 5125;if(t===b)return 5126;if(t===w)return r?5131:null!==(n=e.get("OES_texture_half_float"))?n.HALF_FLOAT_OES:null;if(1021===t)return 6406;if(t===S)return 6407;if(t===T)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===E)return 6402;if(t===A)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(t===L||t===R||t===C||t===P){if(null===(n=e.get("WEBGL_compressed_texture_s3tc")))return null;if(t===L)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===R)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===C)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===P)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(t===I||t===D||t===N||t===O){if(null===(n=e.get("WEBGL_compressed_texture_pvrtc")))return null;if(t===I)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===D)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===N)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===O)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return null!==(n=e.get("WEBGL_compressed_texture_etc1"))?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((t===B||t===z)&&null!==(n=e.get("WEBGL_compressed_texture_etc"))){if(t===B)return n.COMPRESSED_RGB8_ETC2;if(t===z)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?null!==(n=e.get("WEBGL_compressed_texture_astc"))?t:null:36492===t?null!==(n=e.get("EXT_texture_compression_bptc"))?t:null:t===M?r?34042:null!==(n=e.get("WEBGL_depth_texture"))?n.UNSIGNED_INT_24_8_WEBGL:null:void 0}}}function Ki(t){Vn.call(this),this.cameras=t||[]}function $i(){be.call(this),this.type="Group"}function ta(){this._targetRay=null,this._grip=null,this._hand=null}function ea(t,e){var n=this,r=null,i=1,a=null,o="local-floor",s=null,c=[],l=new Map,u=new Vn;u.layers.enable(1),u.viewport=new yt;var h=new Vn;h.layers.enable(2),h.viewport=new yt;var d=[u,h],p=new Ki;p.layers.enable(1),p.layers.enable(2);var f=null,m=null;function v(t){var e=l.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function g(){l.forEach((function(t,e){t.disconnect(e)})),l.clear(),t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){a=t,S.setContext(r),S.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}function x(t){for(var e=r.inputSources,n=0;n0&&Pt(a,t,e),o.length>0&&Pt(o,t,e),!0===t.isScene&&t.onAfterRender(p,t,e),null!==x&&(Q.updateRenderTargetMipmap(x),Q.updateMultisampleRenderTarget(x)),Y.buffers.depth.setTest(!0),Y.buffers.depth.setMask(!0),Y.buffers.color.setMask(!0),Y.setPolygonOffset(!1),h=null,d=null}}else console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.")},this.setFramebuffer=function(t){m!==t&&null===x&&mt.bindFramebuffer(36160,t),m=t},this.getActiveCubeFace=function(){return v},this.getActiveMipmapLevel=function(){return g},this.getRenderList=function(){return h},this.setRenderList=function(t){h=t},this.getRenderState=function(){return d},this.setRenderState=function(t){d=t},this.getRenderTarget=function(){return x},this.setRenderTarget=function(t,e,n){void 0===e&&(e=0),void 0===n&&(n=0),x=t,v=e,g=n,t&&void 0===J.get(t).__webglFramebuffer&&Q.setupRenderTarget(t);var r=m,i=!1;if(t){var a=J.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=a[e],i=!0):r=t.isWebGLMultisampleRenderTarget?J.get(t).__webglMultisampledFramebuffer:a,A.copy(t.viewport),L.copy(t.scissor),R=t.scissorTest}else A.copy(O).multiplyScalar(I).floor(),L.copy(B).multiplyScalar(I).floor(),R=z;if(_!==r&&(mt.bindFramebuffer(36160,r),_=r),Y.viewport(A),Y.scissor(L),Y.setScissorTest(R),i){var o=J.get(t.texture);mt.framebufferTexture2D(36160,36064,34069+e,o.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,r,i,a,o){if(t&&t.isWebGLRenderTarget){var s=J.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==o&&(s=s[o]),s){var c=!1;s!==_&&(mt.bindFramebuffer(36160,s),c=!0);try{var l=t.texture,u=l.format,h=l.type;if(u!==T&&dt.convert(u)!==mt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(h===y||dt.convert(h)===mt.getParameter(35738)||h===b&&(X.isWebGL2||j.get("OES_texture_float")||j.get("WEBGL_color_buffer_float"))||h===w&&(X.isWebGL2?j.get("EXT_color_buffer_float"):j.get("EXT_color_buffer_half_float"))))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===mt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&mt.readPixels(e,n,r,i,dt.convert(u),dt.convert(h),a):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{c&&mt.bindFramebuffer(36160,_)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(t,e,n){void 0===n&&(n=0);var r=Math.pow(2,-n),i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=dt.convert(e.format);Q.setTexture2D(e,0),mt.copyTexImage2D(3553,n,o,t.x,t.y,i,a,0),Y.unbindTexture()},this.copyTextureToTexture=function(t,e,n,r){void 0===r&&(r=0);var i=e.image.width,a=e.image.height,o=dt.convert(n.format),s=dt.convert(n.type);Q.setTexture2D(n,0),mt.pixelStorei(37440,n.flipY),mt.pixelStorei(37441,n.premultiplyAlpha),mt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?mt.texSubImage2D(3553,r,t.x,t.y,i,a,o,s,e.image.data):e.isCompressedTexture?mt.compressedTexSubImage2D(3553,r,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,o,e.mipmaps[0].data):mt.texSubImage2D(3553,r,t.x,t.y,o,s,e.image),0===r&&n.generateMipmaps&&mt.generateMipmap(3553),Y.unbindTexture()},this.initTexture=function(t){Q.setTexture2D(t,0),Y.unbindTexture()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function ia(t){ra.call(this,t)}Ki.prototype=Object.assign(Object.create(Vn.prototype),{constructor:Ki,isArrayCamera:!0}),$i.prototype=Object.assign(Object.create(be.prototype),{constructor:$i,isGroup:!0}),Object.assign(ta.prototype,{constructor:ta,getHandSpace:function(){if(null===this._hand&&(this._hand=new $i,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(var t=0;t<=window.XRHand.LITTLE_PHALANX_TIP;t++){var e=new $i;e.matrixAutoUpdate=!1,e.visible=!1,this._hand.joints.push(e),this._hand.add(e)}return this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new $i,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new $i,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){var r=null,i=null,a=null,o=this._targetRay,s=this._grip,c=this._hand;if(t)if(c&&t.hand){a=!0;for(var l=0;l<=window.XRHand.LITTLE_PHALANX_TIP;l++)if(t.hand[l]){var u=e.getJointPose(t.hand[l],n),h=c.joints[l];null!==u&&(h.matrix.fromArray(u.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),h.jointRadius=u.radius),h.visible=null!==u;var d=c.joints[window.XRHand.INDEX_PHALANX_TIP],p=c.joints[window.XRHand.THUMB_PHALANX_TIP],f=d.position.distanceTo(p.position);c.inputState.pinching&&f>.025?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&f<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}}else null!==o&&null!==(r=e.getPose(t.targetRaySpace,n))&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale)),null!==s&&t.gripSpace&&null!==(i=e.getPose(t.gripSpace,n))&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale));return null!==o&&(o.visible=null!==r),null!==s&&(s.visible=null!==i),null!==c&&(c.visible=null!==a),this}}),Object.assign(ea.prototype,rt.prototype),ia.prototype=Object.assign(Object.create(ra.prototype),{constructor:ia,isWebGL1Renderer:!0});var aa=function(){function t(t,e){Object.defineProperty(this,"isFogExp2",{value:!0}),this.name="",this.color=new Ve(t),this.density=void 0!==e?e:25e-5}var e=t.prototype;return e.clone=function(){return new t(this.color,this.density)},e.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}},t}(),oa=function(){function t(t,e,n){Object.defineProperty(this,"isFog",{value:!0}),this.name="",this.color=new Ve(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}var e=t.prototype;return e.clone=function(){return new t(this.color,this.near,this.far)},e.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}},t}(),sa=function(t){function e(){var e;return e=t.call(this)||this,Object.defineProperty(ht(e),"isScene",{value:!0}),e.type="Scene",e.background=null,e.environment=null,e.fog=null,e.overrideMaterial=null,e.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:ht(e)})),e}ut(e,t);var n=e.prototype;return n.copy=function(e,n){return t.prototype.copy.call(this,e,n),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.autoUpdate=e.autoUpdate,this.matrixAutoUpdate=e.matrixAutoUpdate,this},n.toJSON=function(e){var n=t.prototype.toJSON.call(this,e);return null!==this.background&&(n.object.background=this.background.toJSON(e)),null!==this.environment&&(n.object.environment=this.environment.toJSON(e)),null!==this.fog&&(n.object.fog=this.fog.toJSON()),n},e}(be);function ca(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=tt,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=st.generateUUID()}Object.defineProperty(ca.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(ca.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(var r=0,i=this.stride;rt.far||e.push({distance:s,point:pa.clone(),uv:Be.getUV(pa,xa,_a,ba,wa,Ma,Sa,new pt),face:null,object:this})}},copy:function(t){return be.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});var Aa,La,Ra,Ca,Pa,Ia=new wt,Da=new wt;function Na(){be.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}function Oa(t,e){t&&t.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),Nn.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Jt,this.bindMatrixInverse=new Jt}Na.prototype=Object.assign(Object.create(be.prototype),{constructor:Na,isLOD:!0,copy:function(t){be.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n0){var n,r;for(n=1,r=e.length;n0){Ia.setFromMatrixPosition(this.matrixWorld);var n=t.ray.origin.distanceTo(Ia);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){var e=this.levels;if(e.length>1){Ia.setFromMatrixPosition(t.matrixWorld),Da.setFromMatrixPosition(this.matrixWorld);var n,r,i=Ia.distanceTo(Da)/t.zoom;for(e[0].object.visible=!0,n=1,r=e.length;n=e[n].distance;n++)e[n-1].object.visible=!1,e[n].object.visible=!0;for(this._currentLevel=n-1;no)){u.applyMatrix4(this.matrixWorld);var x=t.ray.origin.distanceTo(u);xt.far||e.push({distance:x,point:l.clone().applyMatrix4(this.matrixWorld),index:m,face:null,faceIndex:null,object:this})}}else for(var _=0,b=p.count-1;_o)){u.applyMatrix4(this.matrixWorld);var w=t.ray.origin.distanceTo(u);wt.far||e.push({distance:w,point:l.clone().applyMatrix4(this.matrixWorld),index:_,face:null,faceIndex:null,object:this})}}}else if(n.isGeometry)for(var M=n.vertices,S=M.length,T=0;To)){u.applyMatrix4(this.matrixWorld);var E=t.ray.origin.distanceTo(u);Et.far||e.push({distance:E,point:l.clone().applyMatrix4(this.matrixWorld),index:T,face:null,faceIndex:null,object:this})}}}},updateMorphTargets:function(){var t=this.geometry;if(t.isBufferGeometry){var e=t.morphAttributes,n=Object.keys(e);if(n.length>0){var r=e[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var i=0,a=r.length;i0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});var Ka=new wt,$a=new wt;function to(t,e){Qa.call(this,t,e),this.type="LineSegments"}function eo(t,e){Qa.call(this,t,e),this.type="LineLoop"}function no(t){qe.call(this),this.type="PointsMaterial",this.color=new Ve(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}to.prototype=Object.assign(Object.create(Qa.prototype),{constructor:to,isLineSegments:!0,computeLineDistances:function(){var t=this.geometry;if(t.isBufferGeometry)if(null===t.index){for(var e=t.attributes.position,n=[],r=0,i=e.count;ri.far)return;a.push({distance:l,distanceToRay:Math.sqrt(s),point:c,index:e,face:null,object:o})}}function lo(t,e,n,r,i,a,o,s,c){gt.call(this,t,e,n,r,i,a,o,s,c),this.format=void 0!==o?o:S,this.minFilter=void 0!==a?a:m,this.magFilter=void 0!==i?i:m,this.generateMipmaps=!1;var l=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){l.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function uo(t,e,n,r,i,a,o,s,c,l,u,h){gt.call(this,null,a,o,s,c,l,r,i,u,h),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function ho(t,e,n,r,i,a,o,s,c){gt.call(this,t,e,n,r,i,a,o,s,c),this.needsUpdate=!0}function po(t,e,n,r,i,a,o,s,c,l){if((l=void 0!==l?l:E)!==E&&l!==A)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&l===E&&(n=x),void 0===n&&l===A&&(n=M),gt.call(this,null,r,i,a,o,s,l,n,c),this.image={width:t,height:e},this.magFilter=void 0!==o?o:d,this.minFilter=void 0!==s?s:d,this.flipY=!1,this.generateMipmaps=!1}so.prototype=Object.assign(Object.create(be.prototype),{constructor:so,isPoints:!0,copy:function(t){return be.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){var n=this.geometry,r=this.matrixWorld,i=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),ao.copy(n.boundingSphere),ao.applyMatrix4(r),ao.radius+=i,!1!==t.ray.intersectsSphere(ao)){ro.getInverse(r),io.copy(t.ray).applyMatrix4(ro);var a=i/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a;if(n.isBufferGeometry){var s=n.index,c=n.attributes.position;if(null!==s)for(var l=s.array,u=0,h=l.length;u0){var r=e[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var i=0,a=r.length;i0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),lo.prototype=Object.assign(Object.create(gt.prototype),{constructor:lo,isVideoTexture:!0,update:function(){var t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),uo.prototype=Object.create(gt.prototype),uo.prototype.constructor=uo,uo.prototype.isCompressedTexture=!0,ho.prototype=Object.create(gt.prototype),ho.prototype.constructor=ho,ho.prototype.isCanvasTexture=!0,po.prototype=Object.create(gt.prototype),po.prototype.constructor=po,po.prototype.isDepthTexture=!0;var fo=0,mo=new Jt,vo=new be,go=new wt;function yo(){Object.defineProperty(this,"id",{value:fo+=2}),this.uuid=st.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}yo.prototype=Object.assign(Object.create(rt.prototype),{constructor:yo,isGeometry:!0,applyMatrix4:function(t){for(var e=(new ft).getNormalMatrix(t),n=0,r=this.vertices.length;n0)for(var d=0;d0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){this.computeFaceNormals();for(var t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){for(var t=0,e=this.faces.length;t=0;f--){var m=c[f];this.faces.splice(m,1);for(var v=0,g=this.faceVertexUvs.length;v0,g=f.vertexNormals.length>0,y=1!==f.color.r||1!==f.color.g||1!==f.color.b,x=f.vertexColors.length>0,_=0;if(_=S(_,0,0),_=S(_,1,!0),_=S(_,2,!1),_=S(_,3,m),_=S(_,4,v),_=S(_,5,g),_=S(_,6,y),_=S(_,7,x),o.push(_),o.push(f.a,f.b,f.c),o.push(f.materialIndex),m){var b=this.faceVertexUvs[0][p];o.push(A(b[0]),A(b[1]),A(b[2]))}if(v&&o.push(T(f.normal)),g){var w=f.vertexNormals;o.push(T(w[0]),T(w[1]),T(w[2]))}if(y&&o.push(E(f.color)),x){var M=f.vertexColors;o.push(E(M[0]),E(M[1]),E(M[2]))}}function S(t,e,n){return n?t|1<0&&(t.data.colors=l),h.length>0&&(t.data.uvs=[h]),t.data.faces=o,t},clone:function(){return(new yo).copy(this)},copy:function(t){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;for(var e=t.vertices,n=0,r=e.length;n0&&x(!0),n>0&&x(!1)),l.setIndex(h),l.setAttribute("position",new an(d,3)),l.setAttribute("normal",new an(p,3)),l.setAttribute("uv",new an(f,2)),l}return ut(e,t),e}(vn),Mo=function(t){function e(e,n,r,i,a,o,s,c){var l;return(l=t.call(this)||this).type="CylinderGeometry",l.parameters={radiusTop:e,radiusBottom:n,height:r,radialSegments:i,heightSegments:a,openEnded:o,thetaStart:s,thetaLength:c},l.fromBufferGeometry(new wo(e,n,r,i,a,o,s,c)),l.mergeVertices(),l}return ut(e,t),e}(yo),So=function(t){function e(e,n,r,i,a,o,s){var c;return(c=t.call(this,0,e,n,r,i,a,o,s)||this).type="ConeGeometry",c.parameters={radius:e,height:n,radialSegments:r,heightSegments:i,openEnded:a,thetaStart:o,thetaLength:s},c}return ut(e,t),e}(Mo),To=function(t){function e(e,n,r,i,a,o,s){var c;return(c=t.call(this,0,e,n,r,i,a,o,s)||this).type="ConeBufferGeometry",c.parameters={radius:e,height:n,radialSegments:r,heightSegments:i,openEnded:a,thetaStart:o,thetaLength:s},c}return ut(e,t),e}(wo),Eo=function(t){function e(e,n,r,i){var a;(a=t.call(this)||this).type="PolyhedronBufferGeometry",a.parameters={vertices:e,indices:n,radius:r,detail:i},r=r||1;var o=[],s=[];function c(t,e,n,r){for(var i=r+1,a=[],o=0;o<=i;o++){a[o]=[];for(var s=t.clone().lerp(n,o/i),c=e.clone().lerp(n,o/i),u=i-o,h=0;h<=u;h++)a[o][h]=0===h&&o===i?s:s.clone().lerp(c,h/u)}for(var d=0;d.9&&a<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),r<.2&&(s[t+4]+=1))}}()}(),a.setAttribute("position",new an(o,3)),a.setAttribute("normal",new an(o.slice(),3)),a.setAttribute("uv",new an(s,2)),0===i?a.computeVertexNormals():a.normalizeNormals(),a}return ut(e,t),e}(vn),Ao=function(t){function e(e,n){var r,i=(1+Math.sqrt(5))/2,a=1/i,o=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-a,-i,0,-a,i,0,a,-i,0,a,i,-a,-i,0,-a,i,0,a,-i,0,a,i,0,-i,0,-a,i,0,-a,-i,0,a,i,0,a];return(r=t.call(this,o,[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,n)||this).type="DodecahedronBufferGeometry",r.parameters={radius:e,detail:n},r}return ut(e,t),e}(Eo),Lo=function(t){function e(e,n){var r;return(r=t.call(this)||this).type="DodecahedronGeometry",r.parameters={radius:e,detail:n},r.fromBufferGeometry(new Ao(e,n)),r.mergeVertices(),r}return ut(e,t),e}(yo),Ro=new wt,Co=new wt,Po=new wt,Io=new Be,Do=function(t){function e(e,n){var r;(r=t.call(this)||this).type="EdgesGeometry",r.parameters={thresholdAngle:n},n=void 0!==n?n:1,e.isGeometry&&(e=(new vn).fromGeometry(e));for(var i=Math.pow(10,4),a=Math.cos(st.DEG2RAD*n),o=e.getIndex(),s=e.getAttribute("position"),c=o?o.count:s.count,l=[0,0,0],u=["a","b","c"],h=new Array(3),d={},p=[],f=0;f80*n){r=a=t[0],i=o=t[1];for(var f=n;fa&&(a=s),c>o&&(o=c);l=0!==(l=Math.max(a-r,o-i))?1/l:0}return zo(d,p,n,r,i,l),p};function Oo(t,e,n,r,i){var a,o;if(i===function(t,e,n,r){for(var i=0,a=e,o=n-r;a0)for(a=e;a=e;a-=r)o=ns(a,t[a],t[a+1],o);return o&&Jo(o,o.next)&&(rs(o),o=o.next),o}function Bo(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!Jo(r,r.next)&&0!==Zo(r.prev,r,r.next))r=r.next;else{if(rs(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function zo(t,e,n,r,i,a,o){if(t){!o&&a&&function(t,e,n,r){var i=t;do{null===i.z&&(i.z=jo(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,a,o,s,c,l=1;do{for(n=t,t=null,a=null,o=0;n;){for(o++,r=n,s=0,e=0;e0||c>0&&r;)0!==s&&(0===c||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,c--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;n=r}a.nextZ=null,l*=2}while(o>1)}(i)}(t,r,i,a);for(var s,c,l=t;t.prev!==t.next;)if(s=t.prev,c=t.next,a?Fo(t,r,i,a):Go(t))e.push(s.i/n),e.push(t.i/n),e.push(c.i/n),rs(t),t=c.next,l=c.next;else if((t=c)===l){o?1===o?zo(t=Uo(Bo(t),e,n),e,n,r,i,a,2):2===o&&Ho(t,e,n,r,i,a):zo(Bo(t),e,n,r,i,a,1);break}}}function Go(t){var e=t.prev,n=t,r=t.next;if(Zo(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(Xo(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&Zo(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function Fo(t,e,n,r){var i=t.prev,a=t,o=t.next;if(Zo(i,a,o)>=0)return!1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,u=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,h=jo(s,c,e,n,r),d=jo(l,u,e,n,r),p=t.prevZ,f=t.nextZ;p&&p.z>=h&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Xo(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&Zo(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Xo(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&Zo(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&Xo(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&Zo(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Xo(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&Zo(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Uo(t,e,n){var r=t;do{var i=r.prev,a=r.next.next;!Jo(i,a)&&Qo(i,r,r.next,a)&&ts(i,a)&&ts(a,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(a.i/n),rs(r),rs(r.next),r=t=a),r=r.next}while(r!==t);return Bo(r)}function Ho(t,e,n,r,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&Yo(o,s)){var c=es(o,s);return o=Bo(o,o.next),c=Bo(c,c.next),zo(o,e,n,r,i,a),void zo(c,e,n,r,i,a)}s=s.next}o=o.next}while(o!==t)}function ko(t,e){return t.x-e.x}function Vo(t,e){if(e=function(t,e){var n,r=e,i=t.x,a=t.y,o=-1/0;do{if(a<=r.y&&a>=r.next.y&&r.next.y!==r.y){var s=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>o){if(o=s,s===i){if(a===r.y)return r;if(a===r.next.y)return r.next}n=r.x=r.x&&r.x>=u&&i!==r.x&&Xo(an.x||r.x===n.x&&Wo(n,r)))&&(n=r,d=c)),r=r.next}while(r!==l);return n}(t,e)){var n=es(e,t);Bo(e,e.next),Bo(n,n.next)}}function Wo(t,e){return Zo(t.prev,t,e.prev)<0&&Zo(e.next,t,t.next)<0}function jo(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function qo(t){var e=t,n=t;do{(e.x=0&&(t-o)*(r-s)-(n-o)*(e-s)>=0&&(n-o)*(a-s)-(i-o)*(r-s)>=0}function Yo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Qo(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(ts(t,e)&&ts(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)&&(Zo(t.prev,t,e.prev)||Zo(t,e.prev,e))||Jo(t,e)&&Zo(t.prev,t,t.next)>0&&Zo(e.prev,e,e.next)>0)}function Zo(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Jo(t,e){return t.x===e.x&&t.y===e.y}function Qo(t,e,n,r){var i=$o(Zo(t,e,n)),a=$o(Zo(t,e,r)),o=$o(Zo(n,r,t)),s=$o(Zo(n,r,e));return i!==a&&o!==s||(!(0!==i||!Ko(t,n,e))||(!(0!==a||!Ko(t,r,e))||(!(0!==o||!Ko(n,t,r))||!(0!==s||!Ko(n,e,r)))))}function Ko(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function $o(t){return t>0?1:t<0?-1:0}function ts(t,e){return Zo(t.prev,t,t.next)<0?Zo(t,e,t.next)>=0&&Zo(t,t.prev,e)>=0:Zo(t,e,t.prev)<0||Zo(t,t.next,e)<0}function es(t,e){var n=new is(t.i,t.x,t.y),r=new is(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function ns(t,e,n,r){var i=new is(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function rs(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function is(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}var as={area:function(t){for(var e=t.length,n=0,r=e-1,i=0;i2&&t[e-1].equals(t[0])&&t.pop()}function ss(t,e){for(var n=0;nNumber.EPSILON){var d=Math.sqrt(u),p=Math.sqrt(c*c+l*l),f=e.x-s/d,m=e.y+o/d,v=((n.x-l/p-f)*l-(n.y+c/p-m)*c)/(o*l-s*c),g=(r=f+o*v-t.x)*r+(i=m+s*v-t.y)*i;if(g<=2)return new pt(r,i);a=Math.sqrt(g/2)}else{var y=!1;o>Number.EPSILON?c>Number.EPSILON&&(y=!0):o<-Number.EPSILON?c<-Number.EPSILON&&(y=!0):Math.sign(s)===Math.sign(l)&&(y=!0),y?(r=-s,i=o,a=Math.sqrt(u)):(r=o,i=s,a=Math.sqrt(u/2))}return new pt(r/a,i/a)}for(var z=[],G=0,F=R.length,U=F-1,H=G+1;G=0;yt--){for(var xt=yt/p,_t=u*Math.cos(xt*Math.PI/2),bt=h*Math.sin(xt*Math.PI/2)+d,Mt=0,St=R.length;Mt=0;){var r=n,i=n-1;i<0&&(i=t.length-1);for(var a=0,o=s+2*p;a=0?(t(g-s,m,u),h.subVectors(l,u)):(t(g+s,m,u),h.subVectors(u,l)),m-s>=0?(t(g,m-s,u),d.subVectors(l,u)):(t(g,m+s,u),d.subVectors(u,l)),c.crossVectors(h,d).normalize(),a.push(c.x,c.y,c.z),o.push(g,m)}for(var y=0;y0)&&f.push(E,A,R),(S!==r-1||l=r)){u.push(c.times[d]);for(var f=0;fa.tracks[v].times[0]&&(m=a.tracks[v].times[0]);for(var g=0;g=r.times[h]){var m=h*c+s,v=m+c-s;d=Js.arraySlice(r.values,m,v)}else{var g=r.createInterpolant(),y=s,x=c-s;g.evaluate(a),d=Js.arraySlice(g.resultBuffer,y,x)}"quaternion"===i&&(new bt).fromArray(d).normalize().conjugate().toArray(d);for(var _=o.times.length,b=0;b<_;++b){var w=b*u+l;if("quaternion"===i)bt.multiplyQuaternionsFlat(o.values,w,d,0,o.values,w);else for(var M=u-2*l,S=0;S=i)break t;var s=e[1];t=(i=e[--n-1]))break e}a=n,n=0}for(;n>>1;te;)--a;if(++a,0!==i||a!==r){i>=a&&(i=(a=Math.max(a,1))-1);var o=this.getValueSize();this.times=Js.arraySlice(n,i,a),this.values=Js.arraySlice(this.values,i*o,a*o)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);for(var a=null,o=0;o!==i;o++){var s=n[o];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,s),t=!1;break}if(null!==a&&a>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,s,a),t=!1;break}a=s}if(void 0!==r&&Js.isTypedArray(r))for(var c=0,l=r.length;c!==l;++c){var u=r[c];if(isNaN(u)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,c,u),t=!1;break}}return t},optimize:function(){for(var t=Js.arraySlice(this.times),e=Js.arraySlice(this.values),n=this.getValueSize(),r=this.getInterpolation()===U,i=t.length-1,a=1,o=1;o0){t[a]=t[i];for(var g=i*n,y=a*n,x=0;x!==n;++x)e[y+x]=e[g+x];++a}return a!==t.length?(this.times=Js.arraySlice(t,0,a),this.values=Js.arraySlice(e,0,a*n)):(this.times=t,this.values=e),this},clone:function(){var t=Js.arraySlice(this.times,0),e=Js.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),nc.prototype=Object.assign(Object.create(ec.prototype),{constructor:nc,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:G,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),rc.prototype=Object.assign(Object.create(ec.prototype),{constructor:rc,ValueTypeName:"color"}),ic.prototype=Object.assign(Object.create(ec.prototype),{constructor:ic,ValueTypeName:"number"}),ac.prototype=Object.assign(Object.create(Qs.prototype),{constructor:ac,interpolate_:function(t,e,n,r){for(var i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-e)/(r-e),c=t*o,l=c+o;c!==l;c+=4)bt.slerpFlat(i,0,a,c-o,a,c,s);return i}}),oc.prototype=Object.assign(Object.create(ec.prototype),{constructor:oc,ValueTypeName:"quaternion",DefaultInterpolation:F,InterpolantFactoryMethodLinear:function(t){return new ac(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),sc.prototype=Object.assign(Object.create(ec.prototype),{constructor:sc,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:G,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),cc.prototype=Object.assign(Object.create(ec.prototype),{constructor:cc,ValueTypeName:"vector"}),Object.assign(lc,{parse:function(t){for(var e=[],n=t.tracks,r=1/(t.fps||1),i=0,a=n.length;i!==a;++i)e.push(uc(n[i]).scale(r));return new lc(t.name,t.duration,e,t.blendMode)},toJSON:function(t){for(var e=[],n=t.tracks,r={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode},i=0,a=n.length;i!==a;++i)e.push(ec.toJSON(n[i]));return r},CreateFromMorphTargetSequence:function(t,e,n,r){for(var i=e.length,a=[],o=0;o1){var l=c[1],u=r[l];u||(r[l]=u=[]),u.push(s)}}var h=[];for(var d in r)h.push(lc.CreateFromMorphTargetSequence(d,r[d],e,n));return h},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var a=[],o=[];Js.flattenJSON(n,a,o,r),0!==a.length&&i.push(new t(e,a,o))}},r=[],i=t.name||"default",a=t.fps||30,o=t.blendMode,s=t.length||-1,c=t.hierarchy||[],l=0;l0||0===t.search(/^data\:image\/jpeg/);i.format=r?S:T,i.needsUpdate=!0,void 0!==e&&e(i)}),n,r),i}}),Object.assign(Mc.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){var n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,n=[],r=this.getPoint(0),i=0;n.push(0);for(var a=1;a<=t;a++)i+=(e=this.getPoint(a/t)).distanceTo(r),n.push(i),r=e;return this.cacheArcLengths=n,n},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var n,r=this.getLengths(),i=0,a=r.length;n=e||t*r[a-1];for(var o,s=0,c=a-1;s<=c;)if((o=r[i=Math.floor(s+(c-s)/2)]-n)<0)s=i+1;else{if(!(o>0)){c=i;break}c=i-1}if(r[i=c]===n)return i/(a-1);var l=r[i];return(i+(n-l)/(r[i+1]-l))/(a-1)},getTangent:function(t,e){var n=1e-4,r=t-n,i=t+n;r<0&&(r=0),i>1&&(i=1);var a=this.getPoint(r),o=this.getPoint(i),s=e||(a.isVector2?new pt:new wt);return s.copy(o).sub(a).normalize(),s},getTangentAt:function(t,e){var n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){for(var n=new wt,r=[],i=[],a=[],o=new wt,s=new Jt,c=0;c<=t;c++){var l=c/t;r[c]=this.getTangentAt(l,new wt),r[c].normalize()}i[0]=new wt,a[0]=new wt;var u=Number.MAX_VALUE,h=Math.abs(r[0].x),d=Math.abs(r[0].y),p=Math.abs(r[0].z);h<=u&&(u=h,n.set(1,0,0)),d<=u&&(u=d,n.set(0,1,0)),p<=u&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(var f=1;f<=t;f++){if(i[f]=i[f-1].clone(),a[f]=a[f-1].clone(),o.crossVectors(r[f-1],r[f]),o.length()>Number.EPSILON){o.normalize();var m=Math.acos(st.clamp(r[f-1].dot(r[f]),-1,1));i[f].applyMatrix4(s.makeRotationAxis(o,m))}a[f].crossVectors(r[f],i[f])}if(!0===e){var v=Math.acos(st.clamp(i[0].dot(i[t]),-1,1));v/=t,r[0].dot(o.crossVectors(i[0],i[t]))>0&&(v=-v);for(var g=1;g<=t;g++)i[g].applyMatrix4(s.makeRotationAxis(r[g],v*g)),a[g].crossVectors(r[g],i[g])}return{tangents:r,normals:i,binormals:a}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){var t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Sc.prototype=Object.create(Mc.prototype),Sc.prototype.constructor=Sc,Sc.prototype.isEllipseCurve=!0,Sc.prototype.getPoint=function(t,e){for(var n=e||new pt,r=2*Math.PI,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)r;)i-=r;i0?0:(Math.floor(Math.abs(c)/o)+1)*o:0===l&&c===o-1&&(c=o-2,l=1),this.closed||c>0?n=a[(c-1)%o]:(Ac.subVectors(a[0],a[1]).add(a[0]),n=Ac);var u=a[c%o],h=a[(c+1)%o];if(this.closed||c+2r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(Ic(o,s.x,c.x,l.x,u.x),Ic(o,s.y,c.y,l.y,u.y)),n},Hc.prototype.copy=function(t){Mc.prototype.copy.call(this,t),this.points=[];for(var e=0,n=t.points.length;e=e){var i=n[r]-e,a=this.curves[r],o=a.getLength(),s=0===o?0:1-i/o;return a.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},copy:function(t){Mc.prototype.copy.call(this,t),this.curves=[];for(var e=0,n=t.curves.length;e0){var l=c.getPoint(0);l.equals(this.currentPoint)||this.lineTo(l.x,l.y)}this.curves.push(c);var u=c.getPoint(1);return this.currentPoint.copy(u),this},copy:function(t){return Vc.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){var t=Vc.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return Vc.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),jc.prototype=Object.assign(Object.create(Wc.prototype),{constructor:jc,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n0:r.vertexColors=t.vertexColors),void 0!==t.uniforms)for(var i in t.uniforms){var a=t.uniforms[i];switch(r.uniforms[i]={},a.type){case"t":r.uniforms[i].value=n(a.value);break;case"c":r.uniforms[i].value=(new Ve).setHex(a.value);break;case"v2":r.uniforms[i].value=(new pt).fromArray(a.value);break;case"v3":r.uniforms[i].value=(new wt).fromArray(a.value);break;case"v4":r.uniforms[i].value=(new yt).fromArray(a.value);break;case"m3":r.uniforms[i].value=(new ft).fromArray(a.value);break;case"m4":r.uniforms[i].value=(new Jt).fromArray(a.value);break;default:r.uniforms[i].value=a.value}}if(void 0!==t.defines&&(r.defines=t.defines),void 0!==t.vertexShader&&(r.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(r.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(var o in t.extensions)r.extensions[o]=t.extensions[o];if(void 0!==t.shading&&(r.flatShading=1===t.shading),void 0!==t.size&&(r.size=t.size),void 0!==t.sizeAttenuation&&(r.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(r.map=n(t.map)),void 0!==t.matcap&&(r.matcap=n(t.matcap)),void 0!==t.alphaMap&&(r.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(r.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(r.bumpScale=t.bumpScale),void 0!==t.normalMap&&(r.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(r.normalMapType=t.normalMapType),void 0!==t.normalScale){var s=t.normalScale;!1===Array.isArray(s)&&(s=[s,s]),r.normalScale=(new pt).fromArray(s)}return void 0!==t.displacementMap&&(r.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(r.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(r.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(r.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(r.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(r.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(r.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(r.specularMap=n(t.specularMap)),void 0!==t.envMap&&(r.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(r.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(r.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(r.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(r.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(r.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(r.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(r.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(r.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(r.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(r.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(r.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(r.clearcoatNormalScale=(new pt).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(r.transmission=t.transmission),void 0!==t.transmissionMap&&(r.transmissionMap=n(t.transmissionMap)),r},setTextures:function(t){return this.textures=t,this}});var sl={decodeText:function(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);for(var e="",n=0,r=t.length;n0){var o=new dc(e);(n=new xc(o)).setCrossOrigin(this.crossOrigin);for(var s=0,c=t.length;sNumber.EPSILON){if(l<0&&(o=e[a],c=-c,s=e[i],l=-l),t.ys.y)continue;if(t.y===o.y){if(t.x===o.x)return!0}else{var u=l*(t.x-o.x)-c*(t.y-o.y);if(0===u)return!0;if(u<0)continue;r=!r}}else{if(t.y!==o.y)continue;if(s.x<=t.x&&t.x<=o.x||o.x<=t.x&&t.x<=s.x)return!0}}return r}var i,a,o,s=as.isClockWise,c=this.subPaths;if(0===c.length)return[];if(!0===e)return n(c);var l=[];if(1===c.length)return a=c[0],(o=new jc).curves=a.curves,l.push(o),l;var u=!s(c[0].getPoints());u=t?!u:u;var h,d,p=[],f=[],m=[],v=0;f[v]=void 0,m[v]=[];for(var g=0,y=c.length;g1){for(var x=!1,_=[],b=0,w=f.length;b0&&(x||(m=p))}for(var C=0,P=f.length;C0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,r,this._addIndex*e,1,e);for(var c=e,l=e+e;c!==l;++c)if(n[c]!==n[c+e]){o.setValue(n,r);break}},saveOriginalState:function(){var t=this.binding,e=this.buffer,n=this.valueSize,r=n*this._origIndex;t.getValue(e,r);for(var i=n,a=r;i!==a;++i)e[i]=e[r+i%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){var t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){for(var t=this._addIndex*this.valueSize,e=t+this.valueSize,n=t;n=.5)for(var a=0;a!==i;++a)t[e+a]=t[n+a]},_slerp:function(t,e,n,r){bt.slerpFlat(t,e,t,e,t,n,r)},_slerpAdditive:function(t,e,n,r,i){var a=this._workIndex*i;bt.multiplyQuaternionsFlat(t,a,t,e,t,n),bt.slerpFlat(t,e,t,e,t,a,r)},_lerp:function(t,e,n,r,i){for(var a=1-r,o=0;o!==i;++o){var s=e+o;t[s]=t[s]*a+t[n+o]*r}},_lerpAdditive:function(t,e,n,r,i){for(var a=0;a!==i;++a){var o=e+a;t[o]=t[o]+t[n+a]*r}}});var Vl="\\[\\]\\.:\\/",Wl=new RegExp("[\\[\\]\\.:\\/]","g"),jl="[^\\[\\]\\.:\\/]",ql="[^"+Vl.replace("\\.","")+"]",Xl=/((?:WC+[\/:])*)/.source.replace("WC",jl),Yl=/(WCOD+)?/.source.replace("WCOD",ql),Zl=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",jl),Jl=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",jl),Ql=new RegExp("^"+Xl+Yl+Zl+Jl+"$"),Kl=["material","materials","bones"];function $l(t,e,n){var r=n||tu.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,r)}function tu(t,e,n){this.path=e,this.parsedPath=n||tu.parseTrackName(e),this.node=tu.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function eu(){this.uuid=st.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var t={};this._indicesByUUID=t;for(var e=0,n=arguments.length;e!==n;++e)t[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var r=this;this.stats={objects:{get total(){return r._objects.length},get inUse(){return this.total-r.nCachedObjects_}},get bindingsPerObject(){return r._bindings.length}}}Object.assign($l.prototype,{getValue:function(t,e){this.bind();var n=this._targetGroup.nCachedObjects_,r=this._bindings[n];void 0!==r&&r.getValue(t,e)},setValue:function(t,e){for(var n=this._bindings,r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(t,e)},bind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(tu,{Composite:$l,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new tu.Composite(t,e,n):new tu(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(Wl,"")},parseTrackName:function(t){var e=Ql.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);var n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},r=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){var i=n.nodeName.substring(r+1);-1!==Kl.indexOf(i)&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=i)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){var n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){var r=function t(n){for(var r=0;r=i){var u=i++,h=t[u];e[h.uuid]=l,t[l]=h,e[c]=u,t[u]=s;for(var d=0,p=r;d!==p;++d){var f=n[d],m=f[u],v=f[l];f[l]=m,f[u]=v}}}this.nCachedObjects_=i},uncache:function(){for(var t=this._objects,e=this._indicesByUUID,n=this._bindings,r=n.length,i=this.nCachedObjects_,a=t.length,o=0,s=arguments.length;o!==s;++o){var c=arguments[o],l=c.uuid,u=e[l];if(void 0!==u)if(delete e[l],u0){var c=this._interpolants,l=this._propertyBindings;switch(this.blendMode){case j:for(var u=0,h=c.length;u!==h;++u)c[u].evaluate(o),l[u].accumulateAdditive(s);break;case W:default:for(var d=0,p=c.length;d!==p;++d)c[d].evaluate(o),l[d].accumulate(r,s)}}}else this._updateWeight(t)},e._updateWeight=function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},e._updateTimeScale=function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n)e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}return this._effectiveTimeScale=e,e},e._updateTime=function(t){var e=this._clip.duration,n=this.loop,r=this.time+t,i=this._loopCount,a=2202===n;if(0===t)return-1===i?r:a&&1==(1&i)?e-r:r;if(2200===n){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(r>=e)r=e;else{if(!(r<0)){this.time=r;break t}r=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),r>=e||r<0){var o=Math.floor(r/e);r-=e*o,i+=Math.abs(o);var s=this.repetitions-i;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=t>0?e:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){var c=t<0;this._setEndings(c,!c,a)}else this._setEndings(!1,!1,a);this._loopCount=i,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=r;if(a&&1==(1&i))return e-r}return r},e._setEndings=function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=k,r.endingEnd=k):(r.endingStart=t?this.zeroSlopeAtStart?k:H:V,r.endingEnd=e?this.zeroSlopeAtEnd?k:H:V)},e._scheduleFading=function(t,e,n){var r=this._mixer,i=r.time,a=this._weightInterpolant;null===a&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);var o=a.parameterPositions,s=a.sampleValues;return o[0]=i,s[0]=e,o[1]=i+t,s[1]=n,this},t}();function ru(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}ru.prototype=Object.assign(Object.create(rt.prototype),{constructor:ru,_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,a=t._propertyBindings,o=t._interpolants,s=n.uuid,c=this._bindingsByRootAndName,l=c[s];void 0===l&&(l={},c[s]=l);for(var u=0;u!==i;++u){var h=r[u],d=h.name,p=l[d];if(void 0!==p)a[u]=p;else{if(void 0!==(p=a[u])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,s,d));continue}var f=e&&e._propertyBindings[u].binding.parsedPath;++(p=new kl(tu.create(n,d,f),h.ValueTypeName,h.getValueSize())).referenceCount,this._addInactiveBinding(p,s,d),a[u]=p}o[u].resultBuffer=p.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,a=0,o=i.length;a!==o;++a){var s=i[a];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;for(var e=this._actions,n=this._nActiveActions,r=this.time+=t,i=Math.sign(t),a=this._accuIndex^=1,o=0;o!==n;++o){e[o]._update(r,t,i,a)}for(var s=this._bindings,c=this._nActiveBindings,l=0;l!==c;++l)s[l].apply(a);return this},setTime:function(t){this.time=0;for(var e=0;ethis.max.x||t.ythis.max.y)},e.containsBox=function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},e.getParameter=function(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new pt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},e.intersectsBox=function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},e.clampPoint=function(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new pt),e.copy(t).clamp(this.min,this.max)},e.distanceToPoint=function(t){return du.copy(t).clamp(this.min,this.max).sub(t).length()},e.intersect=function(t){return this.min.max(t.min),this.max.min(t.max),this},e.union=function(t){return this.min.min(t.min),this.max.max(t.max),this},e.translate=function(t){return this.min.add(t),this.max.add(t),this},e.equals=function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},t}(),fu=new wt,mu=new wt,vu=function(){function t(t,e){this.start=void 0!==t?t:new wt,this.end=void 0!==e?e:new wt}var e=t.prototype;return e.set=function(t,e){return this.start.copy(t),this.end.copy(e),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){return this.start.copy(t.start),this.end.copy(t.end),this},e.getCenter=function(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new wt),t.addVectors(this.start,this.end).multiplyScalar(.5)},e.delta=function(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new wt),t.subVectors(this.end,this.start)},e.distanceSq=function(){return this.start.distanceToSquared(this.end)},e.distance=function(){return this.start.distanceTo(this.end)},e.at=function(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new wt),this.delta(e).multiplyScalar(t).add(this.start)},e.closestPointToPointParameter=function(t,e){fu.subVectors(t,this.start),mu.subVectors(this.end,this.start);var n=mu.dot(mu),r=mu.dot(fu)/n;return e&&(r=st.clamp(r,0,1)),r},e.closestPointToPoint=function(t,e,n){var r=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new wt),this.delta(n).multiplyScalar(r).add(this.start)},e.applyMatrix4=function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},e.equals=function(t){return t.start.equals(this.start)&&t.end.equals(this.end)},t}();function gu(t){be.call(this),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}gu.prototype=Object.create(be.prototype),gu.prototype.constructor=gu,gu.prototype.isImmediateRenderObject=!0;var yu=new wt,xu=function(t){function e(e,n){var r;(r=t.call(this)||this).light=e,r.light.updateMatrixWorld(),r.matrix=e.matrixWorld,r.matrixAutoUpdate=!1,r.color=n;for(var i=new vn,a=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],o=0,s=1;o<32;o++,s++){var c=o/32*Math.PI*2,l=s/32*Math.PI*2;a.push(Math.cos(c),Math.sin(c),1,Math.cos(l),Math.sin(l),1)}i.setAttribute("position",new an(a,3));var u=new ja({fog:!1,toneMapped:!1});return r.cone=new to(i,u),r.add(r.cone),r.update(),r}ut(e,t);var n=e.prototype;return n.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},n.update=function(){this.light.updateMatrixWorld();var t=this.light.distance?this.light.distance:1e3,e=t*Math.tan(this.light.angle);this.cone.scale.set(e,e,t),yu.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(yu),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)},e}(be),_u=new wt,bu=new Jt,wu=new Jt,Mu=function(t){function e(e){for(var n,r=Su(e),i=new vn,a=[],o=[],s=new Ve(0,0,1),c=new Ve(0,1,0),l=0;l.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{Xu.set(t.z,0,-t.x).normalize();var e=Math.acos(t.y);this.quaternion.setFromAxisAngle(Xu,e)}},n.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},n.setColor=function(t){this.line.material.color.set(t),this.cone.material.color.set(t)},n.copy=function(e){return t.prototype.copy.call(this,e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this},e}(be),Zu=function(t){function e(e){var n;void 0===e&&(e=1);var r=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=new vn;i.setAttribute("position",new an(r,3)),i.setAttribute("color",new an([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));var a=new ja({vertexColors:!0,toneMapped:!1});return(n=t.call(this,i,a)||this).type="AxesHelper",n}return ut(e,t),e}(to),Ju=Math.pow(2,8),Qu=[.125,.215,.35,.446,.526,.582],Ku=5+Qu.length,$u=20,th=((ku={})[3e3]=0,ku[3001]=1,ku[3002]=2,ku[3004]=3,ku[3005]=4,ku[3006]=5,ku[3007]=6,ku),eh=new $c,nh=dh(),rh=nh._lodPlanes,ih=nh._sizeLods,ah=nh._sigmas,oh=null,sh=(1+Math.sqrt(5))/2,ch=1/sh,lh=[new wt(1,1,1),new wt(-1,1,1),new wt(1,1,-1),new wt(-1,1,-1),new wt(0,sh,ch),new wt(0,sh,-ch),new wt(ch,0,sh),new wt(-ch,0,sh),new wt(sh,ch,0),new wt(-sh,ch,0)],uh=function(){function t(t){var e,n,r;this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=(e=$u,n=new Float32Array(e),r=new wt(0,1,0),new Us({name:"SphericalGaussianBlur",defines:{n:e},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r},inputEncoding:{value:th[3e3]},outputEncoding:{value:th[3e3]}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}var e=t.prototype;return e.fromScene=function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=.1),void 0===r&&(r=100),oh=this._renderer.getRenderTarget();var i=this._allocateTargets();return this._sceneToCubeUV(t,n,r,i),e>0&&this._blur(i,0,0,e),this._applyPMREM(i),this._cleanup(i),i},e.fromEquirectangular=function(t){return this._fromTexture(t)},e.fromCubemap=function(t){return this._fromTexture(t)},e.compileCubemapShader=function(){null===this._cubemapShader&&(this._cubemapShader=vh(),this._compileMaterial(this._cubemapShader))},e.compileEquirectangularShader=function(){null===this._equirectShader&&(this._equirectShader=mh(),this._compileMaterial(this._equirectShader))},e.dispose=function(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(var t=0;t2?Ju:0,Ju,Ju),s.setRenderTarget(r),s.render(t,i)}s.toneMapping=l,s.outputEncoding=c,s.setClearColor(u,h)},e._textureToCubeUV=function(t,e){var n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=vh()):null==this._equirectShader&&(this._equirectShader=mh());var r=t.isCubeTexture?this._cubemapShader:this._equirectShader,i=new Nn(rh[0],r),a=r.uniforms;a.envMap.value=t,t.isCubeTexture||a.texelSize.value.set(1/t.image.width,1/t.image.height),a.inputEncoding.value=th[t.encoding],a.outputEncoding.value=th[e.texture.encoding],fh(e,0,0,3*Ju,2*Ju),n.setRenderTarget(e),n.render(i,eh)},e._applyPMREM=function(t){var e=this._renderer,n=e.autoClear;e.autoClear=!1;for(var r=1;r$u&&console.warn("sigmaRadians, "+i+", is too large and will clip, as it requested "+f+" samples when the maximum is set to "+$u);for(var m=[],v=0,g=0;g<$u;++g){var y=g/p,x=Math.exp(-y*y/2);m.push(x),0==g?v+=x:g4?r-8+4:0),3*b,2*b),s.setRenderTarget(e),s.render(l,eh)},t}();function hh(t){return void 0!==t&&t.type===y&&(t.encoding===q||t.encoding===X||t.encoding===Y)}function dh(){for(var t=[],e=[],n=[],r=8,i=0;i4?o=Qu[i-8+4-1]:0==i&&(o=0),n.push(o);for(var s=1/(a-1),c=-s/2,l=1+s/2,u=[c,c,l,c,l,l,c,c,l,l,c,l],h=new Float32Array(108),d=new Float32Array(72),p=new Float32Array(36),f=0;f<6;f++){var m=f%3*2/3-1,v=f>2?0:-1,g=[m,v,0,m+2/3,v,0,m+2/3,v+1,0,m,v,0,m+2/3,v+1,0,m,v+1,0];h.set(g,18*f),d.set(u,12*f);var y=[f,f,f,f,f,f];p.set(y,6*f)}var x=new vn;x.setAttribute("position",new Je(h,3)),x.setAttribute("uv",new Je(d,2)),x.setAttribute("faceIndex",new Je(p,1)),t.push(x),r>4&&r--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function ph(t){var e=new xt(3*Ju,3*Ju,t);return e.texture.mapping=s,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function fh(t,e,n,r,i){t.viewport.set(e,n,r,i),t.scissor.set(e,n,r,i)}function mh(){return new Us({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:new pt(1,1)},inputEncoding:{value:th[3e3]},outputEncoding:{value:th[3e3]}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function vh(){return new Us({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:th[3e3]},outputEncoding:{value:th[3e3]}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function gh(t){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Pc.call(this,t),this.type="catmullrom",this.closed=!0}function yh(t){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Pc.call(this,t),this.type="catmullrom"}function xh(t){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),Pc.call(this,t),this.type="catmullrom"}Mc.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(Mc.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Object.assign(Vc.prototype,{createPointsGeometry:function(t){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new yo,n=0,r=t.length;n(()=>{"use strict";var e={d:(t,i)=>{for(var n in i)e.o(i,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>f}),Number.prototype.clamp=function(e,t){return Math.min(Math.max(this,e),t)};function i(e){for(;e.children&&e.children.length>0;)i(e.children[0]),e.remove(e.children[0]);e.geometry&&e.geometry.dispose(),e.material&&(Object.keys(e.material).forEach((t=>{e.material[t]&&null!==e.material[t]&&"function"==typeof e.material[t].dispose&&e.material[t].dispose()})),e.material.dispose())}const n="object"==typeof window;let o=n&&window.THREE||{};n&&!window.VANTA&&(window.VANTA={});const s=n&&window.VANTA||{};s.register=(e,t)=>s[e]=e=>new t(e),s.version="0.5.24";const r=function(){return Array.prototype.unshift.call(arguments,"[VANTA]"),console.error.apply(this,arguments)};s.VantaBase=class{constructor(e={}){if(!n)return!1;s.current=this,this.windowMouseMoveWrapper=this.windowMouseMoveWrapper.bind(this),this.windowTouchWrapper=this.windowTouchWrapper.bind(this),this.windowGyroWrapper=this.windowGyroWrapper.bind(this),this.resize=this.resize.bind(this),this.animationLoop=this.animationLoop.bind(this),this.restart=this.restart.bind(this);const t="function"==typeof this.getDefaultOptions?this.getDefaultOptions():this.defaultOptions;if(this.options=Object.assign({mouseControls:!0,touchControls:!0,gyroControls:!1,minHeight:200,minWidth:200,scale:1,scaleMobile:1},t),(e instanceof HTMLElement||"string"==typeof e)&&(e={el:e}),Object.assign(this.options,e),this.options.THREE&&(o=this.options.THREE),this.el=this.options.el,null==this.el)r('Instance needs "el" param!');else if(!(this.options.el instanceof HTMLElement)){const e=this.el;if(this.el=(i=e,document.querySelector(i)),!this.el)return void r("Cannot find element",e)}var i,a;this.prepareEl(),this.initThree(),this.setSize();try{this.init()}catch(e){return r("Init error",e),this.renderer&&this.renderer.domElement&&this.el.removeChild(this.renderer.domElement),void(this.options.backgroundColor&&(console.log("[VANTA] Falling back to backgroundColor"),this.el.style.background=(a=this.options.backgroundColor,"number"==typeof a?"#"+("00000"+a.toString(16)).slice(-6):a)))}this.initMouse(),this.resize(),this.animationLoop();const c=window.addEventListener;c("resize",this.resize),window.requestAnimationFrame(this.resize),this.options.mouseControls&&(c("scroll",this.windowMouseMoveWrapper),c("mousemove",this.windowMouseMoveWrapper)),this.options.touchControls&&(c("touchstart",this.windowTouchWrapper),c("touchmove",this.windowTouchWrapper)),this.options.gyroControls&&c("deviceorientation",this.windowGyroWrapper)}setOptions(e={}){Object.assign(this.options,e),this.triggerMouseMove()}prepareEl(){let e,t;if("undefined"!=typeof Node&&Node.TEXT_NODE)for(e=0;e=0&&n>=0&&i<=t.width&&n<=t.height&&(this.mouseX=i,this.mouseY=n,this.options.mouseEase||this.triggerMouseMove(i,n))}windowTouchWrapper(e){const t=this.getCanvasRect();if(!t)return!1;if(1===e.touches.length){const i=e.touches[0].clientX-t.left,n=e.touches[0].clientY-t.top;i>=0&&n>=0&&i<=t.width&&n<=t.height&&(this.mouseX=i,this.mouseY=n,this.options.mouseEase||this.triggerMouseMove(i,n))}}windowGyroWrapper(e){const t=this.getCanvasRect();if(!t)return!1;const i=Math.round(2*e.alpha)-t.left,n=Math.round(2*e.beta)-t.top;i>=0&&n>=0&&i<=t.width&&n<=t.height&&(this.mouseX=i,this.mouseY=n,this.options.mouseEase||this.triggerMouseMove(i,n))}triggerMouseMove(e,t){void 0===e&&void 0===t&&(this.options.mouseEase?(e=this.mouseEaseX,t=this.mouseEaseY):(e=this.mouseX,t=this.mouseY)),this.uniforms&&(this.uniforms.iMouse.value.x=e/this.scale,this.uniforms.iMouse.value.y=t/this.scale);const i=e/this.width,n=t/this.height;"function"==typeof this.onMouseMove&&this.onMouseMove(i,n)}setSize(){this.scale||(this.scale=1),"undefined"!=typeof navigator&&(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<600)&&this.options.scaleMobile?this.scale=this.options.scaleMobile:this.options.scale&&(this.scale=this.options.scale),this.width=Math.max(this.el.offsetWidth,this.options.minWidth),this.height=Math.max(this.el.offsetHeight,this.options.minHeight)}initMouse(){(!this.mouseX&&!this.mouseY||this.mouseX===this.options.minWidth/2&&this.mouseY===this.options.minHeight/2)&&(this.mouseX=this.width/2,this.mouseY=this.height/2,this.triggerMouseMove(this.mouseX,this.mouseY))}resize(){this.setSize(),this.camera&&(this.camera.aspect=this.width/this.height,"function"==typeof this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix()),this.renderer&&(this.renderer.setSize(this.width,this.height),this.renderer.setPixelRatio(window.devicePixelRatio/this.scale)),"function"==typeof this.onResize&&this.onResize()}isOnScreen(){const e=this.el.offsetHeight,t=this.el.getBoundingClientRect(),i=window.pageYOffset||(document.documentElement||document.body.parentNode||document.body).scrollTop,n=t.top+i;return n-window.innerHeight<=i&&i<=n+e}animationLoop(){this.t||(this.t=0),this.t2||(this.t2=0);const e=performance.now();if(this.prevNow){let t=(e-this.prevNow)/(1e3/60);t=Math.max(.2,Math.min(t,5)),this.t+=t,this.t2+=(this.options.speed||1)*t,this.uniforms&&(this.uniforms.iTime.value=.016667*this.t2)}return this.prevNow=e,this.options.mouseEase&&(this.mouseEaseX=this.mouseEaseX||this.mouseX||0,this.mouseEaseY=this.mouseEaseY||this.mouseY||0,Math.abs(this.mouseEaseX-this.mouseX)+Math.abs(this.mouseEaseY-this.mouseY)>.1&&(this.mouseEaseX+=.05*(this.mouseX-this.mouseEaseX),this.mouseEaseY+=.05*(this.mouseY-this.mouseEaseY),this.triggerMouseMove(this.mouseEaseX,this.mouseEaseY))),(this.isOnScreen()||this.options.forceAnimate)&&("function"==typeof this.onUpdate&&this.onUpdate(),this.scene&&this.camera&&(this.renderer.render(this.scene,this.camera),this.renderer.setClearColor(this.options.backgroundColor,this.options.backgroundAlpha)),this.fps&&this.fps.update&&this.fps.update(),"function"==typeof this.afterRender&&this.afterRender()),this.req=window.requestAnimationFrame(this.animationLoop)}restart(){if(this.scene)for(;this.scene.children.length;)this.scene.remove(this.scene.children[0]);"function"==typeof this.onRestart&&this.onRestart(),this.init()}init(){"function"==typeof this.onInit&&this.onInit()}destroy(){"function"==typeof this.onDestroy&&this.onDestroy();const e=window.removeEventListener;e("touchstart",this.windowTouchWrapper),e("touchmove",this.windowTouchWrapper),e("scroll",this.windowMouseMoveWrapper),e("mousemove",this.windowMouseMoveWrapper),e("deviceorientation",this.windowGyroWrapper),e("resize",this.resize),window.cancelAnimationFrame(this.req);const t=this.scene;t&&t.children&&i(t),this.renderer&&(this.renderer.domElement&&this.el.removeChild(this.renderer.domElement),this.renderer=null,this.scene=null),s.current===this&&(s.current=null)}};const a=s.VantaBase;let c="object"==typeof window&&window.THREE;class h extends a{constructor(e){c=e.THREE||c,c.Color.prototype.toVector=function(){return new c.Vector3(this.r,this.g,this.b)},super(e),this.updateUniforms=this.updateUniforms.bind(this)}init(){this.mode="shader",this.uniforms={iTime:{type:"f",value:1},iResolution:{type:"v2",value:new c.Vector2(1,1)},iDpr:{type:"f",value:window.devicePixelRatio||1},iMouse:{type:"v2",value:new c.Vector2(this.mouseX||0,this.mouseY||0)}},super.init(),this.fragmentShader&&this.initBasicShader()}setOptions(e){super.setOptions(e),this.updateUniforms()}initBasicShader(e=this.fragmentShader,t=this.vertexShader){t||(t="uniform float uTime;\nuniform vec2 uResolution;\nvoid main() {\n gl_Position = vec4( position, 1.0 );\n}"),this.updateUniforms(),"function"==typeof this.valuesChanger&&this.valuesChanger();const i=new c.ShaderMaterial({uniforms:this.uniforms,vertexShader:t,fragmentShader:e}),n=this.options.texturePath;n&&(this.uniforms.iTex={type:"t",value:(new c.TextureLoader).load(n)});const o=new c.Mesh(new c.PlaneGeometry(2,2),i);this.scene.add(o),this.camera=new c.Camera,this.camera.position.z=1}updateUniforms(){const e={};let t,i;for(t in this.options)i=this.options[t],-1!==t.toLowerCase().indexOf("color")?e[t]={type:"v3",value:new c.Color(i).toVector()}:"number"==typeof i&&(e[t]={type:"f",value:i});return Object.assign(this.uniforms,e)}resize(){super.resize(),this.uniforms.iResolution.value.x=this.width/this.scale,this.uniforms.iResolution.value.y=this.height/this.scale}}let l="object"==typeof window&&window.THREE;class u extends h{constructor(e){l=e.THREE||l,super(e)}getDefaultOptions(){return{baseColor:6745,color2:15918901,backgroundColor:1251907,amplitudeFactor:1,ringFactor:1,rotationFactor:1,xOffset:0,yOffset:0,size:1,speed:1,mouseEase:!0,scaleMobile:1,scale:1}}onInit(){const e={minFilter:l.LinearFilter,magFilter:l.LinearFilter,format:l.RGBFormat},t=this.width*window.devicePixelRatio/this.scale,i=this.height*window.devicePixelRatio/this.scale;this.bufferTarget=new l.WebGLRenderTarget(t,i,e),this.bufferFeedback=new l.WebGLRenderTarget(t,i,e)}initBasicShader(e,t){super.initBasicShader(e,t),this.uniforms.iBuffer={type:"t",value:this.bufferTarget.texture}}onUpdate(){this.uniforms.iBuffer.value=this.bufferFeedback.texture;const e=this.renderer;e.setRenderTarget(this.bufferTarget),e.render(this.scene,this.camera),e.setRenderTarget(null),e.clear();let t=this.bufferTarget;this.bufferTarget=this.bufferFeedback,this.bufferFeedback=t}onResize(){if(this.bufferTarget){const e=this.width*window.devicePixelRatio/this.scale,t=this.height*window.devicePixelRatio/this.scale;this.bufferTarget.setSize(e,t),this.bufferFeedback.setSize(e,t)}}onDestroy(){this.bufferTarget=null,this.bufferFeedback=null}}const f=s.register("HALO",u);return u.prototype.fragmentShader="uniform vec2 iResolution;\nuniform float iDpr;\nuniform vec2 iMouse;\nuniform float iTime;\n\nuniform float xOffset;\nuniform float yOffset;\nuniform vec3 baseColor;\nuniform vec3 color2;\nuniform vec3 backgroundColor;\nuniform float size;\nuniform float shape;\nuniform float ringFactor;\nuniform float rotationFactor;\nuniform float amplitudeFactor;\n\nuniform sampler2D iBuffer;\nuniform sampler2D iTex;\nconst float PI = 3.14159265359;\n\n// float length2(vec2 p) { return dot(p, p); }\n\n// float noise(vec2 p){\n// return fract(sin(fract(sin(p.x) * (43.13311)) + p.y) * 31.0011);\n// }\n\n// float worley(vec2 p) {\n// float d = 1e30;\n// for (int xo = -1; xo <= 1; ++xo) {\n// for (int yo = -1; yo <= 1; ++yo) {\n// vec2 tp = floor(p) + vec2(xo, yo);\n// d = min(d, length2(p - tp - vec2(noise(tp))));\n// }\n// }\n// vec2 uv = gl_FragCoord.xy / iResolution.xy;\n// float timeOffset = 0.15 * sin(iTime * 2.0 + 10.0*(uv.x - uv.y));\n// return 3.0*exp(-4.0*abs(2.0*d - 1.0 + timeOffset));\n// }\n\n// float fworley(vec2 p) {\n// return sqrt(\n// 1.1 * // light\n// worley(p*10. + .3 + iTime*.0525) *\n// sqrt(worley(p * 50. / size + 0.1 + iTime * -0.75)) *\n// 4.1 *\n// sqrt(sqrt(worley(p * -1. + 9.3))));\n// }\n\nvec4 j2hue(float c) {\n return .5+.5*cos(6.28*c+vec4(0,-2.1,2.1,0));\n}\n\nvec3 permute(vec3 x) { return mod(((x*34.0)+1.0)*x, 289.0); }\n\nfloat snoise(vec2 v){\n const vec4 C = vec4(0.211324865405187, 0.366025403784439,\n -0.577350269189626, 0.024390243902439);\n vec2 i = floor(v + dot(v, C.yy) );\n vec2 x0 = v - i + dot(i, C.xx);\n vec2 i1;\n i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n vec4 x12 = x0.xyxy + C.xxzz;\n x12.xy -= i1;\n i = mod(i, 289.0);\n vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))\n + i.x + vec3(0.0, i1.x, 1.0 ));\n vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy),\n dot(x12.zw,x12.zw)), 0.0);\n m = m*m ;\n m = m*m ;\n vec3 x = 2.0 * fract(p * C.www) - 1.0;\n vec3 h = abs(x) - 0.5;\n vec3 ox = floor(x + 0.5);\n vec3 a0 = x - ox;\n m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );\n vec3 g;\n g.x = a0.x * x0.x + h.x * x0.y;\n g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n return 130.0 * dot(m, g);\n}\n\nvec2 sincos( float x ){return vec2(sin(x), cos(x));}\nvec2 rotate2d(vec2 uv, float phi){vec2 t = sincos(phi); return vec2(uv.x*t.y-uv.y*t.x, uv.x*t.x+uv.y*t.y);}\nvec3 rotate3d(vec3 p, vec3 v, float phi){ v = normalize(v); vec2 t = sincos(-phi); float s = t.x, c = t.y, x =-v.x, y =-v.y, z =-v.z; mat4 M = mat4(x*x*(1.-c)+c,x*y*(1.-c)-z*s,x*z*(1.-c)+y*s,0.,y*x*(1.-c)+z*s,y*y*(1.-c)+c,y*z*(1.-c)-x*s,0.,z*x*(1.-c)-y*s,z*y*(1.-c)+x*s,z*z*(1.-c)+c,0.,0.,0.,0.,1.);return (vec4(p,1.)*M).xyz;}\n\n// Classic Perlin 3D Noise\n// by Stefan Gustavson\nvec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}\nvec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}\nvec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}\nfloat p3d(vec3 P){\n vec3 Pi0 = floor(P); // Integer part for indexing\n vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\n Pi0 = mod(Pi0, 289.0);\n Pi1 = mod(Pi1, 289.0);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n\n vec4 gx0 = ixy0 / 7.0;\n vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n\n vec4 gx1 = ixy1 / 7.0;\n vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n\n vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\n vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\n vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\n vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\n vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\n vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\n vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\n vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\n\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\n\n\nvoid main() {\n vec2 res2 = iResolution.xy * iDpr;\n vec2 pixel = vec2(gl_FragCoord.xy - 0.5 * res2) / res2.y; // center-origin pixel coord\n pixel.x -= xOffset * res2.x / res2.y;\n pixel.y -= yOffset;\n\n vec2 uv = gl_FragCoord.xy / res2; // 0 to 1\n\n // float nn1 = snoise(uv * 0.25 + iTime * 0.005 + mixedColor.b * 0.01) * 0.1;\n // float nn2 = snoise(uv * 0.25 + iTime * 0.005 + mixedColor.b * 0.01 + 1000.) * 0.1;\n // uv += vec2(nn1, nn2);\n\n // PERLIN DISTORTION\n // float noiseScale = 10.;\n // float timeScale = 0.5;\n // uv += vec2( p3d(vec3(uv * noiseScale, iTime * timeScale)), p3d(vec3(1000. + uv * noiseScale , iTime * timeScale)) ) * 0.001;\n\n // uv = rotate2d(uv, 0.001);\n // pixel = rotate2d(pixel, 0.001);\n\n vec2 mouse2 = (iMouse * iDpr / res2 - 0.5) * vec2(1.,-1.);\n vec2 uvBig = (uv - 0.5) * 0.996 + 0.5;\n\n vec4 oldImage = texture2D(iBuffer, uv);\n vec3 mixedColor = oldImage.rgb - backgroundColor;\n\n // float spinDist = 0.002 + 0.002 * sin(iTime * 0.4);\n float cropDist = 0.01;\n float cropXOffset = 0.2;\n float cropYOffset = 0.2;\n // float cropXOffset = 0.4 + 0.1 * sin(iTime * 0.4);\n // float cropYOffset = 0.4 + 0.1 * cos(iTime * 0.6);\n\n vec2 offset = uv + vec2((mixedColor.g - cropXOffset) * cropDist, (mixedColor.r - cropYOffset) * cropDist);\n\n // float nn = snoise(uv * 10.) * 0.001;\n // offset += nn;\n\n float spinDist = 0.001;\n float spinSpeed = 0.2 + 0.15 * cos(iTime * 0.5);\n float timeFrac = mod(iTime, 6.5);\n vec2 offset2 = uvBig + vec2(cos(timeFrac * spinSpeed) * spinDist, sin(timeFrac * spinSpeed) * spinDist);\n\n mixedColor = texture2D(iBuffer, offset).rgb * 0.4\n + texture2D(iBuffer, offset2).rgb * 0.6\n - backgroundColor;\n\n\n // mixedColor *= .875;\n float fadeAmt = 0.0015; // fade this amount each frame // 0.002\n mixedColor = (mixedColor - fadeAmt) * .995;\n\n // float nn = snoise(uvBig * 10.) * 20.;\n // mixedColor *= clamp(nn, 0.98, 1.0);\n\n vec4 spectrum = abs( abs( .95*atan(uv.x, uv.y) -vec4(0,2,4,0) ) -3. )-1.;\n float angle = atan(pixel.x, pixel.y);\n float dist = length(pixel - mouse2*0.15) * 8. + sin(iTime) * .01;\n\n // mixedColor *= pow(1.-dist*0.002, 2.);\n\n\n // Flowery shapes\n // float edge = abs(dist * 0.5);\n float flowerPeaks = .05 * amplitudeFactor * size;\n float flowerPetals = 7.;\n float edge = abs((dist + sin(angle * flowerPetals + iTime * 0.5) * sin(iTime * 1.5) * flowerPeaks) * 0.65 / size);\n // float edge = abs((dist + sin(angle * 4. + iTime * 2.) * sin(iTime * 3.) * 0.75) * 1.);\n\n // vec4 rainbow = abs( abs( .95*mod(iTime * 1., 2. * PI) - vec4(0,2,4,0) ) -3. )-1.;\n // vec4 rainbow = vec4(0,2,4,0);\n\n float colorChangeSpeed = 0.75 + 0.05 * sin(iTime) * 1.5;\n float rainbowInput = timeFrac * colorChangeSpeed;\n // NOISE!\n // float nn = snoise(uv * 0.25 + iTime * 0.005 + mixedColor.b * 0.01) * 20.;\n // rainbowInput += nn;\n\n float brightness = 0.7;\n vec4 rainbow = sqrt(j2hue(cos(rainbowInput))) + vec4(baseColor,0) - 1.0 + brightness;\n float factor = smoothstep(1., .9, edge) * pow(edge, 2.);\n vec3 color = rainbow.rgb * smoothstep(1., .9, edge) * pow(edge, 20.);\n vec4 ring = vec4(\n backgroundColor + clamp( mixedColor + color, 0., 1.)\n , 1.0);\n\n // float t = fworley(uv * u_resolution.xy / 1500.0);\n // t *= exp(-length2(abs(0.7*uv - 1.0)));\n // float tExp = pow(t, 2. - t);\n // vec3 c1 = color1 * (1.0 - t);\n // vec3 c2 = color2 * tExp;\n // vec4 cells = vec4(mixedColor * 0.25, 1.) + vec4(pow(t, 1.0 - t) * (c1 + c2), 1.0);\n // gl_FragColor = clamp(ring + cells * 0.5, 0.0, 1.0);\n\n // float nn = snoise(uv * 10.) * 0.01; // creepy!\n gl_FragColor = ring;\n}\n",t})())); \ No newline at end of file diff --git a/legacy/smartadmin/plugins/vanta/vanta.net.min.js b/legacy/smartadmin/plugins/vanta/vanta.net.min.js new file mode 100644 index 0000000..a77f04b --- /dev/null +++ b/legacy/smartadmin/plugins/vanta/vanta.net.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports._vantaEffect=e():t._vantaEffect=e()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function i(){return"undefined"!=typeof navigator?/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<600:null}function s(t,e){return null==t&&(t=0),null==e&&(e=1),Math.floor(t+Math.random()*(e-t+1))}t.r(e),t.d(e,{default:()=>u}),Number.prototype.clamp=function(t,e){return Math.min(Math.max(this,t),e)};const o=t=>.299*t.r+.587*t.g+.114*t.b;function n(t){for(;t.children&&t.children.length>0;)n(t.children[0]),t.remove(t.children[0]);t.geometry&&t.geometry.dispose(),t.material&&(Object.keys(t.material).forEach((e=>{t.material[e]&&null!==t.material[e]&&"function"==typeof t.material[e].dispose&&t.material[e].dispose()})),t.material.dispose())}const r="object"==typeof window;let h=r&&window.THREE||{};r&&!window.VANTA&&(window.VANTA={});const a=r&&window.VANTA||{};a.register=(t,e)=>a[t]=t=>new e(t),a.version="0.5.24";const l=function(){return Array.prototype.unshift.call(arguments,"[VANTA]"),console.error.apply(this,arguments)};a.VantaBase=class{constructor(t={}){if(!r)return!1;a.current=this,this.windowMouseMoveWrapper=this.windowMouseMoveWrapper.bind(this),this.windowTouchWrapper=this.windowTouchWrapper.bind(this),this.windowGyroWrapper=this.windowGyroWrapper.bind(this),this.resize=this.resize.bind(this),this.animationLoop=this.animationLoop.bind(this),this.restart=this.restart.bind(this);const e="function"==typeof this.getDefaultOptions?this.getDefaultOptions():this.defaultOptions;if(this.options=Object.assign({mouseControls:!0,touchControls:!0,gyroControls:!1,minHeight:200,minWidth:200,scale:1,scaleMobile:1},e),(t instanceof HTMLElement||"string"==typeof t)&&(t={el:t}),Object.assign(this.options,t),this.options.THREE&&(h=this.options.THREE),this.el=this.options.el,null==this.el)l('Instance needs "el" param!');else if(!(this.options.el instanceof HTMLElement)){const t=this.el;if(this.el=(i=t,document.querySelector(i)),!this.el)return void l("Cannot find element",t)}var i,s;this.prepareEl(),this.initThree(),this.setSize();try{this.init()}catch(t){return l("Init error",t),this.renderer&&this.renderer.domElement&&this.el.removeChild(this.renderer.domElement),void(this.options.backgroundColor&&(console.log("[VANTA] Falling back to backgroundColor"),this.el.style.background=(s=this.options.backgroundColor,"number"==typeof s?"#"+("00000"+s.toString(16)).slice(-6):s)))}this.initMouse(),this.resize(),this.animationLoop();const o=window.addEventListener;o("resize",this.resize),window.requestAnimationFrame(this.resize),this.options.mouseControls&&(o("scroll",this.windowMouseMoveWrapper),o("mousemove",this.windowMouseMoveWrapper)),this.options.touchControls&&(o("touchstart",this.windowTouchWrapper),o("touchmove",this.windowTouchWrapper)),this.options.gyroControls&&o("deviceorientation",this.windowGyroWrapper)}setOptions(t={}){Object.assign(this.options,t),this.triggerMouseMove()}prepareEl(){let t,e;if("undefined"!=typeof Node&&Node.TEXT_NODE)for(t=0;t=0&&s>=0&&i<=e.width&&s<=e.height&&(this.mouseX=i,this.mouseY=s,this.options.mouseEase||this.triggerMouseMove(i,s))}windowTouchWrapper(t){const e=this.getCanvasRect();if(!e)return!1;if(1===t.touches.length){const i=t.touches[0].clientX-e.left,s=t.touches[0].clientY-e.top;i>=0&&s>=0&&i<=e.width&&s<=e.height&&(this.mouseX=i,this.mouseY=s,this.options.mouseEase||this.triggerMouseMove(i,s))}}windowGyroWrapper(t){const e=this.getCanvasRect();if(!e)return!1;const i=Math.round(2*t.alpha)-e.left,s=Math.round(2*t.beta)-e.top;i>=0&&s>=0&&i<=e.width&&s<=e.height&&(this.mouseX=i,this.mouseY=s,this.options.mouseEase||this.triggerMouseMove(i,s))}triggerMouseMove(t,e){void 0===t&&void 0===e&&(this.options.mouseEase?(t=this.mouseEaseX,e=this.mouseEaseY):(t=this.mouseX,e=this.mouseY)),this.uniforms&&(this.uniforms.iMouse.value.x=t/this.scale,this.uniforms.iMouse.value.y=e/this.scale);const i=t/this.width,s=e/this.height;"function"==typeof this.onMouseMove&&this.onMouseMove(i,s)}setSize(){this.scale||(this.scale=1),i()&&this.options.scaleMobile?this.scale=this.options.scaleMobile:this.options.scale&&(this.scale=this.options.scale),this.width=Math.max(this.el.offsetWidth,this.options.minWidth),this.height=Math.max(this.el.offsetHeight,this.options.minHeight)}initMouse(){(!this.mouseX&&!this.mouseY||this.mouseX===this.options.minWidth/2&&this.mouseY===this.options.minHeight/2)&&(this.mouseX=this.width/2,this.mouseY=this.height/2,this.triggerMouseMove(this.mouseX,this.mouseY))}resize(){this.setSize(),this.camera&&(this.camera.aspect=this.width/this.height,"function"==typeof this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix()),this.renderer&&(this.renderer.setSize(this.width,this.height),this.renderer.setPixelRatio(window.devicePixelRatio/this.scale)),"function"==typeof this.onResize&&this.onResize()}isOnScreen(){const t=this.el.offsetHeight,e=this.el.getBoundingClientRect(),i=window.pageYOffset||(document.documentElement||document.body.parentNode||document.body).scrollTop,s=e.top+i;return s-window.innerHeight<=i&&i<=s+t}animationLoop(){this.t||(this.t=0),this.t2||(this.t2=0);const t=performance.now();if(this.prevNow){let e=(t-this.prevNow)/(1e3/60);e=Math.max(.2,Math.min(e,5)),this.t+=e,this.t2+=(this.options.speed||1)*e,this.uniforms&&(this.uniforms.iTime.value=.016667*this.t2)}return this.prevNow=t,this.options.mouseEase&&(this.mouseEaseX=this.mouseEaseX||this.mouseX||0,this.mouseEaseY=this.mouseEaseY||this.mouseY||0,Math.abs(this.mouseEaseX-this.mouseX)+Math.abs(this.mouseEaseY-this.mouseY)>.1&&(this.mouseEaseX+=.05*(this.mouseX-this.mouseEaseX),this.mouseEaseY+=.05*(this.mouseY-this.mouseEaseY),this.triggerMouseMove(this.mouseEaseX,this.mouseEaseY))),(this.isOnScreen()||this.options.forceAnimate)&&("function"==typeof this.onUpdate&&this.onUpdate(),this.scene&&this.camera&&(this.renderer.render(this.scene,this.camera),this.renderer.setClearColor(this.options.backgroundColor,this.options.backgroundAlpha)),this.fps&&this.fps.update&&this.fps.update(),"function"==typeof this.afterRender&&this.afterRender()),this.req=window.requestAnimationFrame(this.animationLoop)}restart(){if(this.scene)for(;this.scene.children.length;)this.scene.remove(this.scene.children[0]);"function"==typeof this.onRestart&&this.onRestart(),this.init()}init(){"function"==typeof this.onInit&&this.onInit()}destroy(){"function"==typeof this.onDestroy&&this.onDestroy();const t=window.removeEventListener;t("touchstart",this.windowTouchWrapper),t("touchmove",this.windowTouchWrapper),t("scroll",this.windowMouseMoveWrapper),t("mousemove",this.windowMouseMoveWrapper),t("deviceorientation",this.windowGyroWrapper),t("resize",this.resize),window.cancelAnimationFrame(this.req);const e=this.scene;e&&e.children&&n(e),this.renderer&&(this.renderer.domElement&&this.el.removeChild(this.renderer.domElement),this.renderer=null,this.scene=null),a.current===this&&(a.current=null)}};const c=a.VantaBase;let p="object"==typeof window&&window.THREE;class d extends c{static initClass(){this.prototype.defaultOptions={color:16727937,backgroundColor:2299196,points:10,maxDistance:20,spacing:15,showDots:!0}}constructor(t){p=t.THREE||p,super(t)}genPoint(t,e,i){let s;if(this.points||(this.points=[]),this.options.showDots){const t=new p.SphereGeometry(.25,12,12),e=new p.MeshLambertMaterial({color:this.options.color});s=new p.Mesh(t,e)}else s=new p.Object3D;var o,n;return this.cont.add(s),s.ox=t,s.oy=e,s.oz=i,s.position.set(t,e,i),s.r=(null==(o=-2)&&(o=0),null==(n=2)&&(n=1),o+Math.random()*(n-o)),this.points.push(s)}onInit(){this.cont=new p.Group,this.cont.position.set(0,0,0),this.scene.add(this.cont);let t=this.options.points,{spacing:e}=this.options;i()&&(t=~~(.75*t),e=~~(.65*e));const n=t*t*2;this.linePositions=new Float32Array(n*n*3),this.lineColors=new Float32Array(n*n*3);const r=o(new p.Color(this.options.color)),h=o(new p.Color(this.options.backgroundColor));this.blending=r>h?"additive":"subtractive";const a=new p.BufferGeometry;a.setAttribute("position",new p.BufferAttribute(this.linePositions,3).setUsage(p.DynamicDrawUsage)),a.setAttribute("color",new p.BufferAttribute(this.lineColors,3).setUsage(p.DynamicDrawUsage)),a.computeBoundingSphere(),a.setDrawRange(0,0);const l=new p.LineBasicMaterial({vertexColors:p.VertexColors,blending:"additive"===this.blending?p.AdditiveBlending:null,transparent:!0});this.linesMesh=new p.LineSegments(a,l),this.cont.add(this.linesMesh);for(let i=0;i<=t;i++)for(let o=0;o<=t;o++){const n=s(-3,3),r=(i-t/2)*e+s(-5,5);let h=(o-t/2)*e+s(-5,5);i%2&&(h+=.5*e),this.genPoint(r,n-s(5,15),h),this.genPoint(r+s(-5,5),n+s(5,15),h+s(-5,5))}this.camera=new p.PerspectiveCamera(25,this.width/this.height,.01,1e4),this.camera.position.set(50,100,150),this.scene.add(this.camera);const c=new p.AmbientLight(16777215,.75);return this.scene.add(c),this.spot=new p.SpotLight(16777215,1),this.spot.position.set(0,200,0),this.spot.distance=400,this.spot.target=this.cont,this.scene.add(this.spot)}onDestroy(){this.scene&&this.scene.remove(this.linesMesh),this.spot=this.points=this.linesMesh=this.lineColors=this.linePositions=null}setOptions(t){super.setOptions(t),t.color&&this.points.forEach((e=>{e.material.color=new p.Color(t.color)}))}onUpdate(){let t;const e=this.camera;Math.abs(e.tx-e.position.x)>.01&&(t=e.tx-e.position.x,e.position.x+=.02*t),Math.abs(e.ty-e.position.y)>.01&&(t=e.ty-e.position.y,e.position.y+=.02*t),e.lookAt(new p.Vector3(0,0,0));let i=0,s=0,o=0;const n=new p.Color(this.options.backgroundColor),r=new p.Color(this.options.color),h=r.clone().sub(n);this.rayCaster&&this.rayCaster.setFromCamera(new p.Vector2(this.rcMouseX,this.rcMouseY),this.camera);for(let t=0;t0}function a(t){var e=f.call(t);return"[object String]"===e?d(t):n(t)&&/^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(e)&&t.hasOwnProperty("length")?t:o(t)?[t]:[]}function i(t){var n,o,a={top:0,left:0},i=t&&t.ownerDocument;return n=i.documentElement,void 0!==t.getBoundingClientRect&&(a=t.getBoundingClientRect()),o=e(i),{top:a.top+o.pageYOffset-n.clientTop,left:a.left+o.pageXOffset-n.clientLeft}}function r(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e+=n+":"+t[n]+";");return e}function s(t,e,n){if(n){n.classList.remove("waves-rippling");var o=n.getAttribute("data-x"),a=n.getAttribute("data-y"),i=n.getAttribute("data-scale"),s=n.getAttribute("data-translate"),u=350-(Date.now()-Number(n.getAttribute("data-hold")));u<0&&(u=0),"mousemove"===t.type&&(u=150);var c="mousemove"===t.type?2500:v.duration;setTimeout(function(){var t={top:a+"px",left:o+"px",opacity:"0","-webkit-transition-duration":c+"ms","-moz-transition-duration":c+"ms","-o-transition-duration":c+"ms","transition-duration":c+"ms","-webkit-transform":i+" "+s,"-moz-transform":i+" "+s,"-ms-transform":i+" "+s,"-o-transform":i+" "+s,transform:i+" "+s};n.setAttribute("style",r(t)),setTimeout(function(){try{e.removeChild(n)}catch(t){return!1}},c)},u)}}function u(t){if(!1===h.allowEvent(t))return null;for(var e=null,n=t.target||t.srcElement;n.parentElement;){if(!(n instanceof SVGElement)&&n.classList.contains("waves-effect")){e=n;break}n=n.parentElement}return e}function c(t){var e=u(t);if(null!==e){if(e.disabled||e.getAttribute("disabled")||e.classList.contains("disabled"))return;if(h.registerEvent(t),"touchstart"===t.type&&v.delay){var n=!1,o=setTimeout(function(){o=null,v.show(t,e)},v.delay),a=function(a){o&&(clearTimeout(o),o=null,v.show(t,e)),n||(n=!0,v.hide(a,e)),r()},i=function(t){o&&(clearTimeout(o),o=null),a(t),r()};e.addEventListener("touchmove",i,!1),e.addEventListener("touchend",a,!1),e.addEventListener("touchcancel",a,!1);var r=function(){e.removeEventListener("touchmove",i),e.removeEventListener("touchend",a),e.removeEventListener("touchcancel",a)}}else v.show(t,e),m&&(e.addEventListener("touchend",v.hide,!1),e.addEventListener("touchcancel",v.hide,!1)),e.addEventListener("mouseup",v.hide,!1),e.addEventListener("mouseleave",v.hide,!1)}}var l=l||{},d=document.querySelectorAll.bind(document),f=Object.prototype.toString,m="ontouchstart"in window,v={duration:750,delay:200,show:function(t,e,n){if(2===t.button)return!1;e=e||this;var o=document.createElement("div");o.className="waves-ripple waves-rippling",e.appendChild(o);var a=i(e),s=0,u=0;"touches"in t&&t.touches.length?(s=t.touches[0].pageY-a.top,u=t.touches[0].pageX-a.left):(s=t.pageY-a.top,u=t.pageX-a.left),u=u>=0?u:0,s=s>=0?s:0;var c="scale("+e.clientWidth/100*3+")",l="translate(0,0)";n&&(l="translate("+n.x+"px, "+n.y+"px)"),o.setAttribute("data-hold",Date.now()),o.setAttribute("data-x",u),o.setAttribute("data-y",s),o.setAttribute("data-scale",c),o.setAttribute("data-translate",l);var d={top:s+"px",left:u+"px"};o.classList.add("waves-notransition"),o.setAttribute("style",r(d)),o.classList.remove("waves-notransition"),d["-webkit-transform"]=c+" "+l,d["-moz-transform"]=c+" "+l,d["-ms-transform"]=c+" "+l,d["-o-transform"]=c+" "+l,d.transform=c+" "+l,d.opacity="1";var f="mousemove"===t.type?2500:v.duration;d["-webkit-transition-duration"]=f+"ms",d["-moz-transition-duration"]=f+"ms",d["-o-transition-duration"]=f+"ms",d["transition-duration"]=f+"ms",o.setAttribute("style",r(d))},hide:function(t,e){for(var n=(e=e||this).getElementsByClassName("waves-rippling"),o=0,a=n.length;o=0&&null!==e.wait){var d={type:"mouseup",button:1};setTimeout(function(t,e){return function(){v.hide(t,e)}}(d,o),e.wait)}},l.calm=function(t){for(var e={type:"mouseup",button:1},n=0,o=(t=a(t)).length;n + + + + + + + Profile | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + +
          + + + + + + + + + + + +
          + + +
          + +
          +
          + +
          +
          + John Doe + +
          +
          + + +
          +

          John Doe

          +

          Senior Software Engineer at TechCorp

          +
          + JavaScript + React + Node.js + UI/UX +
          +
          + + + +
          + + + +
          + + +
          + +
          +
          +
          + +
          +
          +

          About Me

          +
          +
          +
          + +
          +

          Experienced Software Engineer with a demonstrated history of working in the computer software industry. Skilled in JavaScript, React.js, Node.js, and UI/UX Design. Strong engineering professional with a Bachelor's degree focused in Computer Science.

          + +
          Contact Information
          +
          +
          + + + + john.doe@example.com +
          +
          + + + + +1 (555) 123-4567 +
          +
          + + + + San Francisco, CA +
          +
          +
          + + +
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          +
          +
          +
          +
          + + +
          +
          +

          Experience

          +
          +
          +
          +
          +
          +
          +
          +
          Senior Software Engineer
          +

          TechCorp • 2020 - Present

          +

          Lead developer for enterprise web applications using React and Node.js.

          +
          +
          +
          +
          +
          +
          Software Engineer
          +

          InnovateTech • 2018 - 2020

          +

          Developed and maintained multiple client-facing applications.

          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          +
          +

          Skills

          +
          +
          +
          +
          + JavaScript + React.js + Node.js + TypeScript + HTML5 + CSS3 + Git + AWS +
          +
          +
          +
          + + +
          +
          +

          Education

          +
          +
          +
          +
          +
          +
          +
          +
          BS in Computer Science
          +

          University of Technology • 2014 - 2018

          +

          Major in Software Engineering

          +
          +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +

          Latest Updates

          + +
          +
          +
          + +
          + +
          +
          + John Doe +
          +
          John Doe
          + Posted 2 days ago +
          +
          +

          Excited to announce that our latest project has been successfully launched! 🚀

          + Project Launch +
          + + + +
          + +
          +
          + John Doe +
          +
          + +
          + + +
          +
          +
          +
          + + + +
          + +
          +
          + Iftekhar Ahmed +
          +
          +
          +
          Iftekhar Ahmed
          + +
          +

          Marketing Professional • 3rd+

          +

          Job well done!

          +
          + + + 1 week ago +
          +
          + +
          +
          + SAFAYET DOZZA +
          +
          +
          +
          SAFAYET DOZZA
          + +
          +

          Merchandising Strategist • 3rd+

          +

          This is a really great project, loved it also!

          +
          + + + 1 week ago +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          + +
          +
          + John Doe +
          +
          John Doe
          + Posted 1 week ago +
          +
          +

          Just completed a certification in Advanced React Development! 📚

          +
          + + + +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          Profile Views

          +
          +
          +
          +
          +
          + Emily Chen +
          +
          Emily Chen
          + Senior UX Designer +
          +
          +
          + Michael Smith +
          +
          Michael Smith
          + Tech Lead at Google +
          +
          +
          + Lisa Wong +
          +
          Lisa Wong
          + Product Manager +
          +
          +
          +
          +
          +
          + +
          +
          +

          People You Might Know

          +
          +
          +
          +
          +
          + David Kim +
          +
          David Kim
          + Frontend Developer at Meta +
          + +
          +
          + Rachel Green +
          +
          Rachel Green
          + UI Designer at Apple +
          + +
          +
          + Tom Wilson +
          +
          Tom Wilson
          + Backend Developer at Amazon +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          + +
          +
          +
          +

          Featured Projects

          + +
          +
          +
          + +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +
          +
          +
          E-Commerce Platform
          +

          React • Node.js • MongoDB

          +
          +
          +
          +

          A full-featured e-commerce platform with real-time inventory management and analytics.

          + View Project +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          +
          +
          +
          Task Management App
          +

          Vue.js • Express • PostgreSQL

          +
          +
          +
          +

          Intuitive task management application with team collaboration features.

          + View Project +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          +
          +
          +
          Social Media Dashboard
          +

          Angular • Firebase • Chart.js

          +
          +
          +
          +

          Comprehensive social media analytics and management dashboard.

          + View Project +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          + +
          +
          +

          My Contacts

          +
          +
          + + +
          +
          +
          +
          +
          +
          + +
          + + + +
          + + +
          +
          + Sarah Johnson +
          +
          Sarah Johnson
          + Senior UX Designer at Adobe +
          +
          + + + +
          +
          + +
          + Michael Smith +
          +
          Michael Smith
          + Tech Lead at Google +
          +
          + + + +
          +
          + +
          + Emily Chen +
          +
          Emily Chen
          + Product Manager at Microsoft +
          +
          + + + +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          +
          +

          Contact Information

          +
          +
          +
          +
          +
          +
          Email
          +
          + + + + john.doe@example.com +
          +
          +
          +
          Phone
          +
          + + + + +1 (555) 123-4567 +
          +
          +
          +
          Location
          +
          + + + + San Francisco, CA +
          +
          +
          +
          Social Media
          + +
          +
          +
          +
          +
          + + +
          +
          +

          Office Hours

          +
          +
          +
          +
          +
          + Monday - Friday + 9:00 AM - 5:00 PM +
          +
          + Saturday + 10:00 AM - 2:00 PM +
          +
          + Sunday + Closed +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/responsivegrid.html b/legacy/smartadmin/responsivegrid.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/responsivegrid.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/sawhisp.html b/legacy/smartadmin/sawhisp.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/sawhisp.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/scripts/core/saveloadscript.js b/legacy/smartadmin/scripts/core/saveloadscript.js new file mode 100644 index 0000000..2d06c3a --- /dev/null +++ b/legacy/smartadmin/scripts/core/saveloadscript.js @@ -0,0 +1,257 @@ +'use strict'; + + +var htmlRoot = document.getElementsByTagName('HTML')[0], + //save states + savePanelStateEnabled = true, + + //mobile operator on + mobileOperator = function () { + // Check user agent + const userAgent = navigator.userAgent.toLowerCase(); + const isMobileUserAgent = /iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(userAgent); + + // Check for touch support + const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0; + + // Check screen size (optional) + const isSmallScreen = window.innerWidth <= 992; // Adjust the breakpoint as needed + + // Return true if any of the conditions are met + return isMobileUserAgent || isTouchDevice || isSmallScreen; + }, + + //filter + filterClass = function (t, e) { + return String(t).split(/[^\w-]+/).filter(function (t) { + return e.test(t) + }).join(' ') + }, + + //load + loadSettings = function () { + var t = sessionStorage.getItem('layoutSettings') || '', + e = t ? JSON.parse(t) : {}; + + // Load theme setting + var savedTheme = e.theme || 'light'; + htmlRoot.setAttribute('data-bs-theme', savedTheme); + + // Load theme style CSS file only if one was saved + var themeStyle = e.themeStyle || ''; + if (themeStyle) { + loadThemeStyle(themeStyle); + } + + return Object.assign({ + htmlRoot: '', + theme: savedTheme, + themeStyle: themeStyle + }, e) + }, + + //save + saveSettings = function () { + // Save root HTML classes + layoutSettings.htmlRoot = filterClass(htmlRoot.className, /^(set)-/i); + + // Save theme attribute + layoutSettings.theme = htmlRoot.getAttribute('data-bs-theme') || 'light'; + + // Save theme style CSS path + var themeStyleElement = document.getElementById('theme-style'); + if (themeStyleElement && themeStyleElement.getAttribute('href')) { + // Get complete href attribute + layoutSettings.themeStyle = themeStyleElement.getAttribute('href'); + console.log('Saved theme style:', layoutSettings.themeStyle); + } else { + layoutSettings.themeStyle = ''; + console.log('No theme style to save'); + } + + // Log the full settings object before saving + console.log('Saving layout settings:', JSON.stringify(layoutSettings)); + + // Save to sessionStorage + sessionStorage.setItem("layoutSettings", JSON.stringify(layoutSettings)); + + // Show saving indicator + savingIndicator(); + }, + + // reset + resetSettings = function () { + sessionStorage.setItem("layoutSettings", ""); + // reset data-bs-theme + htmlRoot.setAttribute('data-bs-theme', 'light'); + + // reset theme style element if it exists + const themeStyleElement = document.getElementById('theme-style') + if (themeStyleElement) { + themeStyleElement.setAttribute('href', ''); + } + + // refresh page + window.location.reload(); + + + }, + + //load theme style + loadThemeStyle = function (themeStyle) { + if (!themeStyle) return; + + // Don't do anything if the URL is empty + if (!themeStyle.trim()) return; + + // Get existing theme style if it exists + var existingThemeStyle = document.getElementById('theme-style'); + + if (existingThemeStyle) { + // Update existing theme style's href + existingThemeStyle.href = themeStyle; + } else { + // Create new theme style element if none exists + var linkElement = document.createElement('link'); + linkElement.id = 'theme-style'; // Use the standard ID + linkElement.rel = 'stylesheet'; + linkElement.media = 'screen'; + linkElement.href = themeStyle; + document.head.appendChild(linkElement); + + // Flag to indicate this was loaded from sessionStorage + linkElement.setAttribute('data-loaded-from-storage', 'true'); + } + }, + + //get page id + getPageIdentifier = function () { + return window.location.pathname.split('/').pop() || 'index.html'; + }, + + //save panel state + savePanelState = function () { + if (!savePanelStateEnabled) return; + + var state = []; + var columns = document.querySelectorAll('.main-content > .row > [class^="col-"]'); + columns.forEach(function (column, columnIndex) { + var panels = column.querySelectorAll('.panel'); + panels.forEach(function (panel, position) { + var panelHeader = panel.querySelector('.panel-hdr'); + + // Save panel classes excluding 'panel' and 'panel-fullscreen' + var panelClasses = panel.className.split(' ').filter(function (cls) { + return cls !== 'panel' && cls !== 'panel-fullscreen'; + }).join(' '); + + // Save header classes excluding 'panel-hdr' + var headerClasses = panelHeader ? panelHeader.className.split(' ').filter(function (cls) { + return cls !== 'panel-hdr'; + }).join(' ') : ''; + + state.push({ + id: panel.id, + column: columnIndex, + position: position, // Save position within column + classes: panelClasses, + headerClasses: headerClasses + }); + }); + }); + + var pageId = getPageIdentifier(); + var allStates = JSON.parse(sessionStorage.getItem('allPanelStates') || '{}'); + allStates[pageId] = state; + sessionStorage.setItem('allPanelStates', JSON.stringify(allStates)); + savingIndicator(); + }, + + loadPanelState = function () { + var pageId = getPageIdentifier(); + var allStates = JSON.parse(sessionStorage.getItem('allPanelStates') || '{}'); + var savedState = allStates[pageId]; + + if (!savedState) return; + + // Use same selector as save function + var columns = Array.from(document.querySelectorAll('.main-content > .row > [class^="col-"]')); + + // Store all existing panels in a map before removing them + var panelMap = {}; + columns.forEach(function (column) { + var existingPanels = Array.from(column.querySelectorAll('.panel')); + existingPanels.forEach(function (panel) { + panelMap[panel.id] = panel; + panel.remove(); + }); + }); + + // Sort state by column and position + savedState.sort(function (a, b) { + if (a.column === b.column) { + return a.position - b.position; + } + return a.column - b.column; + }); + + // Reinsert panels in correct order + savedState.forEach(function (item) { + var panel = panelMap[item.id]; + if (panel && columns[item.column]) { + // Update panel classes + panel.className = 'panel ' + (item.classes || ''); + + // Update header classes + var panelHeader = panel.querySelector('.panel-hdr'); + if (panelHeader && item.headerClasses) { + panelHeader.className = 'panel-hdr ' + item.headerClasses; + } + + // Append to correct column + columns[item.column].appendChild(panel); + } + }); + }, + + // Reset panel state + resetPanelState = function () { + var pageId = getPageIdentifier(); + var allStates = JSON.parse(sessionStorage.getItem('allPanelStates') || '{}'); + delete allStates[pageId]; + sessionStorage.setItem('allPanelStates', JSON.stringify(allStates)); + //refresh page + window.location.reload(); + }, + + savingIndicator = function () { + // Create or get the indicator element + let indicator = document.getElementById('saving-indicator'); + if (!indicator) { + indicator = document.createElement('div'); + indicator.id = 'saving-indicator'; + document.body.appendChild(indicator); + } + + // Show saving animation + //indicator.textContent = ''; + indicator.className = 'saving-indicator spinner-border show'; + + // After a brief delay, show success and hide + setTimeout(() => { + //indicator.textContent = ''; + indicator.className = 'saving-indicator spinner-border show success'; + setTimeout(() => { + indicator.className = 'saving-indicator spinner-border success'; + }, 500); + }, 300); + }, + + //load page layout settings + layoutSettings = loadSettings(); +layoutSettings.htmlRoot && (htmlRoot.className = layoutSettings.htmlRoot); + +// Load panel settings is triggered just before + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + +
          + +
          + +

          + 65 Results for "SmartAdmin" + + Request time (0.23 seconds) + +

          + +
          + + + + + + + + +
          +
          + + + +
          +
          + Did you mean? + + SmartNav + + + SmartTables + +
          +
          + +
          +
          + +
          +
          + +
            +
          • + SmartAdmin v5 - Jquery Free WebApp + +
            + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book... +
            +
            +
            + Support us - WebApp +
            + He consider is to vows, focuses +

            Sufficiently the secure our represent on eagerly magazine where expl

            +
            +
            +
            + Contact - WebApp +
            + Sufficiently the secure our represent on eagerly magazine where expl +

            Sufficiently the secure our represent on eagerly magazine where expl

            +
            +
            +
            + About us +
            + Which been italic, his based due and yet was hazar +

            Sufficiently the secure our represent on eagerly magazine where expl

            +
            +
            +
            +
          • +
          • + Develop your webapp with ease using SmartAdmin + +
            + Acquired concept to however, lots have it human its after suspicious good clock, line tall and writing be he are was increased technology be client would, and in top children peacefully. The consider is to vows, focuses completely I to proposal room. Joke. That particularly problem uniforms, burden military the to ill road, people. +
            + +
          • +
          • + 45,000 downloads for SmartAdmin v5 + +
            + Greatest both welcoming the turn spineless, to which been italic, his based due and yet was hazardous necessary pros blind a okay. Written missions of and remedies. Have prior though point economics, real he please. +
            +
          • +
          • + Company project Timeline Stock SmartAdmin + +
            + Once freshlybrewed of it as and big behind he sufficiently the secure our represent on eagerly magazine where explanation every he they should a go presentations. +
            +
          • + +
          • +
            + + + + Videos +
            +
            + +
            +
            +
            +
            +
            + +
            +
            + +
            +
            +
            +
            +
            + Introduction +

            Some quick example text to build on the card title and make up the bulk of the card's content.

            + YouTube - Jul 18, 2023 +
            +
            + +
            +
            +
            +
            +
            + +
            +
            + +
            +
            +
            +
            +
            + Advanced layouts +

            Some quick example text to build on the card title and make up the bulk of the card's content.

            + YouTube - Jan 15, 2023 +
            +
            +
            +
          • +
          • + Online software and management toolkit using UI + +
            + Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam laoreet turpis sed leo gravida interdum. Aliquam efficitur tempor enim ac pretium. Integer scelerisque dui sed ex laoreet congue. +
            +
          • + +
          • +
            + + + + Orders +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            ItemsStatusDateClient
            +
            + Corporate Identity + +
            +
            + Pending + 16/08/2022Microsoft
            +
            + Logo Design + +
            +
            + In progress + 28/10/2022Microsoft
            +
            + Animation + +
            +
            + Complete + 18/09/2022Walmart
            +
            + UX Review + +
            +
            + Complete + 15/08/2022Bridgestone
            +
          • +
          • + Bootstrap Templates & Themes from WrapBootstrap + +
            + Been the as I have stairs familiarity he everything our except with now, there's he literature stage all the himself bed and skyline overhauls at how may maintain didn't depend train tone, sign he reassuring complete reached chance. +
            +
          • +
          • + It impenetrable hazardous best. + +
            + Must and agency is she something sentences that italic, to would trust, a the far was for small quarter following thought, any at something over there of being me. Frequency; And cheerful, tone the at their lobby, are was the between touch have play suppliers, eye stash too the that. +
            +
          • +
          • + Temple of appeared a somewhere, hands + +
            + Time. Reason that staple in her many a do comments less recommended. Easier just dull two harmonics. Strenuous much back to over career here. Let's of with business the completely for anger get that up software god mostly my in phase he on knowing posterity drew he or each any that brown said in and have he nonsense, evils then first wait neuter. +
            +
          • +
          • + You did to and bed seen, documents violin to groundtem + +
            + The wrong findings. Only into the considerations, stuffed puzzles was enough and how queen, and sooner person, different in to pass not. Able mellower to having as easier at live of process anger more, such, what avarice attention from warned congress, you the his o'clock enterprises then, an velocity a belong, samples copy and occasion films and day secure that dissolute by her ever the headline take what two as example, it is about but employed one in sleeping eyes the like. +
            +
          • +
          • + To she enjoying world could to + +
            + Decades the and the of deceleration been from with key a the pass in such safe motors it abused years temple a she have rush one a yes, it hesitated of he refinements. Day into of was concise principles, those with but from behind most ideas been their explain text to their and spots present events do was, a best odd one is one in some we explains way one attempt. +
            +
          • +
          +
          +
          + + + +
          +
          +
          +
          +
          +
          + + + +
          + + + Senior Developer, Development Team +
          +
          +
          +
          +
          + + +1 317-456-2564 + + john.smith@smartadminwebapp.com +
          + 15 Charist St, Detroit, MI, 48212, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + UX Designer, Design Team +
          +
          +
          +
          +
          + + +1 313-461-1347 + + sarah.connor@smartadminwebapp.com +
          + 134 Hamtrammac, Detroit, MI, 48314, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Project Manager, Management +
          +
          +
          +
          +
          + + +1 313-779-1347 + + james.wilson@smartadminwebapp.com +
          + 55 Smyth Rd, Detroit, MI, 48341, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Frontend Developer, Development Team +
          +
          +
          +
          +
          + + +1 313-779-3314 + + lisa.anderson@smartadminwebapp.com +
          + 134 Tasy Rd, Detroit, MI, 48212, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Backend Developer, Development Team +
          +
          +
          +
          +
          + + +1 313-779-8134 + + michael.brown@smartadminwebapp.com +
          + 134 Gallery St, Detroit, MI, 46214, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + QA Engineer, Testing Team +
          +
          +
          +
          +
          + + +1 313-779-7613 + + emma.davis@smartadminwebapp.com +
          + 13 Jamie Rd, Detroit, MI, 48313, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + DevOps Engineer, Operations Team +
          +
          +
          +
          +
          + + +1 313-779-4314 + + david.lee@smartadminwebapp.com +
          + 55 Smyth Rd, Detroit, MI, 48341, USA +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + UI Designer, Design Team +
          +
          +
          +
          +
          + + +1 313-779-3347 + + oliver.wilson@smartadminwebapp.com +
          + 798 Smyth Rd, Detroit, MI, 48341, USA +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/settings_layout_options.html b/legacy/smartadmin/settings_layout_options.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/settings_layout_options.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/smarttables-fuzzy-matching.html b/legacy/smartadmin/smarttables-fuzzy-matching.html new file mode 100644 index 0000000..79bfbf8 --- /dev/null +++ b/legacy/smartadmin/smarttables-fuzzy-matching.html @@ -0,0 +1,1894 @@ + + + + + + + + ST: Fuzzy Matching | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Fuzzy Matching

          + + + + + + +
          Fuzzy Matching allows matching text that isn't an exact match, making search more forgiving and intuitive.
          + + +
          +
          +

          Adjust the settings below to see how different fuzzy matching parameters affect search results. + After configuring your settings, click Build Table to initialize the table with those settings. + To apply new settings, click Destroy Table and then Build Table again. See Documentation → +

          +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          + +
          +
          +
          +
          + +
          + + + +
          +
          +
          + +
          +
          +
          Try the Search
          +

          Use the search box below to test how your fuzzy search settings perform. Try partial words, typos, or multi-word searches.

          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttables-importexport-data.html b/legacy/smartadmin/smarttables-importexport-data.html new file mode 100644 index 0000000..f805723 --- /dev/null +++ b/legacy/smartadmin/smarttables-importexport-data.html @@ -0,0 +1,1862 @@ + + + + + + + + SmartTables: Import & Export Data | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          + +
          + +
          + + +

          Import & Export Data

          + + + + + + +
          No manual processing, no hassle—just smooth, efficient data management built for developers. 🚀
          + + +
          +
          +
          +

          + The SmartTables Import feature streamlines your workflow by + automatically or conditionally importing + JSON and CSV files (with more formats coming soon). + Imported data is instantly sorted and listed, ready for you to explore. + Need to share or transform your data? Effortlessly export it + in multiple formats with just a click. +

          +
          + + + Note: + The import feature is currently limited to CSV and JSON files. Download sample files here. + +
          + +
          +

          Error

          +

          Could not open the import modal. Please try refreshing the page or check the console for errors.

          +
          + +
          +
          +
          + + + + + + + +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttables-json-source.html b/legacy/smartadmin/smarttables-json-source.html new file mode 100644 index 0000000..9d35f35 --- /dev/null +++ b/legacy/smartadmin/smarttables-json-source.html @@ -0,0 +1,1828 @@ + + + + + + + + SmartTables | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          JSON Data Source

          + + + + + + +
          Loading the table with External JSON data source with over 1000 records.
          + + +
          +
          + The render function allows you to manipulate data, apply custom styling, + implement logic, and add various functionalities. For example, you can hover over a + product to see its image, style emails based on mail providers, or use data matching to + encode badges with colors. These are just basic examples—you can do much more with the render function. See Documentation → +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttables-manage-records.html b/legacy/smartadmin/smarttables-manage-records.html new file mode 100644 index 0000000..071ca71 --- /dev/null +++ b/legacy/smartadmin/smarttables-manage-records.html @@ -0,0 +1,1826 @@ + + + + + + + + SmartTables: Manage Records | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Manage Records

          + + + + + + +
          Functionality for managing records with full CRUD (Create, Read, Update, Delete) operations. This allows you to build interactive data management interfaces with minimal effort.
          + + +
          +
          + Turn on Edit, Add, and Delete feature by using addRecord: true and use hooks create custom form elements. +
          +
          +
          + +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttables-minimal.html b/legacy/smartadmin/smarttables-minimal.html new file mode 100644 index 0000000..b5df6a4 --- /dev/null +++ b/legacy/smartadmin/smarttables-minimal.html @@ -0,0 +1,1960 @@ + + + + + + + + SmartTables | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Minimal Settings

          + + + + + + +
          Loading the table with minimal settings & static data.
          + + +
          +
          + By default, most of the features are disabled, including the responsive design. We inilialize the table by using const table = new SmartTables('myTable', {}); + Only "Search", "Pagination", "Sorting", and "Entries" are enabled by default. + Note: This is a non-responsive example of SmartTables. +
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          IDNameEmailPhoneStatusDue
          1John Doejohn.doe@example.com123-456-7890Active$100.00
          2Jane Smithjane.smith@example.com987-654-3210Inactive$200.00
          3Jim Beamjim.beam@example.com555-123-4567Active$300.00
          4Alice Johnsonalice.johnson@example.com415-555-0101Pending$150.00
          5Robert Leerobert.lee@example.com310-987-6543Active$75.00
          6Sarah Kimsarah.kim@example.com212-345-6789Inactive$250.00
          7Michael Brownmichael.brown@example.com617-890-1234Active$400.00
          8Emily Davisemily.davis@example.com720-456-7891Pending$50.00
          9David Wilsondavid.wilson@example.com503-234-5678Active$125.00
          10Linda Carterlinda.carter@example.com858-901-2345Inactive$175.00
          11Thomas Greenthomas.green@example.com206-789-0123Active$90.00
          12Nancy Whitenancy.white@example.com404-567-8901Pending$225.00
          13Paul Adamspaul.adams@example.com713-345-6789Active$350.00
          14Clara Evansclara.evans@example.com916-123-4567Inactive$80.00
          15Oliver Harrisoliver.harris@example.com312-890-1234Active$500.00
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttables-responsive.html b/legacy/smartadmin/smarttables-responsive.html new file mode 100644 index 0000000..97d4611 --- /dev/null +++ b/legacy/smartadmin/smarttables-responsive.html @@ -0,0 +1,2388 @@ + + + + + + + + SmartTables: Responsive Settings | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Responsive Settings

          + + + + + + +
          Loading the table with responsive settings & static data.
          + + +
          +
          + Responsive Settings are enabled by using responsive: { enabled: true, breakpoint: 768, columnPriorities: { 0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6 } } +
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          TradeIDSymbolQtyBuyPriceSellPriceBuyDateSellDateProfitFeeNetBrokerTypeSectorIndustryMktCapDivYield
          4V03PG6YJ41RNR^C88$862.69$180.44January 18, 2013September 26, 2015-$60,050.00$97.57-$60,147.57JabbersphereSellnullnull$174,377,450.993.30%
          7DJ6J71PN97BFZ6398$416.05$769.28September 21, 2020March 5, 2013$2,260,774.54$27.01$2,260,747.53ZoomdogSellnullnull$174,918,140.369.37%
          7VQ8AD4QP75DNBF7661$124.73$280.57May 3, 2022May 19, 2007$1,193,747.24$31.03$1,193,716.21TwitterwireShort SellFinanceMajor Banks$490,483,854.325.39%
          5DJ7A03DM07PSCT1264$573.46$555.79July 27, 2021June 19, 2020-$22,330.88$70.56-$22,401.44RealpointShort Sellnullnull$937,480,759.407.63%
          5J66FY3KF44XCO9886$560.19$691.93October 30, 2000May 10, 2017$1,301,761.64$59.30$1,301,702.34BlogspanSellEnergyOil & Gas Production$248,377,509.715.29%
          4D93NX6GN89CHMG1947$852.07$333.50September 8, 2011July 3, 2006-$1,009,950.39$53.01-$1,010,003.40ZooveoBuyFinanceMajor Banks$440,344,370.624.93%
          8Y91J07XK92MMM8514$563.82$118.44November 18, 2003December 24, 2011-$3,792,292.92$14.07-$3,792,306.99VoommSellHealth CareMedical/Dental Instruments$329,511,930.272.28%
          6KP5GG2VY09WSFS4447$825.47$559.37November 29, 2004March 9, 2011-$1,182,965.70$85.07-$1,183,050.77DablistBuyFinanceMajor Banks$705,999,811.608.64%
          6QF6VW0RE55GRBK9460$313.98$190.15September 5, 2019January 22, 2020-$1,171,419.80$24.22-$1,171,444.02WordifySellCapital GoodsHomebuilding$364,056,899.585.45%
          2CU1G24WN29FHY4085$573.20$649.23May 21, 2020August 29, 2015$310,502.05$62.37$310,439.68PhotolistSellnullnull$776,666,698.326.34%
          5Q74YX8AV26SBS3169$544.99$740.63July 21, 2015September 15, 2014$619,856.24$65.94$619,790.30DevcastSellPublic UtilitiesWater Supply$177,694,103.149.93%
          8JE4RC3GV76RTNB1638$555.11$34.63November 27, 2003February 5, 2014-$852,207.84$63.52-$852,271.36TwitterbridgeSellConsumer ServicesProfessional Services$243,368,864.797.58%
          2N88GU0ED21LMB1972$571.40$851.56December 15, 2012October 19, 2022$552,395.52$20.92$552,374.60YouspanShort SellBasic IndustriesEngineering & Construction$825,435,515.772.83%
          8P29T30MJ10NOC4898$263.98$995.03December 7, 2004May 30, 2003$3,581,752.90$54.19$3,581,698.71RealpointSellCapital GoodsIndustrial Machinery/Components$820,633,082.856.80%
          8Y61HE8FY65PSB^U2037$706.29$779.57February 11, 2000April 11, 2013$149,165.76$25.15$149,140.61YakitriBuynullnull$597,990,931.759.14%
          2NP6NH8NG71THFF6856$546.09$786.17August 16, 2003January 14, 2001$1,645,981.28$22.54$1,645,958.74KwilithSellFinanceMajor Banks$664,298,409.512.07%
          6JR0UM9AR33TS4237$929.81$693.05January 3, 2015May 21, 2012-$1,002,512.12$14.26-$1,002,526.38FeedfireBuyBasic IndustriesSteel/Iron Ore$624,731,020.025.92%
          7RW9CD0MU00VRTS7045$462.12$955.04October 3, 2014March 26, 2010$3,472,786.60$95.52$3,472,691.08YoveoShort SellFinanceInvestment Managers$682,163,167.358.20%
          8E25EP4EY58USAK2743$249.82$554.92October 4, 2012November 23, 2004$836,097.30$17.55$836,079.75YodoSellTransportationTrucking Freight/Courier Services$510,759,967.731.20%
          5GF2C48QA96BPTH5978$119.80$529.65October 24, 2020May 4, 2005$2,452,889.30$1.39$2,452,887.91MeembeeShort SellHealth CareMajor Pharmaceuticals$600,492,028.288.95%
          6AD0UK1ER50SWM6654$845.15$838.72August 21, 2018April 4, 2006-$42,848.82$33.58-$42,882.40JamiaSellBasic IndustriesPaper$489,158,681.740.11%
          5W28TC7XM60BABA1188$659.87$92.82June 20, 2010August 26, 2021-$673,029.60$95.39-$673,124.99PhotofeedSellMiscellaneousBusiness Services$89,948,943.822.26%
          8YF1R57HM21BLIN7097$338.19$199.97March 12, 2007January 13, 2005-$980,427.34$22.12-$980,449.46CogilithSellTechnologyComputer Software: Prepackaged Software$273,347,630.161.16%
          5WW6H56VN67SR3629$782.16$963.56August 13, 2004April 21, 2010$658,398.40$55.18$658,343.22JabbersphereBuyPublic UtilitiesOil/Gas Transmission$620,372,068.688.70%
          4U52DN4UD27VMW8994$424.85$436.77September 20, 2012October 19, 2016$107,107.28$82.95$107,024.33TavuShort SellTechnologyComputer Software: Prepackaged Software$196,295,780.703.25%
          2CH5U95EU70RIC8321$250.29$369.41August 16, 2001May 16, 2000$990,251.52$98.62$990,152.90ThoughtworksSellBasic IndustriesPrecious Metals$657,686,022.626.53%
          3YR5V95MY43PSXP122$176.70$729.07January 10, 2007March 17, 2021$67,404.74$53.84$67,350.90EayoSellEnergyNatural Gas Distribution$170,561,815.551.31%
          6WA2PT9NX49FMNB5341$750.23$89.75February 2, 2018November 17, 2015-$3,529,189.88$52.23-$3,529,242.11BubbletubeBuyFinanceMajor Banks$18,733,078.920.43%
          5WN0AU4MK09VNO^I2535$294.04$239.57August 16, 2001February 26, 2011-$138,108.45$53.83-$138,162.28ThoughtstormShort Sellnullnull$439,869,983.691.76%
          8T04YT7QA61XLRN9398$565.43$453.02August 22, 2021April 19, 2000-$1,056,236.18$81.42-$1,056,317.60QuinuBuyHealth CareBiotechnology: Biological Products (No Diagnostic Substances)$907,421,994.162.17%
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttables-server-side.html b/legacy/smartadmin/smarttables-server-side.html new file mode 100644 index 0000000..b8e285d --- /dev/null +++ b/legacy/smartadmin/smarttables-server-side.html @@ -0,0 +1,1835 @@ + + + + + + + + SmartTables: Server-Side Mode | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          SmartTables: Server-Side Mode

          + + + + + + +
          Loading the table with server side data.
          + + +
          +
          + Here we use mock-server.php to load data via AJAX, data resets every 24 hours. + Configure with: + + data: { type: 'ajax', source: 'API_URL', serverSide: true, method: 'GET', cacheDuration: 300000 } + + Processing happens server-side; client only renders. Searched, paging, and sorting is cached for 5 minutes. + Test how this works by opening the browser's developer tools and going to the Network tab. See documentation → +
          + +
          +
          +
          +
          +
          + +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/smarttablesjs.html b/legacy/smartadmin/smarttablesjs.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/smarttablesjs.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/streamline.html b/legacy/smartadmin/streamline.html new file mode 100644 index 0000000..e51d3aa --- /dev/null +++ b/legacy/smartadmin/streamline.html @@ -0,0 +1,2083 @@ + + + + + + + + Streamline | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Streamline

          + + + + + + +
          A lightweight, dependency-free JavaScript library for generating sparkline charts.
          + + +
          +
          + Streamline is a lightweight, dependency-free JavaScript library for generating mini graphs. This in-house plugin is designed to be flexible and customizable to your needs. If you'd like to request additional features, please don’t hesitate to contact us. +
          +
          +
          + +
          +
          +

          Line Chart

          +
          + + + +
          +
          +
          +
          +
          + Line charts display data points connected by straight line segments. You can customize the line color and width using data-line-color and data-line-width attributes. +
          +
          +
          + 5,3,9,6,5,9,7,3,5,2 +
          +
          + 0,-3,-6,-4,-5,-4,-7,-3,-5,-2 +
          +
          + 0,1,7,6,4,2,3,5,3,4 +
          +
          + 5,3,9,6,5,3,1,7,6,4 +
          +
          +
          +
          +
          + + +
          +
          +

          Bar Chart

          +
          + + + +
          +
          +
          +
          +
          + Bar charts display data as vertical bars. You can customize bar colors, width, and spacing using data attributes. +
          +
          +
          + 5,3,9,6,5,9,7,3,5,2 +
          +
          + 4,-3,-6,-4,-5,-4,7,-3,-5,2 +
          +
          + 0,1,7,6,4,2,3,5,3,4 +
          +
          + 0,-1,-7,-6,-4,-2,-3,-5,-3,-4 +
          +
          +
          +
          +
          + + +
          +
          +

          Tristate Chart

          +
          + + + +
          +
          +
          +
          +
          + Tristate charts represent data in three states: positive (1), neutral (0), and negative (-1). Each state can be represented with different colors. +
          +
          +
          + 1,1,0,1,-1,-1,1,-1,0,0,1,1 +
          +
          + 1,-1,0,1,-1,0,1,0,-1,1,0,-1 +
          +
          +
          +
          +
          +
          + +
          + +
          +
          +

          Area Chart

          +
          + + + +
          +
          +
          +
          +
          + Area charts are line charts with the area below the line filled with a color. Customize both line and fill colors using data attributes. +
          +
          +
          + 5,3,2,-1,-3,-2,2,3,5,2 +
          +
          + 1,4,4,7,5,9,10,4,4,7,5,9,10 +
          +
          + 5,3,9,6,5,3,1,7,6,4,4,1,5 +
          +
          + 0,1,7,6,4,2,3,5,3,4,3,1,4,6 +
          +
          +
          +
          +
          + + +
          +
          +

          Discrete Chart

          +
          + + + +
          +
          +
          +
          +
          + Discrete charts display data as individual vertical lines. Set a threshold value to change the color of lines based on their values. +
          +
          +
          + 5,9,7,6,5,3,2,5,8,9,7,5 +
          +
          + 8,4,6,9,5,3,7,5,7,8,4,9 +
          +
          +
          +
          +
          + + +
          +
          +

          Pie Chart

          +
          + + + +
          +
          +
          +
          +
          + Pie charts show data as proportional slices of a whole. You can customize slice colors using the data-slice-colors attribute with an array of colors. +
          +
          +
          + 30,20,45,5 +
          +
          + 7,6,3 +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/systemicons.html b/legacy/smartadmin/systemicons.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/systemicons.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/systemmail-read.html b/legacy/smartadmin/systemmail-read.html new file mode 100644 index 0000000..541a6c3 --- /dev/null +++ b/legacy/smartadmin/systemmail-read.html @@ -0,0 +1,2127 @@ + + + + + + + + System Mail Read | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + +
          + + +
          + + + +
          + +
          +
          + + +
          +
          + + + + + + +
          +
          1 - 50 of 135 +
          +
          + + +
          +
          + +
          +
          + + + +
          Re: New security codes
          + INBOX +
          + + + + + + + + + +
          +
          +
          + +
          +
          +
          + Melissa Ayre +
          +
          +
          Melissa Ayre <melissaa@example.com> +
          +
          to Me
          +
          +
          1:00 AM (12 hours ago) +
          +
          + + + +
          +
          +
          +
          + We've taken customer feedback on board and are pleased to announce that the the industry's + most recommended and secure option for Two-Factor Authentication (2FA) is now available to + use on our site. So, if you've tried our previous 2FA methods and have not been convinced, + why not try our new Time-Based One-Time Password (TOTP)? It's super easy to use, and it works + with many third-party 2FA apps you might already have on your phone. We're positive you'll love + the new improved experience. +
          +
          + Attachments: +
          +
          security_codes.pdf +
          +
          agreement.pdf +
          + show 3 more +
          + +
          +
          +
          + +
          +
          +
          + Sunny A. +
          +
          +
          Sunny A. me +
          +
          to <melissa.ayre@getwebora.com>
          +
          +
          1:00 AM (12 hours ago) +
          +
          + + + +
          +
          +
          +
          + We've taken customer feedback on board and are pleased to announce that the the industry's most recommended and secure option for Two-Factor Authentication (2FA) is now available to use on our site. + So, if you've tried our previous 2FA methods and have not been convinced, why not try our new Time-Based One-Time Password (TOTP)? It's super easy to use, and it works with many third-party 2FA apps you might already have on your phone. We're positive you'll love the new improved experience. +
          +
          + Best, +
          + Sunny A. + Software Engineer +
          +
          +
          + PRIVATE AND CONFIDENTIAL. This e-mail, its contents and attachments are private and confidential and is + intended for the recipient only. Any disclosure, copying or unauthorized use of such information is prohibited. + If you receive this message in error, please notify us immediately and delete the original and any copies and + attachments. +
          +
          +
          +
          +
          +
          +
          + Melissa Ayre +
          +
          +
          Melissa Ayre <melissaa@example.com> +
          +
          to Me
          +
          +
          1:00 AM (12 hours ago) +
          +
          + + + +
          +
          +
          +
          We've taken customer feedback on board and are pleased to announce that the the industry's most recommended and secure option for Two-Factor Authentication (2FA) is now available to use on our site. So, if you've tried our previous 2FA methods and have not been convinced, why not try our new Time-Based One-Time Password (TOTP)? It's super easy to use, and it works with many third-party 2FA apps you might already have on your phone. We're positive you'll love the new improved experience.
          +
          +
          +
          +
          +
          + + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/systemmail.html b/legacy/smartadmin/systemmail.html new file mode 100644 index 0000000..df5afa6 --- /dev/null +++ b/legacy/smartadmin/systemmail.html @@ -0,0 +1,2040 @@ + + + + + + + + System Mail | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +
          + + +
          + + + +
          + +
          +
          + +
          + + + + + +

          + Inbox +

          +
          + + +
          +
          + + +
          +
          +
          + + +
          + + + +
          +
          1 - 50 of 135 +
          +
          + + +
          +
          + +
          +
          +
          +
            +
          • +
            +
            + + +
            +
            + + + +
            +
            +
            Melissa Ayre
            +
            +
            Re: New security codes (2)
            +
            +
            + This email is a follow-up regarding the new security codes. Please find the updated codes attached + for your reference. Ensure you update your system with these codes by tomorrow to maintain security + compliance. Let me know if you encounter any issues during the process. +
            +
            +
            +
            +
            8:31PM
            +
            +
          • +
          +
          +
          +
          +
          + + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/tables-basic.html b/legacy/smartadmin/tables-basic.html new file mode 100644 index 0000000..71a1ed0 --- /dev/null +++ b/legacy/smartadmin/tables-basic.html @@ -0,0 +1,2606 @@ + + + + + + + + Basic Tables | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Basic Tables

          + + + + + + +
          Tables provide responsive, styled tabular data with classes like .table, .table-striped, .table-bordered, and other classes for customization.
          + + +
          + +
          +
          + +
          +
          +

          + Basic Tables +

          +
          + + + +
          +
          +
          +
          +
          + Add .table to any <table> element for basic styling with horizontal dividers. The .table class adds basic padding and borders to table elements. +
          +
          + Default +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larrythe Bird@twitter
          4Larry the Bird@twitter
          +
          +
          + Inverse +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larrythe Bird@twitter
          +
          +
          +
          +
          + +
          +
          +

          + Table head +

          +
          + + + +
          +
          +
          +
          +
          + Similar to default and inverse tables, use one of two modifier classes to make <thead>s appear custom, dark gray, white and themed. +
          +
          + Dark +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larrythe Bird@twitter
          +
          + +
          + Light +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larrythe Bird@twitter
          +
          + +
          +
          +
          + +
          +
          +

          + Table rows +

          +
          + + + +
          +
          +
          +
          +
          + Add .table-striped to add zebra-striping to any table, and add .table-dark for inverse pattern +
          +
          + Pattern +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larrythe Bird@twitter
          +
          +
          + Pattern inverse +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larrythe Bird@twitter
          +
          +
          +
          +
          + + +
          +
          +

          + Table Responsive +

          +
          + + + +
          +
          +
          +
          +
          + Make table responsive with .table-responsive. Maximum breakpoint can be applied by adding .table-responsive-sm, .table-responsive-md, .table-responsive-lg, .table-responsive-xl, .table-responsive-xxl, or .table-responsive-xxxl +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #Table headingTable headingTable headingTable headingTable headingTable heading
          1Table cellTable cellTable cellTable cellTable cellTable cell
          2Table cellTable cellTable cellTable cellTable cellTable cell
          3Table cellTable cellTable cellTable cellTable cellTable cell
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Table Bordered +

          +
          + + + +
          +
          +
          +
          +
          + Add .table-bordered for borders on all sides of the table and cells. Border color utilities can be added to change colors. +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2MarkOtto@TwBootstrap
          3JacobThornton@fat
          4Larry the Bird@twitter
          +
          +
          +
          + +
          +
          +

          + Table Hover +

          +
          + + + +
          +
          +
          +
          +
          + Add .table-hover to enable a hover state on table rows within a <tbody>. You can also add .table-dark for dark tables. +
          +
          + Hoverable +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1JhonStone@jhon
          2LisaNilson@lisa
          3Larrythe Bird@twitter
          +
          +
          + Inverse +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1JhonStone@jhon
          2LisaNilson@lisa
          3Larrythe Bird@twitter
          +
          +
          +
          +
          + +
          +
          +

          + Contextual classes +

          +
          + + + +
          +
          +
          +
          +
          + Use contextual classes to color table rows or individual cells. See the full list of color selection +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1LisaNilson@lisa
          2LisaNilson@lisa
          3Nicklooper@king
          4Joanthestar@joan
          5Seancoder@coder
          6Seancoder@coder
          +
          +
          +
          + +
          +
          +

          + Table Small +

          +
          + + + +
          +
          +
          +
          +
          + Add .table-sm to make tables more compact by cutting cell padding in half. See the full list of color selection to add backgrounds as well +
          +
          + Compact +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larry the Bird@twitter
          +
          +
          + With background +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larry the Bird@twitter
          +
          +
          + Table nano +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          #First NameLast NameUsername
          1MarkOtto@mdo
          2JacobThornton@fat
          3Larry the Bird@twitter
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/tables-style-generator.html b/legacy/smartadmin/tables-style-generator.html new file mode 100644 index 0000000..e9aeafd --- /dev/null +++ b/legacy/smartadmin/tables-style-generator.html @@ -0,0 +1,2066 @@ + + + + + + + + Tables Style Generator | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Tables Style Generator

          + + + + + + +
          Create custom Bootstrap table styles with live preview.
          + + +
          +
          + This tool helps you generate Bootstrap table styles by selecting different styling options. + The table updates in real-time as you make selections. Copy the generated classes to use in your project. +
          +
          +
          +
          +
          +
          Table Preview
          +
          + + + + + +
          +
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          List of users and their details
          #NameEmailPhoneAddressCityStateCountryAction
          1John Doejohn.doe@example.com123-456-7890123 Main StAnytownCAUSAEdit
          2Jane Smithjane.smith@example.com987-654-3210456 Park AveSomecityNYUSAEdit
          3Bob Johnsonbob.johnson@example.com555-123-4567789 Oak DrOthervilleTXUSAEdit
          4Alice Brownalice.brown@example.com896-456-7890321 Maple StNewtownFLUSAEdit
          5Charlie Wilsoncharlie.wilson@example.com234-456-7890654 Pine LnLastcityWAUSAEdit
          +
          +
          +
          Configuration Code
          +
          <table class="table">
          +  <caption>List of users and their details</caption>
          +  <thead>
          +    <tr>
          +      <th scope="col">#</th>
          +      <th scope="col">Name</th>
          +      <th scope="col">Email</th>
          +      <!-- more columns -->
          +    </tr>
          +  </thead>
          +  <tbody>
          +    <tr>
          +      <th scope="row">1</th>
          +      <td>John Doe</td>
          +      <td>john.doe@example.com</td>
          +      <!-- more cells -->
          +    </tr>
          +    <!-- more rows -->
          +  </tbody>
          +</table>
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          + +
          +
          + + + + + + + + +
          +
          + + +
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          +
          + + +
          +
          + + + + + + + + +
          +
          + + +
          + +
          + Table theme must be set default to use this option. +
          +
          + + +
          + +
          + + +
          +
          + + + + + + + + +
          +
          + + +
          +
          Show example rows with contextual classes
          +
          + + +
          +
          +
          + +
          +
          + Generated Class: +
          + table +
          +
          + + +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-accordions.html b/legacy/smartadmin/ui-accordions.html new file mode 100644 index 0000000..36ff5a1 --- /dev/null +++ b/legacy/smartadmin/ui-accordions.html @@ -0,0 +1,2446 @@ + + + + + + + + Accordions | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Accordions

          + + + + + + +
          Boost user engagement and streamline content with a sleek, collapsible component that organizes information seamlessly with smooth animations and minimal code.
          + + +
          + +
          +

          + Use the .accordion component to provide a way to toggle the visibility of content. + Be sure to add aria-expanded to the control element. This attribute explicitly conveys the + current state of the collapsible element tied to the control to screen readers and similar assistive technologies. +

          +

          + If the collapsible element is closed by default, the attribute on the control element should have a value + of aria-expanded="false". If you've set the collapsible element to be open by default using + the show class, set aria-expanded="true" on the control instead. +

          +

          + Learn more about this plugin on Bootstrap's official documentation. +

          +
          + +
          +
          +
          +
          +

          + Default Accordion +

          +
          + + + +
          +
          +
          +
          +
          + Just add data-bs-toggle="collapse" and a data-bs-target to the element to automatically assign control of one or more collapsible elements. The data-bs-target attribute accepts a CSS selector to apply the collapse to. Be sure to add the class collapse to the collapsible element. If you'd like it to default open, add the additional class show. +
          +
          + To add accordion-like group management to a collapsible area, add the data attribute data-parent="#selector". Refer to the demo to see this in action. +
          + +
          +
          +

          + +

          +
          +
          +

          Accordions work well inside forms and modals, helping break down complex inputs into manageable steps.

          +

          Instead of overwhelming users with long forms, collapsible sections allow for a more progressive disclosure approach.

          +
          +
          +
          +
          +

          + +

          +
          +
          + For example, sections like Billing Details, Shipping Address, and Payment Method can be toggled individually. +
          +
          +
          +
          +

          + +

          +
          +
          + This improves usability, reduces scrolling, and keeps the UI clean and focused. +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +

          + Accordion Outline +

          +
          + + + +
          +
          +
          +
          +
          + Change the style of your accordion by adding class .accordion-outline to .accordion +
          +
          +
          +

          + +

          +
          +
          +

          + The Bootstrap Accordion component allows users to toggle between sections of content in a collapsible manner. +

          +

          + Each accordion item contains a header and a body. The header triggers the collapse behavior, while the body contains the actual content. +

          +
          +
          +
          +
          +

          + +

          +
          +
          + Developers can use Bootstrap’s JavaScript API to control accordion behavior dynamically. Accessibility is also considered, with proper ARIA attributes ensuring screen reader compatibility. +
          +
          +
          +
          +

          + +

          +
          +
          + Each accordion consists of a parent container with multiple accordion items. Each item has a header that users can click to expand or collapse the content inside. +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Accordion Clean layout +

          +
          + + + +
          +
          +
          +
          +
          + Give your accordion a clean look by adding class .accordion-clean to .accordion +
          +
          +
          +

          + +

          +
          +
          + By default, Bootstrap uses the collapse.js plugin to manage this behavior, ensuring smooth transitions and accessibility. The accordion structure supports custom styles, such as different background colors, border-radius adjustments, and shadow effects. +
          +
          +
          +
          +

          + +

          +
          +
          + You can also integrate strong icons or animations to indicate when a section is opened or closed, improving user experience. +
          +
          +
          +
          +

          + +

          +
          +
          + However, developers can tweak the settings to allow multiple sections to stay open simultaneously using data-bs-parent="false". +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Accordion active state icons +

          +
          + + + +
          +
          +
          +
          +
          + Add some navigation to a card's header (or block) with built-in nav components. You can reveal or hide elements during .collapse state using the classes .collapsed-reveal and .collapsed-hidden +

          + Make sure the .collapsed-* classes are inside the data-toggle="collapse" element or adjacent to it +
          + +
          +
          +
          +

          + +

          +
          +
          + In addition to its built-in styling, the accordion can be controlled programmatically using Bootstrap’s JavaScript API. + Functions like .collapse('toggle') allow developers to open, close, or update accordion elements dynamically via JavaScript. +
          +
          +
          +
          +

          + +

          +
          +
          + For accessibility, Bootstrap includes strong ARIA attributes such as aria-expanded and aria-controls, ensuring screen readers can navigate the accordion efficiently. +
          +
          +
          +
          +

          + +

          +
          +
          + This makes it an excellent choice for creating responsive, mobile-friendly interfaces with a clean and structured layout. +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          +

          + Accordion hover +

          +
          + + + +
          +
          +
          +
          +
          + Adding a hover effect adds nice element to your accordion. Achieve this by adding class .accordion-hover to .accordion +
          +
          +
          +

          + +

          +
          +
          +

          Bootstrap Accordion allows extensive customization using CSS variables and utility classes. You can modify backgrounds, borders, typography, and spacing to match your website’s design system.

          + +

          For example, applying bg-primary text-white to an accordion header gives it a bold, standout appearance. + Additionally, you can tweak data-bs-theme="dark" to create a sleek, modern dark mode version.

          +
          +
          +
          +
          +

          + +

          +
          +
          +

          Icons can be added to accordion headers to indicate expansion and collapse actions. Bootstrap provides built-in icons from Bootstrap Icons, Font Awesome, or custom SVGs for this purpose.

          +

          For instance, using bi-chevron-down and toggling classes dynamically can enhance user interaction. These visual indicators improve clarity and provide a better UX for touch-based navigation.

          +
          +
          +
          +
          +

          + +

          +
          +
          +

          Placing an accordion inside a Bootstrap Card can enhance the structure and readability of content. This combination is often used for pricing tables, user profiles, or expandable content sections.

          +

          Cards provide additional padding, shadows, and borders, making the accordion feel more polished and refined. Applying card-header styles to the accordion title further integrates the two seamlessly.

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Nested accordions +

          +
          + + + +
          +
          +
          +
          +
          + Caution! Nested accordions will inherit the properties of its parent. In the example below we use the default accordion for parent and a different style for children. +
          +
          +
          +

          + +

          +
          +
          + +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. +
          +
          +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. +
          +
          +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. +
          +
          +
          +
          +
          +
          +
          +
          +

          + +

          +
          +
          +
          + + Oops! + + Looks like there are no reports available for this user +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-alerts.html b/legacy/smartadmin/ui-alerts.html new file mode 100644 index 0000000..795d384 --- /dev/null +++ b/legacy/smartadmin/ui-alerts.html @@ -0,0 +1,2397 @@ + + + + + + + + Alerts | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Alerts

          + + + + + + +
          Provide contextual feedback messages for common user actions with a variety of customizable and flexible alert options.
          + + +
          + +
          +
          + +
          +
          +

          + Basic Alerts +

          +
          + + + +
          +
          +
          +
          +
          + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Dismissable Alerts +

          +
          + + + +
          +
          +
          +
          +
          + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Large Alerts +

          +
          + + + +
          +
          +
          +
          +
          + + + + + + +
          +
          +
          +
          + + + +
          +
          +
          + Download complete +
          + Install the latest version +
          + Install +
          +
          +
          + +
          +
          +
          + + + +
          +
          +
          + Large Icon +
          + Custom alert background with large sized icon. +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Alert Outline +

          +
          + + + +
          +
          +
          +
          +
          + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Alternative Backgrounds +

          +
          + + + +
          +
          +
          +
          +
          + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Stack Icon +

          +
          + + + +
          +
          +
          +
          +
          + + +
          + +
          +
          +
          +
          + +
          +
          + +
          +
          + + + +
          +
          + + + +
          +
          +
          +
          + Large Icon Stack +
          Custom alert background with large sized icon stack. +
          +
          +
          +
          + +
          +
          +
          +
          + +
          +
          + +
          +
          + + + +
          +
          + + + +
          +
          +
          +
          + Hold on there Sparky! +
          Better fix those errors before you can complete this request +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-badges.html b/legacy/smartadmin/ui-badges.html new file mode 100644 index 0000000..de79955 --- /dev/null +++ b/legacy/smartadmin/ui-badges.html @@ -0,0 +1,2443 @@ + + + + + + + + Badges | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Badges

          + + + + + + +
          Small and adaptive tag for adding context to just about any content.
          + + +
          + +
          +

          + Using color to add meaning only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (e.g. the visible text), or is included through alternative means, such as additional text hidden with the .visually-hidden class. +

          +

          + Learn more about this component on bootstrap's + official documentation +

          +
          + +
          +
          +
          +
          +

          + Badge scaling +

          +
          + + + +
          +
          +
          +
          +
          + Badges scale to match the size of the immediate parent element by using relative font sizing and em units +
          +
          Badge Scaling Examples
          +
          +
          +

          Example heading New

          +

          Example heading New

          +

          Example heading New

          +

          Example heading New

          +
          Example heading New
          +
          Example heading New
          +
          +
          +
          +
          +
          +
          +
          +

          + Badge in buttons +

          +
          + + + +
          +
          +
          +
          +
          + Badges scale to match the size of the immediate parent element by using relative font sizing and em units +
          +
          + Regular buttons +
          +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          +
          + Outline buttons +
          +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          +
          +
          +
          + +
          +
          +

          + Status badges +

          +
          + + + +
          +
          +
          +
          +
          + These badges are unique and triggered by wrapping an element with .status class. Comes with three badge sizes .status-sm, .status-xs and the default .status. Comes in 3 colors, .status-danger, .status-warning, and .status-success +
          + +
          + + ... + + + ... + + + ... + + + ... + +
          + + +
          + + ... + + + ... + + + ... + + + ... + +
          + +
          + + ... + + + ... + + + ... + + + ... + +
          + + +
          +
          +
          +
          +
          +
          +
          +

          + Contextual variations +

          +
          + + + +
          +
          +
          +
          +
          + Add any of the below mentioned modifier classes to change the appearance of a badge. +
          +
          +
          + Primary + Secondary + Success + Danger + Warning + Info + Light + Dark +
          +
          +
          + Border utility +
          +
          +
          + Primary + Secondary + Success + Danger + Warning + Info + Light + Dark +
          +
          +
          +
          +
          +
          +
          +

          + Pill badges +

          +
          + + + +
          +
          +
          +
          +
          + Use the .badge-pill modifier class to make badges more rounded (with a larger border-radius and additional horizontal padding). +
          +
          +
          + Primary + Secondary + Success + Danger + Warning + Info + Light + Dark +
          +
          +
          +
          +
          +
          +
          +

          + Links example +

          +
          + + + +
          +
          +
          +
          +
          + Add .badge-* class on a hyperlink element to convert it to actionable badges with hover and focus states +
          + +
          +
          +
          +
          +
          +

          + Nested badge +

          +
          + + + +
          +
          +
          +
          +
          + Use the included color utilities to change background and text colors. Below are examples of nested badge with different background colors +
          +
          +
          + + + + + + Nested Badge 1 + + + + + + + + + + + + Nested Badge 2 + + + + + + + + + + + + 99+ + + + + + + +
          +
          +
          +
          +
          +
          +
          +

          + Badge header +

          +
          + + + +
          +
          +
          +
          +
          + We use .badge-icon with a combination of other utility classes to create a link badge. This class will auto turncate overflow giving you a nice clean look without any hassle +
          + + +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-breadcrumbs.html b/legacy/smartadmin/ui-breadcrumbs.html new file mode 100644 index 0000000..e70e84d --- /dev/null +++ b/legacy/smartadmin/ui-breadcrumbs.html @@ -0,0 +1,2452 @@ + + + + + + + + Breadcrumbs | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Breadcrumbs

          + + + + + + +
          Breadcrumbs are a way to navigate through a website.
          + + +
          + +
          +

          + Breadcrumbs are a way to navigate through a website. They are a series of links that are used to navigate through a website. They are a series of links that are used to navigate through a website. They are a series of links that are used to navigate through a website. +

          +

          + Learn more about this component on bootstrap's official documentation. +

          +
          + +
          + +
          + +
          +
          +

          + Default Breadcrumb +

          +
          + + + +
          +
          +
          +
          +
          + + + +
          +
          +
          +
          + +
          +
          +

          + Different Sizes +

          +
          + + + +
          +
          +
          +
          +
          + + + +
          +
          +
          +
          + +
          +
          +

          + Different Separators +

          +
          + + + +
          +
          +
          +
          +
          + + + +
          +
          +
          +
          + +
          +
          +

          + With Dropdown +

          +
          + + + +
          +
          + +
          + +
          +
          +

          + With Icons +

          +
          + + + +
          +
          +
          +
          + +
          +
          +
          +
          + +
          + +
          +
          +

          + Backgrounds Outlines +

          +
          + + + +
          +
          +
          +
          +
          + + + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Clean Style +

          +
          + + + +
          +
          +
          +
          +
          + + + +
          +
          +
          +
          + +
          +
          +

          + Other Styles +

          +
          + + + +
          +
          + +
          +
          + +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-buttongroup.html b/legacy/smartadmin/ui-buttongroup.html new file mode 100644 index 0000000..480ee71 --- /dev/null +++ b/legacy/smartadmin/ui-buttongroup.html @@ -0,0 +1,2083 @@ + + + + + + + + Button Group | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Button Group

          + + + + + + +
          Group a series of buttons together on a single line or stack them in a vertical column.
          + + +
          +
          +

          + The .btn styles can be applied to other elements, such as <label>s, to provide checkbox or radio style button toggling. Add data-bs-toggle="buttons" to a .btn-group containing those modified buttons to enable their toggling behavior via JavaScript. +

          +
          + +
          +
          + +
          +
          +

          Sizes example

          +
          + + + +
          +
          +
          +
          +
          + Instead of applying button sizing classes to every button in a group, just add .btn-group-* to each .btn-group, including each one when nesting multiple groups. +
          +
          +
          + + + +
          +
          +
          + + + +
          +
          +
          + + + +
          +
          +
          +
          +
          + + +
          +
          +

          Nesting example

          +
          + + + +
          +
          +
          +
          +
          + Place a .btn-group within another .btn-group when you want dropdown menus mixed with a series of buttons. +
          +
          + + +
          + + +
          +
          +
          +
          +
          + + +
          +
          +

          Vertical variation

          +
          + + + +
          +
          +
          +
          +
          + Make a set of buttons appear vertically stacked rather than horizontally using class .btn-group-vertical. Split button dropdowns are not supported here. +
          +
          + + +
          + + +
          + + +
          +
          +
          +
          +
          + +
          + +
          +
          +

          Checkbox and Radio buttons

          +
          + + + +
          +
          +
          +
          +
          + .button styles can be applied to other elements, such as s, to provide checkbox or radio style button toggling. Add data-toggle="buttons" to a .btn-group containing those modified buttons to enable their toggling behavior via JavaScript and add .btn-group-toggle to style the inputs within your buttons. Note that you can create single input-powered buttons or groups of them. +
          +
          + The checked state for these buttons is only updated via click event on the button. If you use another method to update the input—e.g., with input type="reset" or by manually applying the input’s checked property—you’ll need to toggle .active on the label manually. +
          +
          Checkbox
          +
          +
          + + + + + + + + +
          +
          + +
          Radio
          +
          +
          + + + + + + + + +
          +
          +
          +
          +
          + + +
          +
          +

          Toolbar example

          +
          + + + +
          +
          +
          +
          +
          + Combine sets of button groups into button toolbars for more complex components. Use utility classes as needed to space out groups, buttons, and more. +
          +
          +
          + + + + +
          +
          + + + + +
          +
          + + + + +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-buttons.html b/legacy/smartadmin/ui-buttons.html new file mode 100644 index 0000000..bb66d0b --- /dev/null +++ b/legacy/smartadmin/ui-buttons.html @@ -0,0 +1,2962 @@ + + + + + + + + Buttons | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Buttons

          + + + + + + +
          Use custom button styles for actions in forms, dialogs, and more. Includes support for a handful of contextual variations, sizes, states, and more.
          + + +
          + +
          +
          + +
          +
          +

          + Button Colors +

          +
          + + + +
          +
          +
          +
          +
          + SmartAdmin includes nine predefined button styles, each serving its own semantic purpose. +
          +
          + Default +
          +
          +
          + + + + + + + + +
          +
          +
          + Rounded +
          +
          +
          + + + + + + + + +
          +
          +
          + Unique style +
          +
          +
          + + +
          +
          +
          +
          +
          + +
          +
          +

          + Block Buttons +

          +
          + + + +
          +
          +
          +
          +
          + Create block level buttons—those that span the full width of a parent—by adding .btn-block +
          +
          +
          +
          +
          + + + + +
          +
          +
          +
          + + + + +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Option Sizes +

          +
          + + + +
          +
          +
          +
          +
          + Alter button sizes by using the classes .btn-lg, .btn-sm, .btn-xs +
          +
          + Largest size +
          +
          +
          + + + + + + + + +
          +
          +
          + Default size +
          +
          +
          + + + + + + + + +
          +
          +
          + Small size +
          +
          +
          + + + + + + + + +
          +
          +
          + Smallest size +
          +
          +
          + + + + + + + + +
          +
          + +
          +
          +
          + +
          +
          +

          + Button with Icons +

          +
          + + + +
          +
          +
          +
          +
          + We use the icon tags to insert icons into buttons +
          +
          + + + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Icons example +

          +
          + + + +
          +
          +
          +
          +
          + Convert button to an icon button by adding the class .btn-icon +
          +
          + Various sizes +
          + +
          + Rounded +
          + +
          + Hover dot effect +
          +
          +

          + + + + + + + + + +

          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Button Outlines +

          +
          + + + +
          +
          +
          +
          +
          + Replace the default modifier classes with.btn-outline-* +
          +
          + Outline +
          +
          +
          + + + + + + + + +
          +
          +
          + Rounded outline +
          +
          +
          + + + + + + + + +
          +
          +
          + Unique style +
          +
          +
          + + +
          +
          + +
          +
          +
          + +
          +
          +

          + Block Outlines +

          +
          + + + +
          +
          +
          +
          +
          + Block buttons inherits outline button properties .btn-outline-* +
          +
          +
          +
          +
          + + + + +
          +
          +
          +
          + + + + +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Option Sizes +

          +
          + + + +
          +
          +
          +
          +
          + Alter button sizes by using the classes .btn-lg, .btn-sm, .btn-xs +
          +
          + Largest size +
          +
          +

          + + + + + + + + +

          +
          +
          + Default size +
          +
          +

          + + + + + + + + +

          +
          +
          + Small size +
          +
          +

          + + + + + + + + +

          +
          +
          + Smallest size +
          +
          +

          + + + + + + + + +

          +
          +
          +
          +
          + +
          +
          +

          + Button with Icons +

          +
          + + + +
          +
          +
          +
          +
          + We use the icon tags to insert icons into buttons +
          +
          + + + + + + + + +
          +
          +
          +
          + +
          +
          +

          + Icon Outlined +

          +
          + + + +
          +
          +
          +
          +
          + Convert button to an icon button by adding the class .btn-icon +
          +
          + Various sizes +
          + +
          + Rounded outline +
          + +
          + Hover dot effect +
          +
          +

          + + + + + + + + + +

          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-cards.html b/legacy/smartadmin/ui-cards.html new file mode 100644 index 0000000..6367dda --- /dev/null +++ b/legacy/smartadmin/ui-cards.html @@ -0,0 +1,2658 @@ + + + + + + + + Cards | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Cards

          + + + + + + +
          Cards provide a flexible and extensible content container with multiple variants and options.
          + + +
          + +
          +
          +
          +
          +

          Cards are built with as little markup and styles as possible, but still manage to deliver a ton of control and customization. Built with flexbox, they offer easy alignment and mix well with other Bootstrap components. They have no margin by default, so use spacing utilities as needed. Although cards are a lightweight solution for 'widget' or 'panel', we recommend you check out SmartAdmin's panels page for further flexible and an alternative option.

          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Kitchen sink example +

          +
          + + + +
          +
          +
          +
          +
          + The most basic example of cards with enforced width +
          +
          + ... +
          +
          Card title
          +

          Some quick example text to build on the card title and make up the bulk of the card's content.

          + Go somewhere +
          +
            +
          • Cras justo odio
          • +
          • Dapibus ac facilisis in
          • +
          • Vestibulum at eros
          • +
          + +
          +
          +
          +
          + +
          +
          +

          + List group +

          +
          + + + +
          +
          +
          +
          +
          + Create lists of content in a card with a flush list group. +
          +
          +
          + Featured +
          +
            +
          • Cras justo odio
          • +
          • Dapibus ac facilisis in
          • +
          • Vestibulum at eros
          • +
          +
          +
          +
          +
          + +
          +
          +

          + Quote example +

          +
          + + + +
          +
          +
          +
          +
          + Here we adjust card-header padding using provided utility classes +
          +
          +
          +
          + Quote +
          +
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

          +
          Someone famous in Source Title
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Header and footer +

          +
          + + + +
          +
          +
          +
          +
          + Add an optional header and/or footer within a card. +
          +
          +
          + Featured +
          +
          +
          Special title treatment
          +

          With supporting text below as a natural lead-in to additional content.

          + Go somewhere +
          + +
          +
          +
          +
          + +
          +
          +

          + Background & Borders +

          +
          + + + +
          +
          +
          +
          +
          + .card-header, .card-body, and .card-footer background cam be changed using color and border utilities +
          + +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +
          + Different colors +
          +
          +
          +
          +
          + He system office. Of to wonder, windshield to seven. Whenever +
          SATURDAY, 27TH JANUARY 2018 15 minutes ago.
          +
          +
          Of totally to issues for to the decelerate city, the at how discharge than like…. It history; Their letters, away, the and stupid employees, divine them his a only live lobby, little regretting conduct, know out testimony the latest even and systematic be service, name of every accept bits turned.
          + In the a soon in facilitate reflections, he more had from preceding think the lay low the where initial feedback dropped at be its to in little instruments, of himself found phase they poverty disappointment is her and to thought, that the by is really chime in the of we sovereignty. On which, office. The that he each been ago she from these is name much phase. Counter-productive towards far and transmitting offers in of the with between was and over since failing. Slowly cheating far with gone in, irregular refute. No success six way differences authentic destined pass pouring. +
          +
          +
          + +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Collapse example +

          +
          + + + +
          +
          +
          +
          +
          + Utilizing bootstrap's collapse component with .card +
          +
          +
          + +
          +
          + +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Navigation tabs +

          +
          + + + +
          +
          +
          +
          +
          + Add some navigation to a card's header (or block) with built-in nav components. +
          +
          +
          + +
          +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          + +
          +
          +

          + Navigation pills +

          +
          + + + +
          +
          +
          +
          +
          + Add some navigation to a card's header (or block) with built-in nav components. +
          +
          +
          + +
          +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          + +
          +
          +

          + Header Options +

          +
          + + + +
          +
          +
          +
          +
          + Display of some example optional "stuff" you can add to .card-header +
          +
          +
          +
          +
          +
          Dropdowns
          + + +
          +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          Input
          +
          + + +
          +
          +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          +
          +
          Buttons
          +
          + + +
          +
          +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          Checkbox
          +
          + + +
          +
          +
          +

          With supporting text below as a natural lead-in to additional content.

          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Card Group +

          +
          + + + +
          +
          +
          +
          +
          + Use card groups to render cards as a single, attached element with equal width and height columns. Card groups use display: flex; to achieve their uniform sizing. +
          +
          +
          +
          +
          +
          Card title
          +

          This card has supporting text below as a natural lead-in to additional content.

          + Last updated 3 mins ago +
          +
          +
          +
          +
          +
          Card title
          +

          This card has supporting text below as a natural lead-in to additional content.

          + Last updated 3 mins ago +
          +
          +
          +
          +
          +
          Card title
          +

          This card has supporting text below as a natural lead-in to additional content.

          + Last updated 3 mins ago +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Card Decks +

          +
          + + + +
          +
          +
          +
          +
          + Need a set of equal width and height cards that aren't attached to one another? Use card decks. +
          +
          +
          +
          +
          +
          +
          Card title
          +

          This is a wider card with supporting text below as a natural lead-in to additional content.

          +
          + +
          +
          +
          +
          +
          +
          +
          Card title
          +

          This card has supporting text below as a natural lead-in to additional content.

          +
          + +
          +
          +
          +
          +
          +
          +
          Card title
          +

          This is a wider card with supporting text below as a natural lead-in to additional content.

          +
          + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          Card Columns

          +
          + + + +
          +
          +
          +
          +
          + Cards can be organized into Masonry-like columns with just CSS by wrapping them in .card-columns. Cards are built with CSS column properties instead of flexbox for easier alignment. Cards are ordered from top to bottom and left to right. +
          +
          + Heads up! Your mileage with card columns may vary. To prevent cards breaking across columns, we must set them to display: inline-block as column-break-inside: avoid isn't a bulletproof solution yet. +
          + +
          +
          +
          +
          +
          +
          Card title that wraps to a new line
          +

          This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

          +
          +
          +
          +
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

          +
          + Someone famous in Source Title +
          +
          +
          +
          +
          +
          +
          +
          +
          Card title
          +

          This card has supporting text below as a natural lead-in to additional content.

          +

          Last updated 3 mins ago

          +
          +
          +
          +
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat.

          +
          + Someone famous in Source Title +
          +
          +
          +
          +
          +
          +
          +
          Card title
          +

          This card has a regular title and short paragraphy of text below it.

          +

          Last updated 3 mins ago

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

          +
          + Someone famous in Source Title +
          +
          +
          +
          +
          +
          +
          +
          Card title
          +

          This is another card with title and supporting text below. This card has some additional content to make it slightly taller overall.

          +

          Last updated 3 mins ago

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-carousels.html b/legacy/smartadmin/ui-carousels.html new file mode 100644 index 0000000..422cb7e --- /dev/null +++ b/legacy/smartadmin/ui-carousels.html @@ -0,0 +1,2307 @@ + + + + + + + + Carousels | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Carousels

          + + + + + + +
          Bootstrap carousels are slideshow components that cycle through images or content with controls, indicators, and optional autoplay.
          + + +
          + +
          +
          +
          +

          The carousel is a slideshow for cycling through a series of content, built with CSS 3D transforms and a bit of JavaScript. It works with a series of images, text, or custom markup. It also includes support for previous/next controls and indicators.

          +
          +
          +
          + +
          +
          +

          + Kitchen sink example +

          +
          + + + +
          +
          +
          +
          +
          + Carousels don't automatically normalize slide dimensions. As such, you may need to use additional utilities or custom styles to appropriately size content. While carousels support previous/next controls and indicators, they're not explicitly required. Add and customize as you see fit. +
          +
          + The .active class needs to be added to one of the slides otherwise the carousel will not be visible. Also be sure to set a unique id on the .carousel for optional controls, especially if you're using multiple carousels on a single page. Control and indicator elements must have a data-target attribute (or href for links) that matches the id of the .carousel element. +
          + +
          +
          +
          +
          +
          + +
          +
          +

          + Slides only +

          +
          + + + +
          +
          +
          +
          +
          + Notice presence of the .d-block and .w-100 on carousel images +
          + +
          +
          +
          + +
          +
          +

          + Control example +

          +
          + + + +
          +
          +
          +
          +
          + Adding in previous and next controls +
          + + +
          +
          +
          + +
          +
          +

          + Interval example +

          +
          + + + +
          +
          +
          +
          +
          + Add data-interval="" to a .carousel-item to change the amount of time to delay between automatically cycling to the next item. E.g The first image will change after 10 seconds, the second one will change after 2 seconds, and the following will change as default settings. +
          + + +
          +
          +
          +
          +
          + +
          +
          +

          + Indicators example +

          +
          + + + +
          +
          +
          +
          +
          + You can also add the indicators to the carousel, alongside the controls, too +
          + + +
          +
          +
          + +
          +
          +

          + Crossfade example +

          +
          + + + +
          +
          +
          +
          +
          + Add .carousel-fade to your carousel to animate slides with a fade transition instead of a slide +
          + +
          +
          +
          + +
          +
          +

          + Add captions +

          +
          + + + +
          +
          +
          +
          +
          + Add captions to your slides easily with the .carousel-caption element within any .carousel-item. They can be easily hidden on smaller viewports, as shown below, with optional display utilities. We hide them initially with .d-none and bring them back on medium-sized devices with .d-md-block +
          + + + +
          +
          +
          +
          + + + + +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-collapse.html b/legacy/smartadmin/ui-collapse.html new file mode 100644 index 0000000..0764649 --- /dev/null +++ b/legacy/smartadmin/ui-collapse.html @@ -0,0 +1,2069 @@ + + + + + + + + Collapse | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + + +

          Collapse

          + + + + + + +
          Toggle the visibility of content across your project with a few classes.
          + + +
          + +
          +

          + The collapse JavaScript plugin is used to show and hide content. Buttons or anchors are used as + triggers that are mapped to specific elements you toggle. Collapsing an element will animate the + height from its current value to 0. Given how CSS handles animations, you cannot use padding on + a .collapse element. Instead, use the class as an independent wrapping element. +

          +

          + + Learn more about this component on bootstrap's official documentation. +

          +
          +
          + +
          +
          +
          +

          + Basic example +

          +
          + + + +
          +
          +
          +
          +
          + The most basic example of cards with enforced width +
          +

          Click the buttons below to show or hide elements using class changes:

          +
            +
          • .collapse hides content
          • +
          • .collapsing is applied during transitions
          • +
          • .collapse.show reveals content
          • +
          +

          You can use a link with the href attribute or a button with the data-bs-target attribute. In both cases, data-bs-toggle="collapse" is required.

          + +
          +

          + + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. +
          +
          +
          +
          +
          +
          +
          +
          +

          + Multiple Targets +

          +
          + + + +
          +
          +
          +
          +
          +

          A <button> or <a> can toggle multiple elements by + referencing them with a selector in its href or data-bs-target attribute. + Multiple <button> or <a> elements can control the same element if + they each reference it with href or data-bs-target.

          +
          +
          +

          + + + +

          +
          +
          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. +
          +
          +
          +
          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Accordion example +

          +
          + + + +
          +
          +
          +
          +
          +

          Add navigation to a card’s header (or body) using Bootstrap's built-in nav components. You can show or hide elements when a .collapse state changes using the .collapse-reveal and .collapse-hidden classes.

          + +

          Ensure that the .collapse-* classes are placed inside the element with data-bs-toggle="collapse" or adjacent to it for proper functionality.

          +
          +
          +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
          +
          +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
          +
          +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
          +
          +
          +
          +

          + +

          +
          +
          + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-dropdowns.html b/legacy/smartadmin/ui-dropdowns.html new file mode 100644 index 0000000..121f078 --- /dev/null +++ b/legacy/smartadmin/ui-dropdowns.html @@ -0,0 +1,3041 @@ + + + + + + + + Dropdowns | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Dropdowns

          + + + + + + +
          Toggle contextual overlays for displaying lists of links and more with the Bootstrap dropdown plugin.
          + + +
          + +
          +

          + Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is an intentional design decision. Dropdowns are built on a third party library, Popper.js, which provides dynamic positioning and viewport detection. +

          +

          + Find more facts and uses at the bootstrap official documentation. +

          +
          +
          +
          + + +
          +
          +

          + Kitchen Sink example +

          +
          + + + +
          +
          +
          +
          +
          + A composition of all working elements +
          + +
          +
          +
          + +
          +
          +

          + Links & buttons +

          +
          + + + +
          +
          +
          +
          +
          + Dropdown menus can be triggered from <a> or <button> elements to better fit your potential needs. +
          +
          + Button +
          +
          +
          +
          + + +
          + + + +
          +
          +
          + Link +
          + +
          +
          +
          + +
          +
          +

          + Dropdown buttons +

          +
          + + + +
          +
          +
          +
          +
          + Variations +
          + +
          + Split button +
          +
          +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          + + + +
          +
          +
          +
          +
          +
          + + +
          +
          +

          + Multilevel dropdown +

          +
          + + + +
          +
          +
          +
          +
          + Add multilevel menu by wrapping the child node selectors with .dropdown-multilevel, change direction of by adding .dropdown-multilevel-left (right by default) +
          +
          + + +
          +
          +
          +
          + +
          +
          +

          + Content types +

          +
          + + + +
          +
          +
          +
          +
          +
          + + +
          +
          + + +
          +
          +
          +
          +
          + + +
          +
          +

          + Sizing dropdowns +

          +
          + + + +
          +
          +
          +
          +
          + Button dropdowns work with buttons of all sizes, including default and split dropdown buttons +
          +
          +
          + + +
          +
          + + + +
          +
          +
          +
          + + +
          +
          + + + +
          +
          +
          +
          + + +
          +
          + + + +
          +
          +
          +
          + + +
          +
          + + + +
          +
          +
          +
          +
          + +
          +
          + +
          +
          +

          + No arrow +

          +
          + + + +
          +
          +
          +
          +
          + Remove directional arrow from dropdown button by adding .no-arrow to .dropdown-toggle +
          +
          + + +
          +
          +
          +
          + +
          +
          +

          + Animated dropdowns +

          +
          + + + +
          +
          +
          +
          +
          + Add animations to dropdowns by adding .dropdown-menu-animated, .fadeup, .fadedown, .faderight, .fadeleft to .dropdown-menu +
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          +
          +
          +
          + +
          +
          +

          + Directional Arrows +

          +
          + + + +
          +
          +
          +
          +
          + Trigger dropdown menus above elements by adding .dropup, .dropright, and .dropleft to the parent element. +
          +
          + Dropup +
          +
          +
          + +
          + + + +
          +
          +
          +
          + Dropend +
          +
          +
          + +
          + + + +
          +
          +
          +
          + Dropstart +
          +
          +
          +
          + + +
          +
          +
          + + +
          + +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Container examples +

          +
          + + + +
          +
          +
          +
          +
          + You can add any content to dropdown containers and change its width by adding the class .dropdown-sm, .dropdown-md, .dropdown-lg, and .dropdown-xl +
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          +
          +
          +
          + +
          +
          +

          + Headers examples +

          +
          + + + +
          +
          +
          +
          +
          + Customize .dropdown-header using utility classes. Change backgrounds, colors, and paddings using various helpers +
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          +
          +
          +
          + +
          +
          +

          + Responsive alignment +

          +
          + + + +
          +
          +
          +
          +
          + If you want to use responsive alignment, disable dynamic positioning by adding the data-display="static" attribute and use the responsive variation classes. To align left/right the dropdown menu with the given breakpoint or larger, add .dropdown-menu{-sm|-md|-lg|-xl}-right or .dropdown-menu{-sm|-md|-lg|-xl}-left +
          +
          + Left-aligned but right aligned when large screen +
          +
          +
          + + +
          +
          +
          + Right-aligned but left aligned when large screen +
          +
          +
          + + +
          +
          + +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-list-filter.html b/legacy/smartadmin/ui-list-filter.html new file mode 100644 index 0000000..08278cd --- /dev/null +++ b/legacy/smartadmin/ui-list-filter.html @@ -0,0 +1,1999 @@ + + + + + + + + List Filter | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Smart Filter

          + + + + + + +
          Advanced navigation filtering with fuzzy search capabilities.
          + + +
          +
          + + +
          +
          +
          +

          Did you mean suggestions

          +
          + + +
          +
          +
          +
          +
          + Try typing "javas" to see suggestions. + You can also finetune this for better suggestions via an separate json file. + Checkout this in the works in our Icon Filter page. +
          +
          + + + + + +
          + +
          +
          +
          +
          + + +
          +
          +
          +

          File Explorer with Nested Structure

          +
          + + +
          +
          +
          +
          +
          + Search through nested file structure with automatic parent folder expansion. Try typing partial words or misspelled terms (e.g., "btn" for "Button.js") +
          +
          + + + + + +
          + +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-modal.html b/legacy/smartadmin/ui-modal.html new file mode 100644 index 0000000..0e5ea3c --- /dev/null +++ b/legacy/smartadmin/ui-modal.html @@ -0,0 +1,2848 @@ + + + + + + + + Modal | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Modal

          + + + + + + +
          Modal dialogs for lightboxes, user notifications, or completely custom content
          + + +
          + +
          +

          Modals are built with HTML, CSS, and JavaScript. They're positioned over everything else in the document and remove + scroll from the body so that modal content scrolls instead. Bootstrap only supports one modal window + at a time. Nested modals aren't supported as it is believed to be poor user experiences. + Modals use position: fixed, which can sometimes be a bit particular about its rendering. + Whenever possible, place your modal HTML in a top-level position to avoid potential interference from other elements. + You'll likely run into issues when nesting a .modal within another fixed element

          +

          + Find in-depth, guidelines, tutorials and more on Bootstrap Modals's at the + official documentation. +

          +
          + +
          +
          + +
          +
          +

          + Basic Modals +

          +
          + + + +
          +
          +
          +
          +
          + Below is a static modal example (meaning its position and display have been overridden). Included are the modal header, modal body (required for padding), and modal footer (optional). We ask that you include modal headers with dismiss actions whenever possible, or provide another explicit dismiss action. +
          + + + + + + + + + + + + + + + + + + + +
          + Default +
          +
          +
          + + + + + + + + +
          +
          +
          + Centered +
          +
          +
          + + + + + + + + +
          +
          +
          +
          +
          + +
          +
          +

          + Side Modals +

          +
          + + + +
          +
          +
          +
          +
          + Modals can be positioned on different sides of the page using modifier classes like .modal-dialog-start, .modal-dialog-end, .modal-dialog-top, and .modal-dialog-bottom on .modal-dialog. These side modals also support size classes. +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + End +
          +
          +
          + + + + +
          +
          +
          + Start +
          +
          +
          + + + + +
          +
          +
          + Top & Bottom +
          +
          +
          + + +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Modifications for modals +

          +
          + + + +
          +
          +
          +
          +
          + Modal fullscreen uses combination of utility classes and the modifier class .modal-fullscreen. Using the modifer class .modal-backdrop-transparent makes the backdrop transparent. You can also translate the modals to cast as an alert by using the modifier class .modal-alert +
          + +
          + Fullscreen +
          +
          + +
          + + + +
          + Alert +
          +
          +
          + + +
          +
          + + + + + + + +
          + No backdrops +
          +
          + +
          + + + + +
          + Static backdrop +
          +
          + +
          + + + + +
          +
          +
          + +
          +
          +

          + Transparent Modal (Tinted) +

          +
          + + + +
          +
          +
          +
          +
          + Give modals a 'transparent tinted glass' feel using only utility classes. +
          + + + + + + + + + + + + +
          + Default +
          +
          +
          + + +
          +
          +
          + Start & End +
          +
          +
          + + +
          +
          +
          + Top & Bottom +
          +
          +
          + + +
          +
          +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-navbars.html b/legacy/smartadmin/ui-navbars.html new file mode 100644 index 0000000..667319b --- /dev/null +++ b/legacy/smartadmin/ui-navbars.html @@ -0,0 +1,2336 @@ + + + + + + + + Navbars | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Navbars

          + + + + + + +
          Documentation and examples for Bootstrap’s powerful, responsive navigation header, the navbar.
          + + +
          +
          +

          Navbars can be styled using Bootstrap classes, such as .navbar-light and .navbar-dark, to match different themes. Additionally, + Bootstrap allows toggling the navbar for mobile views, ensuring an optimal user experience. + + By utilizing built-in utilities like .fixed-top or .sticky-top, developers can create fixed or sticky navbars that remain visible while scrolling.

          + +

          + Learn more about this component on bootstrap's official documentation. +

          +
          +
          +
          +
          +
          +

          + Supported content +

          +
          + + + +
          +
          +
          +
          +
          +

          Navbars come with built-in support for a handful of sub-components. Choose from the following as needed:

          +
            +
          • .navbar-brand for your company, product, or project name.
          • +
          • .navbar-nav for a full-height and lightweight navigation (including support for dropdowns).
          • +
          • .navbar-toggler for use with our collapse plugin and other navigation toggling behaviors.
          • +
          • .form-inline for any form controls and actions.
          • +
          • .navbar-text for adding vertically centered strings of text.
          • +
          • .collapse.navbar-collapse for grouping and hiding navbar contents by a parent breakpoint.
          • +
          +
          + +
          +
          +
          +
          +
          +

          + Navbar Brand +

          +
          + + + +
          +
          +
          +
          +
          + The .navbar-brand can be applied to most elements, but an anchor works best as some elements might require utility classes or custom styles. +
          + +
          +
          +
          +
          +
          +

          + Navbar Links +

          +
          + + + +
          +
          +
          +
          +
          +

          Navbar navigation links build on our .nav options with their own modifier class and require the use of toggler classes for proper responsive styling. Navigation in navbars will also grow to occupy as much horizontal space as possible to keep your navbar contents securely aligned.

          +
          + +
          +
          +
          +
          +
          +

          + Navbar Links using utilities +

          +
          + + + +
          +
          +
          +
          +
          + Mix and match with other components and utilities as needed. +
          + +
          +
          +
          +
          +
          +
          +
          +

          + Color Variations +

          +
          + + + +
          +
          +
          +
          +
          + Change navbar colors with these utilities. Note that the .navbar-brand and .navbar-toggler will adapt to blend in with their container. +
          + + + + + + + + +
          +
          +
          +
          +
          +

          + Header position +

          +
          + + + +
          +
          +
          +
          +
          +

          Use position utilities to place navbars in non-static positions. Choose from fixed to the top, fixed to the bottom, or stickied to the top (scrolls with the page until it reaches the top, then stays there). Fixed navbars use position: fixed, meaning they're pulled from the normal flow of the DOM and may require custom CSS (e.g., padding-top on the <body>) to prevent overlap with other elements.

          + Also note that .sticky-top uses position: sticky, which isn't fully supported in every browser +
          +
          +
          + Sticky Element: Scroll Down to See the Effect + + Scroll down this page to see how sticky positioning works + +
          + + +
          +

          + SmartAdmin is a powerful, feature-rich admin template designed for developers who want to build professional and scalable dashboards. Unlike traditional admin panels, SmartAdmin provides a fully responsive, modern design with a clean UI, making it a perfect choice for applications that require a smooth user experience. +

          + +

          + One of SmartAdmin’s biggest advantages is its jQuery-free structure in the latest versions, making it future-proof and optimized for modern JavaScript frameworks like React, Vue, and Angular. This means developers can integrate it easily with their preferred stack without dealing with legacy dependencies. Additionally, it comes packed with ready-to-use components, such as form elements, charts, widgets, and pre-built pages, reducing development time. +

          + +

          + Another key feature of SmartAdmin is its modular architecture, allowing developers to customize and extend functionalities effortlessly. Whether you're building a simple dashboard or a complex enterprise solution, SmartAdmin's scalable design ensures that you can add new components without affecting performance. The template also includes a dark mode, which improves accessibility and enhances the user experience in different environments. +

          + +

          + Security is another major concern in web development, and SmartAdmin is built with best practices in mind. With role-based access control (RBAC), developers can define user permissions and restrict access to sensitive data. This is crucial for applications requiring different levels of authentication, such as admin panels, financial dashboards, and analytics tools. +

          + +

          + SmartAdmin is also well-documented and actively maintained, ensuring developers have access to updates, bug fixes, and new features. The template includes a detailed documentation guide, helping developers quickly integrate and customize it for their needs. Additionally, the SmartAdmin community is growing, offering support through forums, GitHub discussions, and dedicated customer service. +

          + +

          + Overall, SmartAdmin is an all-in-one solution for building modern, responsive, and scalable admin dashboards. With its clean design, lightweight architecture, and rich feature set, it’s an excellent choice for startups, enterprises, and developers looking for a robust UI framework. Whether you're working on a SaaS product, internal tool, or data-driven application, SmartAdmin provides everything you need to create a professional and efficient user interface. +

          + + + Learn More About SmartAdmin + +
          +
          +
          +
          +
          +
          +

          + Navbar Icons +

          +
          + + + +
          +
          +
          +
          +
          + Adding profile pictures and dropdowns to nav bars +
          + +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-pagination.html b/legacy/smartadmin/ui-pagination.html new file mode 100644 index 0000000..05bf394 --- /dev/null +++ b/legacy/smartadmin/ui-pagination.html @@ -0,0 +1,2274 @@ + + + + + + + + Pagination | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Pagination

          + + + + + + +
          Examples for showing pagination to indicate a series of related content exists across multiple pages.
          + + +
          + +
          +
          +
          +
          +

          + Basic example +

          +
          + + + +
          +
          +
          +
          +
          +

          We use a large block of connected links for our pagination, making links hard to miss and easily scalable—all while providing large hit areas. Pagination is built with list HTML elements so screen readers can announce the number of available links. Use a wrapping <nav> element to identify it as a navigation section to screen readers and other assistive technologies.

          +

          In addition, as pages likely have more than one such navigation section, it's advisable to provide a descriptive aria-label for the <nav> to reflect its purpose. For example, if the pagination component is used to navigate between a set of search results, an appropriate label could be aria-label="Search results pages".

          +
          + +
          +
          +
          +
          +
          +

          + Different states +

          +
          + + + +
          +
          +
          +
          +
          +

          Pagination links are customizable for different circumstances. Use .disabled for links that appear un-clickable and .active to indicate the current page.

          +

          While the .disabled class uses pointer-events: none to try to disable the link functionality of <a>s, that CSS property is not yet standardized and doesn't account for keyboard navigation. As such, you should always add tabindex="-1" on disabled links and use custom JavaScript to fully disable their functionality.

          +
          + +
          +

          You can optionally swap out active or disabled anchors for <span>, or omit the anchor in the case of the prev/next arrows, to remove click functionality and prevent keyboard focus while retaining intended styles.

          + +
          +
          +
          +
          +
          +

          + Using icons +

          +
          + + + +
          +
          +
          +
          +
          + Looking to use an icon or symbol in place of text for some pagination links? Be sure to provide proper screen reader support with aria attributes. +
          +
          +
          + +
          +
          + +
          +
          + +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Pagination sizing +

          +
          + + + +
          +
          +
          +
          +
          +

          Fancy larger or smaller pagination? Add .pagination-lg or .pagination-sm for additional sizes.

          +
          +
          + Large +
          +
          + +
          +
          + Default +
          +
          + +
          +
          + Small +
          +
          + +
          +
          + Extra Small +
          +
          + +
          +
          +
          +
          +
          +
          +

          + Aligning pagination +

          +
          + + + +
          +
          +
          +
          +
          + With left being default, you may change the alignment of pagination components with flexbox utilities. +
          +
          + Default +
          +
          + +
          +
          + Center +
          +
          + +
          +
          + Right +
          +
          + +
          +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-panels.html b/legacy/smartadmin/ui-panels.html new file mode 100644 index 0000000..4284f8d --- /dev/null +++ b/legacy/smartadmin/ui-panels.html @@ -0,0 +1,2501 @@ + + + + + + + + Panels | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Panels

          + + + + + + +
          Panels can be used in almost any situation, helping wrap everything in a slick & lightweight container.
          + + +
          +
          +

          + Display data, tables, forms, or images effortlessly with our lightweight, clean, and highly customizable panels. + Expand to fullscreen, collapse, or close as needed. Equiped with many interactive features, a versatile design, these panels adapt to your workflow seamlessly. + Auto-save keeps your layout intact, while SortableJS lets you drag and organize panels seamlessly. + Need to print? Just switch to fullscreen for a perfect view. All panels can be reset to their default state by clicking the button below. +

          +

          + +

          +
          +
          +
          + +
          +
          +

          + Blank Panel +

          +
          +
          +
          +
          + All panels needs to have an unique ID in order to use the panel sorting funtions. +
          +

          Panel content goes here...

          +
          +
          +
          + +
          +
          +

          + Collapsed Panel +

          +
          + +
          +
          +
          +
          +
          + This panel is closed by default. To close a panel we add the class .panel-collapsed to .panel +
          +

          + Default panel text. +

          +
          +
          +
          + +
          +
          +

          + Collapsable Panel +

          +
          + +
          +
          +
          +
          +
          + Panel is closed by using the attribute data-action="panel-collapse", and can be placed anywhere inside .panel +
          +

          + You can also place the collapse action inside the .panel-content as button or link +

          + + collapse link +
          +
          +
          + +
          +
          +

          + Fullscreen Panel +

          +
          + +
          +
          +
          +
          +
          + Panel is closed by using the attribute data-action="panel-fullscreen", and can be placed anywhere inside .panel +
          +

          + You can also place the collapse action inside the .panel-content as button or link +

          + + fullscreen link +
          +
          +
          + +
          +
          +

          + Close Panel +

          +
          + +
          +
          +
          +
          +
          + Panel is closed by using the attribute data-action="panel-close", and can be placed anywhere inside .panel +
          +

          + You can also place the collapse action inside the .panel-content as button or link +

          + + close link +
          +
          +
          + +
          +
          +

          + Panel Colors +

          +
          +
          +
          +
          +
          +
          + You can mix and match any color styles, below is what we were found to be an interesting match. +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + +
          + +
          +
          +
          + +
          +
          +

          + Master Button +

          + +
          + +
          + +
          + + + +
          +
          +
          +
          +
          + The .btn-toolbar-master class enhances .panel-toolbar by integrating dropdown functionality and additional actions while optimizing space. + It supports icons, grouped actions, submenus, and input fields, making panels more interactive and organized. +
          +
          + +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Label Panel + + + sup + + +

          +
          +
          + + Panel Badge + +
          +
          +
          +
          +
          +
          + You may place badge inside .panel-toolbar, .panel-content and .panel-hdr. + Check out the badges page to learn more about badges +
          +
          + +
          + + Footer badge + + + Pill badge + + + 1 + + + 22 + +
          +
          +
          + +
          +
          +

          + Form elements +

          +
          +
          + + +
          +
          +
          +
          +
          +
          + You can add form elements to .panel-hdr and any other parts of the .panel +
          +
          +
          +
          + +
          +
          +
          +
          + +
          +
          +

          + Form Inputs +

          +
          + +
          + + + + +
          +
          +
          +
          +
          +
          + You can add form inputs to .panel-hdr with moderation. Adding too many elements may break the design on mobile viewport +
          +
          +
          +
          + +
          +
          +

          + Panel Buttons +

          +
          +
          + + + +
          +
          +
          +
          +
          +
          + Add panel buttons to .panel-hdr and footer area. Keep in mind of your panel title size as distortion can occur with too many buttons overflowing. +
          +
          +
          + +
          +
          +
          + +
          +
          +

          + Panel Tabs +

          +
          + +
          +
          +
          +
          +
          +

          You can easily add .nav-tabs to .panel-hdr, consider adding dropdown panel button if you have a lot of panel tabs. Check out the Tabs & pills page for more details

          +
          + +
          + + + + + +
          +
          +
          +
          + +
          +
          +

          + Panel Locked +

          +
          +
          +
          + +
          This panel is locked from drag and drop. We use the class .panel-locked to lock the panel. Go ahead and try to drag it, it won't budge!
          + + Reset panel will also unlock the panel. +
          +
          +
          + +
          +
          +

          + + + + Insert Icon +

          +
          +
          +
          75%
          +
          +
          + +
          +
          +
          +
          + Insert sleek icons—with over 2,500 options to choose from—and dynamic progress bars to bring your panel to life, making data clearer, faster, and more engaging than ever! + You can also add stylish progress bars to enhance your design. +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Classic Icons +

          +
          + + + +
          +
          +
          +
          +
          + Looking for a less cluttered panel? Add .panel-icon class to your .panel to remove panel buttons and keep only the icons. +
          + +
          +
          +
          + +
          +
          +

          + Panel Refresh +

          +
          + +
          +
          +
          +
          +
          + Refresh panels with a simple button. Use the data-action="panel-refresh" to activate the refresh feature. The data-refresh-duration attribute sets the refresh interval and the data-refresh-callback="functionName" attribute sets the callback function. +
          +
          + Random Colorful Bar Graph +
          +
          + + +
          +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-popovers.html b/legacy/smartadmin/ui-popovers.html new file mode 100644 index 0000000..83ccb90 --- /dev/null +++ b/legacy/smartadmin/ui-popovers.html @@ -0,0 +1,2235 @@ + + + + + + + + Popovers | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Popovers

          + + + + + + +
          Bootstrap popovers are interactive, dismissible overlays that provide additional content when users click or hover over an element.
          + + +
          + +
          +
          +
          +
          +

          + Basic Popover +

          +
          + + + +
          +
          +
          +
          +
          + Minimalistic popover with no content - just title +
          + +
          +
          +
          +
          +
          +

          + Popover Content +

          +
          + + + +
          +
          +
          +
          +
          +

          Default content value if data-content={string|element|function} attribute isn't present.

          +

          If a function is given, it will be called with its this reference set to the element that the popover is attached to.

          +
          + +
          +
          +
          +
          +
          +

          + Popover Animation +

          +
          + + + +
          +
          +
          +
          +
          + Disable the CSS fade transition to the popover using attribute data-bs-animation="false" +
          + + + +
          +
          +
          +
          +
          +

          + Popover Title +

          +
          + + + +
          +
          +
          +
          +
          +

          Default title value if title attribute isn't present.

          +

          If a function is given, it will be called with its this reference set to the element that the popover is attached to.

          +
          + +
          +
          +
          +
          +
          +

          + Popover Container +

          +
          + + + +
          +
          +
          +
          +
          + Appends the popover to a specific element. Example: container: 'body'. This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize +
          +
          + + + + hide container + +
          +
          + The popover is nested inside this container but displayed on the element above. Once this container is hidden the popover will not be visible. Try hiding this container by pressing the "hide" button above +
          +
          +
          +
          +
          +
          +
          +
          +

          + Delayed Popover +

          +
          + + + +
          +
          +
          +
          +
          +

          Delay showing and hiding the popover (ms) - does not apply to manual trigger type. If a number is supplied, delay is applied to both hide/show

          +

          Object structure is: delay: { "show": 500, "hide": 100 }

          +
          + +
          +
          +
          +
          +
          +

          + Popover Placement +

          +
          + + + +
          +
          +
          +
          +
          +

          Four options are available: top, right, bottom, and left. Directions are mirrored when using Bootstrap in RTL. Set data-bs-placement to change the direction.

          +
          +
          + + + + + +
          +
          +
          +
          +
          +
          +

          + Popover Triggers +

          +
          + + + +
          +
          +
          +
          +
          + How popover is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space. manual cannot be combined with any other trigger. +
          +
          + + + +
          +
          +
          +
          +
          +
          +

          + Popover Template +

          +
          + + + +
          +
          +
          +
          +
          +

          Base HTML to use when creating a popover in Bootstrap 5. The popover's title is injected into an element with the .popover-header class, and the content is injected into an element with the .popover-body class. The popover includes an .arrow element for the pointer. The outermost wrapper of the popover must have the .popover class, and it is automatically generated by Bootstrap's JavaScript when initializing a popover.

          +
          +
          + + + + + + + + + +
          +
          +
          +
          +
          +
          +

          + Dismissable Popover +

          +
          + + + +
          +
          +
          +
          +
          + Use the focus trigger to dismiss popovers on the user’s next click of an element other than the toggle element. + Dismissing on next click requires specific HTML for proper cross-browser and cross-platform behavior. +
          + +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-progressbars.html b/legacy/smartadmin/ui-progressbars.html new file mode 100644 index 0000000..c5936b3 --- /dev/null +++ b/legacy/smartadmin/ui-progressbars.html @@ -0,0 +1,2191 @@ + + + + + + + + Progressbars | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Progressbars

          + + + + + + +
          Bootstrap progress bars visually represent the completion status of a task, with customizable colors, labels, and animated stripes.
          + + +
          + +
          +

          Progress components are built with two HTML elements, some CSS to set the width, and a few attributes. + We don’t use the HTML5 + <progress> element, ensuring you can stack progress bars, animate them, and place text + labels over them.

          +
          + +
          +
          + +
          +
          +

          + Default Progressbar +

          +
          + + + +
          +
          +
          +
          +
          + The .progress is a wrapper to indicate the max value of the progress bar. We use the inner .progress-bar to indicate the progress so far. The .progress-bar requires an inline style, utility class, or custom CSS to set their width. You can add some role and aria attributes to make it accessible. +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Various height +

          +
          + + + +
          +
          +
          +
          +
          + Control the height by adding style height:"value" to .progress element or you could use the prebuilt classes for a more uniform structure, .progress-xs, .progress-sm, .progress-md, .progress-lg, .progress-xl +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Label display +

          +
          + + + +
          +
          +
          +
          +
          + Add labels to your progress bars by placing text within the .progress-bar +
          +
          +
          25%
          +
          +
          +
          +
          + +
          +
          +

          + Solid backgrounds +

          +
          + + + +
          +
          +
          +
          +
          + Control the background by adding avaialble color pallets to .progress class +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Multiple bars +

          +
          + + + +
          +
          +
          +
          +
          + Include multiple progress bars in a progress component if you need +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Gradient backgrounds +

          +
          + + + +
          +
          +
          +
          +
          + Control the background by adding avaialble color pallets to .progress class +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Striped backrounds +

          +
          + + + +
          +
          +
          +
          +
          + Add .progress-bar-striped to any .progress-bar to apply a stripe via CSS gradient over the progress bar’s background color +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Animated bars +

          +
          + + + +
          +
          +
          +
          +
          + The striped gradient can also be animated. Add .progress-bar-animated to .progress-bar to animate the stripes right to left via CSS3 animations. +
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-scrollspy.html b/legacy/smartadmin/ui-scrollspy.html new file mode 100644 index 0000000..2827ca2 --- /dev/null +++ b/legacy/smartadmin/ui-scrollspy.html @@ -0,0 +1,2045 @@ + + + + + + + + Scrollspy | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Scrollspy

          + + + + + + +
          Automatically update navigation or list group components based on scroll position.
          + + +
          +
          +
          +
          +
          +

          + Navbar example +

          +
          + + + +
          +
          +
          +
          +
          + Scroll the area below the navbar and watch the active class change +
          +
          +
          + +
          +

          @fat

          +

          Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

          +

          Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. +

          + +

          @mdo

          +

          Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

          +

          Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. +

          +

          one

          +

          Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.

          +

          Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

          +

          Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. +

          +

          two

          +

          In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.

          +

          three

          +

          Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.

          +

          Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. +

          +
          +
          +
          +
          +
          +
          +
          +
          +

          + List-group example +

          +
          + + + +
          +
          +
          +
          +
          + Scrollspy also works with .list-groups. Scroll the area next to the list group and watch the active class change. +
          +
          +
          +
          +
          + +
          +
          +
          +

          Item 1

          +

          Ex consequat commodo adipisicing exercitation aute excepteur occaecat ullamco duis aliqua id magna ullamco eu. Do aute ipsum ipsum ullamco cillum consectetur ut et aute consectetur labore. Fugiat laborum incididunt tempor eu consequat enim dolore proident. Qui laborum do non excepteur nulla magna eiusmod consectetur in. Aliqua et aliqua officia quis et incididunt voluptate non anim reprehenderit adipisicing dolore ut consequat deserunt mollit dolore. Aliquip nulla enim veniam non fugiat id cupidatat nulla elit cupidatat commodo velit ut eiusmod cupidatat elit dolore.

          +

          Item 2

          +

          Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum consequat non elit enim exercitation cillum aliqua consequat id aliqua. Esse ex consectetur mollit voluptate est in duis laboris ad sit ipsum anim Lorem. Incididunt veniam velit elit elit veniam Lorem aliqua quis ullamco deserunt sit enim elit aliqua esse irure. Laborum nisi sit est tempor laborum mollit labore officia laborum excepteur commodo non commodo dolor excepteur commodo. Ipsum fugiat ex est consectetur ipsum commodo tempor sunt in proident.

          +

          Item 3

          +

          Quis anim sit do amet fugiat dolor velit sit ea ea do reprehenderit culpa duis. Nostrud aliqua ipsum fugiat minim proident occaecat excepteur aliquip culpa aute tempor reprehenderit. Deserunt tempor mollit elit ex pariatur dolore velit fugiat mollit culpa irure ullamco est ex ullamco excepteur.

          +

          Item 4

          +

          Quis anim sit do amet fugiat dolor velit sit ea ea do reprehenderit culpa duis. Nostrud aliqua ipsum fugiat minim proident occaecat excepteur aliquip culpa aute tempor reprehenderit. Deserunt tempor mollit elit ex pariatur dolore velit fugiat mollit culpa irure ullamco est ex ullamco excepteur.

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Nested example +

          +
          + + + +
          +
          +
          +
          +
          + Scrollspy also works with nested .navs. If a nested .nav is .active, its parents will also be .active. Scroll the area next to the navbar and watch the active class change +
          +
          +
          +
          +
          + +
          +
          +
          + +
          +

          Hello, world!

          +

          This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.

          +
          +

          Item 1

          +

          Ex consequat commodo adipisicing exercitation aute excepteur occaecat ullamco duis aliqua id magna ullamco eu. Do aute ipsum ipsum ullamco cillum consectetur ut et aute consectetur labore. Fugiat laborum incididunt tempor eu consequat enim dolore proident. Qui laborum do non excepteur nulla magna eiusmod consectetur in. Aliqua et aliqua officia quis et incididunt voluptate non anim reprehenderit adipisicing dolore ut consequat deserunt mollit dolore. Aliquip nulla enim veniam non fugiat id cupidatat nulla elit cupidatat commodo velit ut eiusmod cupidatat elit dolore.

          +

          Item 1-1

          +

          Amet tempor mollit aliquip pariatur excepteur commodo do ea cillum commodo Lorem et occaecat elit qui et. Aliquip labore ex ex esse voluptate occaecat Lorem ullamco deserunt. Aliqua cillum excepteur irure consequat id quis ea. Sit proident ullamco aute magna pariatur nostrud labore. Reprehenderit aliqua commodo eiusmod aliquip est do duis amet proident magna consectetur consequat eu commodo fugiat non quis. Enim aliquip exercitation ullamco adipisicing voluptate excepteur minim exercitation minim minim commodo adipisicing exercitation officia nisi adipisicing. Anim id duis qui consequat labore adipisicing sint dolor elit cillum anim et fugiat.

          +

          Item 1-2

          +

          Cillum nisi deserunt magna eiusmod qui eiusmod velit voluptate pariatur laborum sunt enim. Irure laboris mollit consequat incididunt sint et culpa culpa incididunt adipisicing magna magna occaecat. Nulla ipsum cillum eiusmod sint elit excepteur ea labore enim consectetur in labore anim. Proident ullamco ipsum esse elit ut Lorem eiusmod dolor et eiusmod. Anim occaecat nulla in non consequat eiusmod velit incididunt.

          +

          Item 2

          +

          Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum consequat non elit enim exercitation cillum aliqua consequat id aliqua. Esse ex consectetur mollit voluptate est in duis laboris ad sit ipsum anim Lorem. Incididunt veniam velit elit elit veniam Lorem aliqua quis ullamco deserunt sit enim elit aliqua esse irure. Laborum nisi sit est tempor laborum mollit labore officia laborum excepteur commodo non commodo dolor excepteur commodo. Ipsum fugiat ex est consectetur ipsum commodo tempor sunt in proident.

          +

          Ex consequat commodo adipisicing exercitation aute excepteur occaecat ullamco duis aliqua id magna ullamco eu. Do aute ipsum ipsum ullamco cillum consectetur ut et aute consectetur labore. Fugiat laborum incididunt tempor eu consequat enim dolore proident. Qui laborum do non excepteur nulla magna eiusmod consectetur in. Aliqua et aliqua officia quis et incididunt voluptate non anim reprehenderit adipisicing dolore ut consequat deserunt mollit dolore. Aliquip nulla enim veniam non fugiat id cupidatat nulla elit cupidatat commodo velit ut eiusmod cupidatat elit dolore.

          +

          Item 3

          +

          Quis anim sit do amet fugiat dolor velit sit ea ea do reprehenderit culpa duis. Nostrud aliqua ipsum fugiat minim proident occaecat excepteur aliquip culpa aute tempor reprehenderit. Deserunt tempor mollit elit ex pariatur dolore velit fugiat mollit culpa irure ullamco est ex ullamco excepteur.

          +

          Ex consequat commodo adipisicing exercitation aute excepteur occaecat ullamco duis aliqua id magna ullamco eu. Do aute ipsum ipsum ullamco cillum consectetur ut et aute consectetur labore. Fugiat laborum incididunt tempor eu consequat enim dolore proident. Qui laborum do non excepteur nulla magna eiusmod consectetur in. Aliqua et aliqua officia quis et incididunt voluptate non anim reprehenderit adipisicing dolore ut consequat deserunt mollit dolore. Aliquip nulla enim veniam non fugiat id cupidatat nulla elit cupidatat commodo velit ut eiusmod cupidatat elit dolore.

          +

          Item 3-1

          +
          + +
          +

          Deserunt quis elit Lorem eiusmod amet enim enim amet minim Lorem proident nostrud. Ea id dolore anim exercitation aute fugiat labore voluptate cillum do laboris labore. Ex velit exercitation nisi enim labore reprehenderit labore nostrud ut ut. Esse officia sunt duis aliquip ullamco tempor eiusmod deserunt irure nostrud irure. Ullamco proident veniam laboris ea consectetur magna sunt ex exercitation aliquip minim enim culpa occaecat exercitation. Est tempor excepteur aliquip laborum consequat do deserunt laborum esse eiusmod irure proident ipsum esse qui.

          +

          Deserunt quis elit Lorem eiusmod amet enim enim amet minim Lorem proident nostrud. Ea id dolore anim exercitation aute fugiat labore voluptate cillum do laboris labore. Ex velit exercitation nisi enim labore reprehenderit labore nostrud ut ut. Esse officia sunt duis aliquip ullamco tempor eiusmod deserunt irure nostrud irure. Ullamco proident veniam laboris ea consectetur magna sunt ex exercitation aliquip minim enim culpa occaecat exercitation. Est tempor excepteur aliquip laborum consequat do deserunt laborum esse eiusmod irure proident ipsum esse qui.

          +

          Item 3-2

          +

          Labore sit culpa commodo elit adipisicing sit aliquip elit proident voluptate minim mollit nostrud aute reprehenderit do. Mollit excepteur eu Lorem ipsum anim commodo sint labore Lorem in exercitation velit incididunt. Occaecat consectetur nisi in occaecat proident minim enim sunt reprehenderit exercitation cupidatat et do officia. Aliquip consequat ad labore labore mollit ut amet. Sit pariatur tempor proident in veniam culpa aliqua excepteur elit magna fugiat eiusmod amet officia.

          +

          Labore sit culpa commodo elit adipisicing sit aliquip elit proident voluptate minim mollit nostrud aute reprehenderit do. Mollit excepteur eu Lorem ipsum anim commodo sint labore Lorem in exercitation velit incididunt. Occaecat consectetur nisi in occaecat proident minim enim sunt reprehenderit exercitation cupidatat et do officia. Aliquip consequat ad labore labore mollit ut amet. Sit pariatur tempor proident in veniam culpa aliqua excepteur elit magna fugiat eiusmod amet officia.

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-sidepanels.html b/legacy/smartadmin/ui-sidepanels.html new file mode 100644 index 0000000..c834020 --- /dev/null +++ b/legacy/smartadmin/ui-sidepanels.html @@ -0,0 +1,1887 @@ + + + + + + + + Side Panels | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Side Panels

          + + + + + + +
          These side panels slide out on mobile viewports and can be toggled using a button in slide in/out mode.
          + + +
          +

          + Tip: Control the width of the side panel by setting the --sidepanel-width variable in the _sidepanels.scss file, or by using the + style="--sidepanel-width: 20rem;" attribute on the .slide-on-mobile element. +

          +
          +
          + +
          + +
          +
          + These side panels slide out on mobile view port and can be activated by a button as an "slide in/out" mode. +
          +
          + +
          + +
          +
          +
          +
          +
          + These buttons below can be placed anywhere on your screen. Applying the responsive utility classes, you control the visibility of the buttons, for only when they are needed. +
          +
          + + +
          +
          +

          + These side panels slide out on mobile viewports and can be toggled using a button in "slide in/out" mode. + To enable this functionality, apply the .slide-on-mobile class along with .slide-on-mobile-{left,right} to the panels. + When activated, the .slide-on-mobile-{left,right}-show class is toggled to reveal the panel. +

          +

          + A backdrop is automatically inserted right after the closing tag of the .slide-on-mobile container. Typically, this slide + panel is paired with .layout-trimmed and .set-nav-minified for a clean and streamlined appearance. +

          +
          + + +
          + Side Panel Demo Animation +
          +
          +
          + + +
          +
          + You can place any content in these side panels, making it a secondary optional navigation panel. +
          +
          + +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-spinners.html b/legacy/smartadmin/ui-spinners.html new file mode 100644 index 0000000..caa8fda --- /dev/null +++ b/legacy/smartadmin/ui-spinners.html @@ -0,0 +1,2429 @@ + + + + + + + + Spinners | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Spinners

          + + + + + + +
          Bootstrap spinners are animated loading indicators used to show that a process is ongoing, available in various styles and sizes.
          + + +
          + +
          + CSS "spinners" can be used to show the loading state in your projects. They're built only with HTML and CSS, + meaning you don't need any JavaScript to create them. You will, however, need some custom JavaScript to toggle + their visibility. Their appearance, alignment, and sizing can be easily customized with our amazing utility classes. +
          + +
          +
          +
          +
          +

          + Border spinner +

          +
          + + + +
          +
          +
          +
          +
          + Use the border spinners for a lightweight loading indicator +
          +
          + Loading... +
          +
          +
          +
          +
          +
          +

          + Color spinners +

          +
          + + + +
          +
          +
          +
          +
          + The border spinner uses currentColor for its border-color, meaning you can customize the color with text color utilities. You can use any of our text color utilities on the standard spinner +
          +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          +
          +
          +
          +
          +
          +

          + Spinner Alignment +

          +
          + + + +
          +
          +
          +
          +
          + +
          +
          + Flex +
          +
          +
          +
          +
          + Loading... +
          +
          +
          +
          +
          + Float +
          +
          +
          +
          + Loading... + +
          +
          +
          +
          + Text align +
          +
          +
          +
          +
          + Loading... +
          +
          +
          +
          + +
          +
          +
          +
          +
          +

          + Spinner sizes +

          +
          + + + +
          +
          +
          +
          +
          + Add .spinner-border-sm to make a smaller spinner that can quickly be used within other components. Or, use custom CSS or inline styles to change the dimensions as needed. +
          +
          + +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + +
          +
          +
          +
          +
          +

          + Shape changes +

          +
          + + + +
          +
          +
          +
          +
          + Change the shape of your spinner using border utilities +
          +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + +
          +
          +
          +
          +
          +

          + Spinner nested +

          +
          + + + +
          +
          +
          +
          +
          + Use spinners within buttons to indicate an action is currently processing or taking place. You may also swap the text out of the spinner element and utilize button text as needed. +
          +
          + + + + +
          +
          +
          +
          +
          +
          +
          +
          +

          + Growing spinner +

          +
          + + + +
          +
          +
          +
          +
          + If you don't fancy a border spinner, switch to the grow spinner +
          +
          + Loading... +
          +
          +
          +
          +
          +
          +

          + Growing spinner colors +

          +
          + + + +
          +
          +
          +
          +
          + Once again, this spinner is built with currentColor, so you can easily change its appearance with text color utilities +
          +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          +
          +
          +
          +
          +
          +

          + Growing spinner alignment +

          +
          + + + +
          +
          +
          +
          +
          + +
          +
          + Flex +
          +
          +
          +
          +
          + Loading... +
          +
          +
          +
          +
          + Float +
          +
          +
          +
          + Loading... + +
          +
          +
          +
          + Text align +
          +
          +
          +
          +
          + Loading... +
          +
          +
          +
          + +
          +
          +
          +
          +
          +

          + Growing spinner sizes +

          +
          + + + +
          +
          +
          +
          +
          + Add .spinner-grow-sm to make a smaller spinner that can quickly be used within other components. Or, use custom CSS or inline styles to change the dimensions as needed. +
          +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + +
          +
          +
          +
          +
          +

          + Shape shifting +

          +
          + + + +
          +
          +
          +
          +
          + Change the shape of your growing spinner using border utilities +
          +
          +
          + Loading... +
          +
          + Loading... +
          +
          + Loading... +
          +
          + +
          +
          +
          +
          +
          +

          + Growing spinner nested +

          +
          + + + +
          +
          +
          +
          +
          + Use spinners within buttons to indicate an action is currently processing or taking place. You may also swap the text out of the spinner element and utilize button text as needed. +
          +
          + + + + +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-tabs-pills.html b/legacy/smartadmin/ui-tabs-pills.html new file mode 100644 index 0000000..09ca8df --- /dev/null +++ b/legacy/smartadmin/ui-tabs-pills.html @@ -0,0 +1,2619 @@ + + + + + + + + Tabs & Pills | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Tabs & Pills

          + + + + + + +
          Takes the basic nav from above and adds the .nav-tabs class to generate a tabbed interface. Use them to create tabbable regions with our tab JavaScript plugin.
          + + +
          +
          +

          + Tabs and pills are UI components that allow users to navigate between different sections of content without leaving the current page. They enhance user experience by organizing information in a compact and accessible manner, making it easier to switch between related content areas. This interface is particularly useful for displaying content that is closely related but requires separation for clarity. +

          +

          + Learn more about this component on bootstrap's official documentation. +

          +
          +
          +
          + +
          +
          +

          + Default Tabs +

          +
          + + + +
          +
          +
          +
          +
          + The most minimalistic approach to tabs. We add .nav.nav-tabs to an UL and .tab-content to adjacet element. Tabs are triggered by the data attribute data-toggle="tab" and href="#tab_content" you will link the tab you would like to display +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +

          + Tab sizes +

          +
          + + + +
          +
          +
          +
          +
          + Tabs are flexible and can be resized using the utility classes +
          + +
          +
          +
          +
          +
          +

          + Directional tabs +

          +
          + + + +
          +
          +
          +
          +
          + Direction of the tabs can be changed by adding .justify-content-end and justify-content-center to .nav.nav-tabs +
          +
          +
          + + + + + + + + +
          +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +

          + Justified tabs +

          +
          + + + +
          +
          +
          +
          +
          + For equal-width elements, use .nav-justified. All horizontal space will be occupied by nav links +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +

          + Borders & icons +

          +
          + + + +
          +
          +
          +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +

          + Default Panel +

          +
          + + + +
          +
          +
          +
          +
          + Add a clean look to your tabs by adding .nav-tabs-clean to .nav-tabs +
          + + +
          +
          Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone.
          +
          Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic.
          +
          Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork.
          +
          + +
          +
          +
          +
          +
          +
          +
          +

          + Default Pills +

          +
          + + + +
          +
          +
          +
          +
          + The nav pills is the same HTML structure as tabs, but we replace .nav-tabs with .nav-pills +
          + +
          + + + +
          +
          +
          +
          +
          +
          +

          + Pills as nav +

          +
          + + + +
          +
          +
          +
          +
          + We can display nav pills inside the nav HTML element, which then allows you to inherit properties of buttons, various sizes and different colors +
          + +
          +
          +
          +
          +
          +

          + Directional pills +

          +
          + + + +
          +
          +
          +
          +
          + Direction of the pills can be changed by adding .justify-content-end and justify-content-center to .nav.nav-tabs +
          +
          +
          + + + + + + + + +
          +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +

          + Justified pills +

          +
          + + + +
          +
          +
          +
          +
          + For equal-width elements, use .nav-justified. All horizontal space will be occupied by nav links +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +

          + Pill borders & icons +

          +
          + + + +
          +
          +
          +
          +
          + +
          +
          + Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. +
          +
          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +
          +
          + Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. +
          +
          +
          +
          +
          +
          +
          +
          +

          + Pill vertical +

          +
          + + + +
          +
          +
          +
          + +
          + +
          +
          +
          +

          + Home +

          +

          Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica.

          + +

          Organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore.

          + + + pic-7 + + + pic-8 + + + pic-11 + + + pic-12 + + +
          +
          +

          + Profile +

          +
          +
          + + Sunny A. + +
          +
          Sunny A.
          + sunny@example.com +
          +
          +
          +

          + Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. +

          +

          + Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic. +

          +
          + + + +
          +

          Settings

          +
          + + Settings saved + +

          + All your settings changes have been saved! +

          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-toasts.html b/legacy/smartadmin/ui-toasts.html new file mode 100644 index 0000000..6f7bf7b --- /dev/null +++ b/legacy/smartadmin/ui-toasts.html @@ -0,0 +1,2025 @@ + + + + + + + + Toasts | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Toasts

          + + + + + + +
          Push notifications to your visitors with a toast, a lightweight and easily customizable alert message.
          + + +
          + +
          +

          Toasts are lightweight notifications designed to mimic the push notifications that have been popularized by mobile and desktop operating systems. They're built with flexbox, so they're easy to align and position.

          +

          + Learn more about this component on bootstrap's official documentation. +

          +
          + +
          +
          +
          +
          +

          + Basic Toasts +

          +
          + + + +
          +
          +
          +
          +
          + Toasts are as flexible as you need and have very little required markup. At a minimum, we require a single element to contain your "toasted" content and strongly encourage a dismiss button. +
          + +
          +
          +
          +
          +
          +

          + Stacking Toasts +

          +
          + + + +
          +
          +
          +
          +
          + When you have multiple toasts, we default to vertically stacking them in a readable manner. +
          + +
          +
          + + + +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Translucent Toasts +

          +
          + + + +
          +
          +
          +
          +
          + Toasts are slightly translucent, too, so they blend over whatever they might appear over. For browsers that support the backdrop-filter CSS property, we'll also attempt to blur the elements under a toast. +
          +
          + +
          +
          +
          +
          +
          +
          +

          + Placement Toasts +

          +
          + + + +
          +
          +
          +
          +
          + Place toasts with custom CSS as you need them. The top right is often used for notifications, as is the top middle. If you're only ever going to show one toast at a time, put the positioning styles right on the .toast +
          +
          + + + +
          +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/ui-tooltips.html b/legacy/smartadmin/ui-tooltips.html new file mode 100644 index 0000000..6187eb1 --- /dev/null +++ b/legacy/smartadmin/ui-tooltips.html @@ -0,0 +1,2159 @@ + + + + + + + + Tooltips | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Tooltips

          + + + + + + +
          Bootstrap tooltips are small pop-up messages that appear when users hover over or focus on an element, providing additional information.
          + + +
          + +
          +
          +
          +
          +

          + Tooltip basics +

          +
          + + + +
          +
          +
          +
          +
          + Hover over the links below to see tooltips: +
          +

          Tight pants next level keffiyeh you probably haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan whatever keytar, scenester farm-to-table banksy Austin twitter handle freegan cred raw denim single-origin coffee viral. +

          +
          +
          +
          +
          +
          +

          + Tooltip Placement +

          +
          + + + +
          +
          +
          +
          +
          +

          How to position the tooltip - auto | top | bottom | left | right. When auto is specified, it will dynamically reorient the tooltip.

          +

          When a function is used to determine the placement, it is called with the tooltip DOM node as its first argument and the triggering element DOM node as its second. The this context is set to the tooltip instance.

          +
          +
          + + + + + + +
          +
          +
          +
          +
          +
          +

          + Tooltip animation +

          +
          + + + +
          +
          +
          +
          +
          + Disable the CSS fade transition to the tooltip by using data-bs-animation="false" +
          +
          + + +
          +
          +
          +
          +
          +
          +

          + Tooltip Container +

          +
          + + + +
          +
          +
          +
          +
          + Appends the tooltip to a specific element. Example: container: 'body'. This option is particularly useful in that it allows you to position the tooltip in the flow of the document near the triggering element - which will prevent the tooltip from floating away from the triggering element during a window resize. +
          + +
          + Toolip is nested in this container but displayed on the hovered element above. Once this container is hidden the tooltip will not be visible. Try hiding the container by pressing the "hide" button above +
          +
          +
          +
          +
          +
          +

          + Delayed Tooltip +

          +
          + + + +
          +
          +
          +
          +
          + Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type. If a number is supplied, delay is applied to both hide/show. Object structure is: delay: { "show": 500, "hide": 100 } +
          + +
          +
          +
          +
          +
          +
          +
          +

          + Tooltip Templating +

          +
          + + + +
          +
          +
          +
          +
          + Base HTML to use when creating the tooltip. The tooltip's title will be injected into the .tooltip-inner. The outermost wrapper element should have the .tooltip class and role="tooltip" +
          +
          + Backgrounds +
          +
          +
          + + + + + + + + + +
          +
          +
          + Sizing with HTML +
          +
          +
          + + +
          +
          +
          +
          +
          +
          +
          +

          + Tooltip Triggers +

          +
          + + + +
          +
          +
          +
          +
          +

          How tooltip is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space.

          +

          'manual' indicates that the tooltip will be triggered programmatically via the .tooltip('show'), .tooltip('hide') and .tooltip('toggle') methods; this value cannot be combined with any other trigger.

          +

          'hover' on its own will result in tooltips that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present.

          +
          +
          + + +
          +
          +
          +
          +
          +
          +

          + Tooltips Offset +

          +
          + + + +
          +
          +
          +
          +
          + Offset of the tooltip relative to its target. When a function is used to determine the offset, it is called with an object containing the offset data as its first argument. The function must return an object with the same structure. The triggering element DOM node is passed as the second argument. +
          +
          + + + +
          +
          +
          +
          +
          +
          + +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/usercontact.html b/legacy/smartadmin/usercontact.html new file mode 100644 index 0000000..31a7efc --- /dev/null +++ b/legacy/smartadmin/usercontact.html @@ -0,0 +1,2221 @@ + + + + + + + + User Contact | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          User Contact

          + + + + + + +
          User Contact page with notes.
          + + +
          +
          +
          +
          +
          + + +
          +
          + + + + +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          + + + +
          + + + IT Director, Webora Themes. +
          + +
          +
          +
          +
          + + +1 317-456-2564 + + oliver.kopyov@smartadminwebapp.com +
          + 15 Charist St, Detroit, MI, 48212, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Project Manager, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-461-1347 + + sesha.gray@smartadminwebapp.com +
          + 134 Hamtrammac, Detroit, MI, 48314, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Human Resources, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-779-1347 + + john.cook@smartadminwebapp.com +
          + 55 Smyth Rd, Detroit, MI, 48341, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Staff Orgnizer, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-779-3314 + + jim.ketty@smartadminwebapp.com +
          + 134 Tasy Rd, Detroit, MI, 48212, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Oncologist, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-779-8134 + + john.oliver@smartadminwebapp.com +
          + 134 Gallery St, Detroit, MI, 46214, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Xray Division, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-779-7613 + + sarah.mcbrook@smartadminwebapp.com +
          + 13 Jamie Rd, Detroit, MI, 48313, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Accounting, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-779-4314 + + jimmy.fallan@smartadminwebapp.com +
          + 55 Smyth Rd, Detroit, MI, 48341, USA +
          + +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          + + + Accounting, Webora Themes. +
          + +
          +
          +
          +
          + + +1 313-779-3347 + + arica.grace@smartadminwebapp.com +
          + 798 Smyth Rd, Detroit, MI, 48341, USA +
          + +
          +
          +
          +
          +
          +
          +
          + +
          +
          +
          + + +
          + +
          +
          + + +
          +
          + + + +
          +
          +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-borders.html b/legacy/smartadmin/utilities-borders.html new file mode 100644 index 0000000..ee42db2 --- /dev/null +++ b/legacy/smartadmin/utilities-borders.html @@ -0,0 +1,2109 @@ + + + + + + + + Borders | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Borders

          + + + + + + +
          Bootstrap borders are utility classes that allow you to quickly add, remove, or modify borders on elements with predefined styles, colors, and widths.
          + + +
          + +
          +
          + +
          +
          +

          + Colorful borders +

          +
          + + + +
          +
          +
          +
          +
          + Use color profiles to the following border colors ,border-primary, .border-secondary, .border-success, .border-danger, .border-warning, .border-info, .border-light, .border-dark, .border-white, .border-transparent, .border-faded +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Add Borders +

          +
          + + + +
          +
          +
          +
          +
          + Add border using .border, .border-top, .border-end, .border-end, .border-bottom, .border-start +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Border Opacity +

          +
          + + + +
          +
          +
          +
          +
          + Add border using .border-opacity-75, .border-opacity-50, + .border-opacity-25, .border-opacity-10. +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Border Thickness +

          +
          + + + +
          +
          +
          +
          +
          + Border thickness using border-1, border-2, + border-3, border-4, border-5. +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Rounded example +

          +
          + + + +
          +
          +
          +
          +
          + Round edges or control each corner using .rounded, rounded-top, rounded-end, rounded-bottom, rounded-start, rounded-circle, rounded-0, .rounded-plus, .rounded-{sm,lg}, .rounded-pill, border-{top,bottom}-{left,right}-radius-0 +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + Control rounded depth using rounded-1, rounded-2, rounded-3, rounded-4, + rounded-5 +
          +
          +
          +
          +
          +
          +
          +
          +
          + Mix and match rounded corners using rounded-bottom-1, rounded-start-2, + rounded-end-circle, rounded-start-pill, rounded-5 rounded-top-0 +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Remove borders +

          +
          + + + +
          +
          +
          +
          +
          + Subtract borders with border-0, border-top-0, border-end-0, border-bottom-0, border-start-0, .border-transparent +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-colorpalette.html b/legacy/smartadmin/utilities-colorpalette.html new file mode 100644 index 0000000..f221ff6 --- /dev/null +++ b/legacy/smartadmin/utilities-colorpalette.html @@ -0,0 +1,2600 @@ + + + + + + + + Color Palette | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Color Palette

          + + + + + + +
          Comes with 60 unique color pallets, that uses one prime to generate all pallets.
          + + +
          +
          +
          +
          +
          +

          + Impressionistic colors +

          +
          + + + +
          +
          +
          +
          +
          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StatePreviewPostfixButtonTextBackgroundAlerts
          Success + + *-successbtn-successcolor-successbg-successalert-success
          Warning + + *-warningbtn-warningcolor-warningbg-warningalert-warning
          Danger + + *-dangerbtn-dangercolor-dangerbg-dangeralert-danger
          Info + + *-infobtn-infocolor-infobg-infoalert-info
          Primary + + *-primarybtn-primarycolor-primarybg-primaryalert-primary
          Secondary + + *-secondarybtn-secondarycolor-secondarybg-secondaryalert-secondary
          Fusion + + *-fusionbtn-fusioncolor-fusionbg-fusionalert-fusion
          Dark + + *-darkbtn-darkcolor-darkbg-darkalert-dark
          Light + + *-lightbtn-lightcolor-whitebg-lightalert-light
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Success pallet +

          +
          +
          +
          +
          + Success color pallet will be used for positive feedback and user assurance. We have selected teal with a hint of green to stand out and cast the shadow of quality, healing, freshness and peace +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-success-50bg-success-50
          *-success-100bg-success-100
          *-success-200bg-success-200
          *-success-300bg-success-300
          *-success-400bg-success-400
          *-success-500bg-success-500
          *-success-600bg-success-600
          *-success-700bg-success-700
          *-success-800bg-success-800
          *-success-900bg-success-900
          +
          +
          +
          +
          +
          +
          +

          + Warning pallet +

          +
          +
          +
          +
          + Warning color pallet lets users know to be catious and careful. It can envoke the feeling of curiosity, confidence, sociability, and bravery +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-warning-50bg-warning-50
          *-warning-100bg-warning-100
          *-warning-200bg-warning-200
          *-warning-300bg-warning-300
          *-warning-400bg-warning-400
          *-warning-500bg-warning-500
          *-warning-600bg-warning-600
          *-warning-700bg-warning-700
          *-warning-800bg-warning-800
          *-warning-900bg-warning-900
          +
          +
          +
          +
          +
          +
          +

          + Danger pallet +

          +
          +
          +
          +
          + This color as an attention getter. Use this color as less as possible to have maximum impact. This color is connected to ecitement, love, strength, and energy +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-danger-50bg-danger-50
          *-danger-100bg-danger-100
          *-danger-200bg-danger-200
          *-danger-300bg-danger-300
          *-danger-400bg-danger-400
          *-danger-500bg-danger-500
          *-danger-600bg-danger-600
          *-danger-700bg-danger-700
          *-danger-800bg-danger-800
          *-danger-900bg-danger-900
          +
          +
          +
          +
          +
          +
          +

          + Secondary pallet +

          +
          +
          +
          +
          + Bootstrap uses this color for secondary elements. It is a neutral color that is used to balance the primary colors. +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-secondary-50bg-secondary-50
          *-secondary-100bg-secondary-100
          *-secondary-200bg-secondary-200
          *-secondary-300bg-secondary-300
          *-secondary-400bg-secondary-400
          *-secondary-500bg-secondary-500
          *-secondary-600bg-secondary-600
          *-secondary-700bg-secondary-700
          *-secondary-800bg-secondary-800
          *-secondary-900bg-secondary-900
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Info pallet +

          +
          +
          +
          +
          + This particular pallet helps you build trust, it has the ability to project competence, peace, loyalty and strength to your users +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-info-50bg-info-50
          *-info-100bg-info-100
          *-info-200bg-info-200
          *-info-300bg-info-300
          *-info-400bg-info-400
          *-info-500bg-info-500
          *-info-600bg-info-600
          *-info-700bg-info-700
          *-info-800bg-info-800
          *-info-900bg-info-900
          +
          +
          +
          +
          +
          +
          +

          + Primary pallet +

          +
          +
          +
          +
          + This is the primary color of the app, and is widely used in almost all of the elements. The color shows ambition, sprituality, royalty and luxury +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-primary-50bg-primary-50
          *-primary-100bg-primary-100
          *-primary-200bg-primary-200
          *-primary-300bg-primary-300
          *-primary-400bg-primary-400
          *-primary-500bg-primary-500
          *-primary-600bg-primary-600
          *-primary-700bg-primary-700
          *-primary-800bg-primary-800
          *-primary-900bg-primary-900
          +
          +
          +
          +
          +
          +
          +

          + Fusion pallet +

          +
          +
          +
          +
          + Fusion is a alternation of primary pallet. It is dramatic and bold. It has class and a sense of formality combined with security. +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-fusion-50bg-fusion-50
          *-fusion-100bg-fusion-100
          *-fusion-200bg-fusion-200
          *-fusion-300bg-fusion-300
          *-fusion-400bg-fusion-400
          *-fusion-500bg-fusion-500
          *-fusion-600bg-fusion-600
          *-fusion-700bg-fusion-700
          *-fusion-800bg-fusion-800
          *-fusion-900bg-fusion-900
          +
          +
          +
          +
          +
          +
          +

          + Light pallet +

          +
          +
          +
          +
          + Bootstrap uses this color for light elements. It is a light color that is used to balance the primary colors. +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          BackgroundPostfixExample usage
          *-light-50bg-light-50
          *-light-100bg-light-100
          *-light-200bg-light-200
          *-light-300bg-light-300
          *-light-400bg-light-400
          *-light-500bg-light-500
          *-light-600bg-light-600
          *-light-700bg-light-700
          *-light-800bg-light-800
          *-light-900bg-light-900
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-display-property.html b/legacy/smartadmin/utilities-display-property.html new file mode 100644 index 0000000..87a902c --- /dev/null +++ b/legacy/smartadmin/utilities-display-property.html @@ -0,0 +1,1970 @@ + + + + + + + + Display Property | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Display Property

          + + + + + + +
          Control the display behavior of elements using our display utilities with support for common values as well as responsive breakpoints.
          + + +
          + +
          +

          Change the value of the display property with our responsive display utility classes. We support all common values while adding responsive variations for each breakpoint. You can also use the Visibility Generator Page to automate the CSS generation.

          +
          + +
          +
          +
          +
          +

          + Displaying elements +

          +
          + + + +
          +
          +
          +
          +
          +

          For faster mobile-friendly development, use responsive display classes for showing and hiding elements by device. Avoid creating entirely different versions of the same site, instead hide elements responsively for each screen size.

          +

          To hide elements simply use the .d-none class or one of the .d-{sm,md,lg,xl,xxl}-none classes for any responsive screen variation.

          +

          To show an element only on a given interval of screen sizes you can combine one .d-*-none class + with a .d-*-* class, for example .d-none .d-md-block .d-xl-none .d-xxl-none will hide + the element for all screen sizes except on medium and large devices.

          +
          +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          DescriptionScreen sizeClass
          Hidden on all*.*.d-none
          Hidden only on xs576px.d-none .d-sm-block
          Hidden only on sm576px.d-sm-none .d-md-block
          Hidden only on md768px.d-md-none .d-lg-block
          Hidden only on lg1024px.d-lg-none .d-xl-block
          Hidden only on xl1280px.d-xl-none .d-xxl-block
          Hidden only on xxl1400px.d-xxl-none
          Hidden only on xxxl1600px.d-xxxl-none
          Visible on all*.*.d-block
          Visible only on xs576px.d-block .d-sm-none
          Visible only on sm576px.d-none .d-sm-block .d-md-none
          Visible only on md768px.d-none .d-md-block .d-lg-none
          Visible only on lg1024px.d-none .d-lg-block .d-xl-none
          Visible only on xl1280px.d-none .d-xl-block .d-xxl-none
          Visible only on xxl1400px.d-none .d-xxl-block
          Visible only on xxxl1600px.d-none .d-xxxl-block
          +
          +
          +

          Change the display value of elements when printing with our print display utility classes. Includes support for the same display values as our responsive .d-* utilities.

          +
          +
            +
          • .d-print-none
          • +
          • .d-print-inline
          • +
          • .d-print-inline-block
          • +
          • .d-print-block
          • +
          • .d-print-grid
          • +
          • .d-print-table
          • +
          • .d-print-table-row
          • +
          • .d-print-table-cell
          • +
          • .d-print-flex
          • +
          • .d-print-inline-flex
          • +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-flexbox.html b/legacy/smartadmin/utilities-flexbox.html new file mode 100644 index 0000000..0512a19 --- /dev/null +++ b/legacy/smartadmin/utilities-flexbox.html @@ -0,0 +1,2421 @@ + + + + + + + + Flexbox | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Flexbox

          + + + + + + +
          Quickly manage the layout, alignment, and sizing of grid columns, navigation, components, and more with a full suite of responsive flexbox utilities.
          + + +
          + +
          + +
          + +
          + +
          + +
          + Enable flex behaviors + + Apply display utilities to create a flexbox container and transform direct children elements into flex items. Flex containers and items are able to be modified further with additional flex properties. + +
          + +
          + d-flex +
          +
          +
          I'm a flexbox container!
          +
          + +
          + d-inline-flex +
          +
          +
          I'm an inline flexbox container!
          +
          + +
          + +
          + +
          + +
          + +
          + Direction + + Set the direction of flex items in a flex container with direction utilities. In most cases you can omit the horizontal class here as the browser default is row. However, you may encounter situations where you needed to explicitly set this value (like responsive layouts). + +
          + + +
          + Use .flex-row to set a horizontal direction (the browser default), or .flex-row-reverse to start the horizontal direction from the opposite side. + +
          + +
          +
          +
          Flex item 1
          +
          Flex item 2
          +
          Flex item 3
          +
          + +
          +
          Flex item 1
          +
          Flex item 2
          +
          Flex item 3
          +
          +
          + +
          + Use .flex-column to set a vertical direction, or .flex-column-reverse to start the vertical direction from the opposite side. +
          + +
          +
          +
          Flex item 1
          +
          Flex item 2
          +
          Flex item 3
          +
          +
          +
          Flex item 1
          +
          Flex item 2
          +
          Flex item 3
          +
          +
          + +
          + +
          + +
          + +
          + +
          + Justify Content + + justify-content utilities on flexbox containers to change the alignment of flex items on the main axis (the x-axis to start, y-axis if flex-direction: column). Choose from start (browser default), end, center, between, or around. + +
          + + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + Align items + + Use align-items utilities on flexbox containers to change the alignment of flex items on the cross axis (the y-axis to start, x-axis if flex-direction: column). + +
          + +
          + Choose from start, end, center, baseline, or stretch (browser default). +
          + +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          +
          + +

          Responsive variations also exist for align-items.

          + +
          + +
          + +
          + +
          + +
          + Align self + + Use align-self utilities on flexbox items to individually change their alignment on the cross axis (the y-axis to start, x-axis if flex-direction: column). + +
          + +
          + Choose from the same options as align-items: start, end, center, baseline, or stretch (browser default). +
          + +
          + +
          +
          Flex item
          +
          Aligned flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Aligned flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Aligned flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Aligned flex item
          +
          Flex item
          +
          +
          +
          Flex item
          +
          Aligned flex item
          +
          Flex item
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + Fill + + Use the .flex-fill class on a series of sibling elements to force them into widths equal to their content (or equal widths if their content does not surpass their border-boxes) while taking up all available horizontal space. + +
          + + +
          + +
          +
          Flex item with a lot of content
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + Grow and shrink + + Use .flex-grow-* utilities to toggle a flex item’s ability to grow to fill available space. In the example below, the .flex-grow-1 elements uses all available space it can, while allowing the remaining two flex items their necessary space. + +
          + +
          + Choose from the same options as align-items: start, end, center, baseline, or stretch (browser default). +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Third flex item
          +
          + +
          + +
          + Use .flex-shrink-* utilities to toggle a flex item’s ability to shrink if necessary. In the example below, the second flex item with .flex-shrink-1 is forced to wrap it’s contents to a new line, “shrinking” to allow more space for the previous flex item with .w-100. +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + Auto margins + + Flexbox can do some pretty awesome things when you mix flex alignments with auto margins. Shown below are three examples of controlling flex items via auto margins: default (no auto margin), pushing two items to the right (.me-auto), and pushing two items to the left (.ms-auto). + +
          + +
          + + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + + +
          + +
          + +
          + +
          + +
          + +
          + With align-items + + Vertically move one flex item to the top or bottom of a container by mixing align-items, flex-direction: column, and margin-top: auto or margin-bottom: auto. + +
          + +
          + Choose from the same options as align-items: start, end, center, baseline, or stretch (browser default). +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + Wrap + + Change how flex items wrap in a flex container. Choose from no wrapping at all (the browser default) with .flex-nowrap, wrapping with .flex-wrap, or reverse wrapping with .flex-wrap-reverse. + +
          + +
          + d-flex flex-nowrap +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + d-flex flex-wrap +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + + +
          + d-flex flex-wrap-reverse +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + Order + + Change the visual order of specific flex items with a handful of order utilities. We only provide options for making an item first or last, as well as a reset to use the DOM order. As order takes any integer value (e.g., 5), add custom CSS for any additional values needed. + +
          + +
          + +
          +
          First flex item
          +
          Second flex item
          +
          Third flex item
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + Align content + + Use align-content utilities on flexbox containers to align flex items together on the cross axis. Choose from start (browser default), end, center, between, around, or stretch. To demonstrate these utilities, we’ve enforced flex-wrap: wrap and increased the number of flex items. + +
          + +
          + Heads up! This property has no effect on single rows of flex items. +
          + +
          + d-flex align-content-start flex-wrap +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + d-flex align-content-end flex-wrap +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + +
          + d-flex align-content-center flex-wrap +
          + +
          + +
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          Flex item
          +
          + +
          + + +
          + +
          + +
          + + +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-helpers.html b/legacy/smartadmin/utilities-helpers.html new file mode 100644 index 0000000..1998131 --- /dev/null +++ b/legacy/smartadmin/utilities-helpers.html @@ -0,0 +1,2779 @@ + + + + + + + + Helpers | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Helpers

          + + + + + + +
          Quickly fix layouts, manage positions, add shadows, and more
          + + +
          + +
          +
          +
          + +
          +
          +

          + Row grids +

          +
          + + + +
          +
          +
          +
          +
          + Add borders to your columns by adding .row-grid to any .row, make sure to include .g-0 modifer +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Position and z-index +

          +
          + + + +
          +
          +
          +
          +
          + Control position with the codes start-0, end-0, top-0, bottom-0, and translate-middle; +
          +
          +
          + +
          .top-0 .start-0
          +
          .top-0 .end-0
          +
          .top-50 .start-50
          +
          .bottom-50 .end-50
          +
          .bottom-0 .start-0
          +
          .bottom-0 .end-0
          +
          .translate-middle
          + +
          +
          +
          +
          +
          +
          +
          +

          + Demo window +

          +
          + + + +
          +
          +
          +
          +
          + Use demo window wrapper .demo-window to portray a focal point for images, demo objects, data, tables or layout properties. Place content inside .demo-window-content +
          +
          +
          +
          + You can place any html objects in here. +
          +
          +
          +
          +
          +
          +
          +
          +

          + Opacity presets +

          +
          + + + +
          +
          +
          +
          +
          + Uniform widths to keep things aligned. See helpers.scss file for more details. You can also set .width-0 to remove any given width, or you can use .w-auto to undo explicitly specified widths +
          +
          + + +
          +
          +
          + Class +
          +
          + .opacity-5 +
          +
          +
          +
          + Example +
          + +
          +
          +
          +
          +
          +
          +

          + Hover background +

          +
          + + + +
          +
          +
          +
          +
          + Hover any background with .hover-bg +
          +
          +
          +
          +
          + Parent class +

          + bg-primary-500 color-fusion-300 +

          + Child class +

          + + hover-bg + +

          +
          +
          +
          +
          +
          +
          + Parent class +

          + bg-info-500 color-fusion-300 +

          + Child class +

          + + hover-bg + +

          +
          +
          +
          +
          +
          +
          + Parent class +

          + bg-warning-500 color-fusion-300 +

          + Child class +

          + + hover-bg + +

          +
          +
          +
          +
          +
          +
          + Parent class +

          + bg-success-500 color-fusion-300 +

          + Child class +

          + + hover-bg + +

          +
          +
          +
          +
          +
          +
          + Parent class +

          + bg-danger-500 color-fusion-300 +

          + Child class +

          + + hover-bg + +

          +
          +
          +
          +
          +
          +
          + Parent class +

          + bg-fusion-500 color-white +

          + Child class +

          + + hover-bg + +

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Cursor pointers +

          +
          + + + +
          +
          +
          +
          +
          + Change your cursor pointer with these classes +
          +
          +
          + cursor-auto +
          +
          + cursor-crosshair +
          +
          + cursor-default +
          +
          + cursor-e-resize +
          +
          + cursor-help +
          +
          + cursor-move +
          +
          + cursor-n-resize +
          +
          + cursor-ne-resize +
          +
          + cursor-nw-resize +
          +
          + cursor-pointer +
          +
          + cursor-progress +
          +
          + cursor-s-resize +
          +
          + cursor-se-resize +
          +
          + cursor-sw-resize +
          +
          + cursor-text +
          +
          + cursor-w-resize +
          +
          + cursor-wait +
          +
          + cursor-inherit +
          +
          +
          +
          +
          +
          +
          +

          + Focus Rings +

          +
          + + + +
          +
          +
          +
          +
          +

          The .focus-ring helper removes the default outline on :focus, + replacing it with a box-shadow that can be more broadly customized. The new shadow is made + up of a series of CSS variables, inherited from the :root level, that can be modified for + any element or component.

          +
          + +
          +
          +
          +
          +
          +

          + Background Tricks +

          +
          + + + +
          +
          +
          +
          +
          +

          The .bg-placeholder is used to create a placeholder background for elements. + Use the .translucent-light or .translucent-dark classes (along with other supporting classes) to add a translucent background. +

          +
          +
          + +
          + .translucent-light +
          +
          + .translucent-dark +
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +

          + Shadow Presets +

          +
          + + + +
          +
          +
          +
          +
          + Add shadow presets for depth on elements +
          +
          +
          +
          + Class +

          .shadow-none

          +
          +
          +
          +
          + Class +

          .shadow-1

          +
          +
          +
          +
          + Class +

          .shadow-2

          +
          +
          +
          +
          + Class +

          .shadow-3

          +
          +
          +
          +
          + Class +

          .shadow-4

          +
          +
          +
          +
          + Class +

          .shadow-5

          +
          +
          +
          +
          + Class +

          .shadow-sm

          +
          +
          +
          +
          + Class +

          .shadow

          +
          +
          +
          +
          + Class +

          .shadow-lg

          +
          +
          +
          +
          + Class +

          .shadow-inset-1

          +
          +
          +
          +
          + Class +

          .shadow-inset-2

          +
          +
          +
          +
          + Class +

          .shadow-inset-3

          +
          +
          +
          +
          + Class +

          .shadow-inset-4

          +
          +
          +
          +
          + Class +

          .shadow-inset-5

          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Shadow Hovers +

          +
          + + + +
          +
          +
          +
          +
          + a +
          +
          +
          +
          + Class +

          .shadow-hover-1

          +
          +
          +
          +
          + Class +

          .shadow-hover-2

          +
          +
          +
          +
          + Class +

          .shadow-hover-3

          +
          +
          +
          +
          + Class +

          .shadow-hover-4

          +
          +
          +
          +
          + Class +

          .shadow-hover-5

          +
          +
          +
          +
          + Class +

          .shadow-sm-hover

          +
          +
          +
          +
          + Class +

          .shadow-hover

          +
          +
          +
          +
          + Class +

          .shadow-lg-hover

          +
          +
          +
          +
          + Class +

          .shadow-hover-inset-1

          +
          +
          +
          +
          + Class +

          .shadow-hover-inset-2

          +
          +
          +
          +
          + Class +

          .shadow-hover-inset-3

          +
          +
          +
          +
          + Class +

          .shadow-hover-inset-4

          +
          +
          +
          +
          + Class +

          .shadow-hover-inset-5

          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Child Hover +

          +
          + + + +
          +
          +
          +
          +
          + Hide and display child elements on hover +
          +
          +
          +
          + Children is hidden on hover .hide-child-on-hover +
          + This element is visible .hide-on-hover-parent +
          +
          +
          +
          +
          + Children is shown on hover .show-child-on-hover +
          + This element is hidden .show-on-hover-parent +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Gradient presets +

          +
          + + + +
          +
          +
          +
          +
          + There are 8 different gradients that you can mix and match with different background colors. The gradient classes are .bg-primary-gradient, .bg-info-gradient, .bg-success-gradient, .bg-warning-gradient, .bg-danger-gradient, .bg-fusion-gradient, .bg-brand-gradient, and .bg-trans-gradient (which requires .text-white modifier) +
          +
          +
          +
          +
          + + +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +

          + Header 3 + + Subheader text + +

          +

          + Paragraph text, in bold, italic, and underlined +

          +
          +
          +
          +
          +
          +
          +

          + Z-index Presets +

          +
          + + + +
          +
          +
          +
          +
          + We call these “low-level” z-index utilities because of their default values of -1 + through 3, which we use for the layout of overlapping components. + High-level z-index values are used for overlay components like modals and tooltips. +
          +
          +
          + z-3 +
          +
          + z-2 +
          +
          + z-1 +
          +
          + z-0 +
          +
          + z-n1 +
          +
          +
          +
          +
          +
          +
          +

          + Ratio & Object Fit +

          +
          + + + +
          +
          +
          +
          +
          + Use the .ratio class to create a responsive ratio for an element. + Use the .object-fit class to control how an element is resized to fit its container. +
          +
          +
          +
          1x1
          +
          +
          +
          4x3
          +
          +
          +
          16x9
          +
          +
          +
          21x9
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-position.html b/legacy/smartadmin/utilities-position.html new file mode 100644 index 0000000..f32ae63 --- /dev/null +++ b/legacy/smartadmin/utilities-position.html @@ -0,0 +1,2114 @@ + + + + + + + + Position | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Position

          + + + + + + +
          Bootstrap position utilities allow you to control the positioning of elements using CSS properties like relative, absolute, fixed, sticky, and static to create flexible layouts.
          + + +
          + +
          +

          + Positions can also be changed for mobile viewports by adding the following classes, .position-on-mobile-absolute, .position-on-mobile-relative, and .position-on-mobile-static +

          +
          + +
          +
          +
          +
          +

          + Position Fixed +

          +
          + + + +
          +
          +
          +
          +
          + An element with .position-fixed; is positioned relative to the viewport, which means it always stays in the same place even if the page is scrolled. The top, right, bottom, and left properties are used to position the element +
          + +
          +
          +
          +
          +
          +

          + Position Relative +

          +
          + + + +
          +
          +
          +
          +
          + In .position-relative, the element is positioned relative to itself. However, an absolute positioned element is relative to its parent. An element with position: absolute is removed from the normal document flow. ... If it doesn't have any parent elements, then the initial document html will be its parent +
          +
          +
          +
          +
          +
          +
          +
          + .position-relative +

          .position-absolute

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          .position-relative
          +
          + .position-relative +

          .position-absolute

          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Position Absolute +

          +
          + + + +
          +
          +
          +
          +
          + An element with .position-absolute; is positioned relative to the nearest positioned ancestor (instead of positioned relative to the viewport, like fixed). However; if an absolute positioned element has no positioned ancestors, it uses the document body, and moves along with page scrolling. You can use .pos-top, .pos-right, .pos-bottom, and .pos-left to position relavant to its closest relative positioned ancenstor +
          +
          +
          +
          +
          + .position-absolute .pos-top +
          + +
          + .position-absolute .pos-bottom +
          +
          + .position-absolute .pos-right +
          +
          +
          +
          + +
          +
          +
          +
          +
          +
          +
          +

          + Position Sticky +

          +
          + + + +
          +
          +
          +
          +
          +

          Position an element at the top of the viewport, from edge to edge, but only after you scroll past it. The .sticky-top utility uses CSS’s position: sticky, which isn’t fully supported in all browsers.

          +
          + +
          +
          +
          +
          +
          + Sticky Element: Scroll Down to See the Effect + + Scroll down this page to see how sticky positioning works + +
          + +
          +

          Some example text..

          +
          Scroll back up again to "remove" the sticky position.
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas odio, vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices

          +

          1..

          +

          ...

          +

          ...

          +

          ...

          +

          4..

          +

          ...

          +

          ...

          +

          ...

          +

          8..

          +

          ...

          +

          ...

          +

          ...

          +

          12.

          +

          ...

          +

          ...

          +

          ...

          +

          16.

          +

          ...

          +

          ...

          +

          ...

          +

          20.

          +

          ...

          +

          ...

          +

          ...

          +

          24.

          +
          +
          +
          +
          + +
          +
          +
          +
          +
          +

          + Position Static +

          +
          + + + +
          +
          +
          +
          +
          + Every element has a static position by default, so the element will stick to the normal page flow. So if there is a left/right/top/bottom/z-index set then there will be no effect on that element. Adding .position-static will generally 'reset' these properties +
          +
          +
          +
          +
          +
          +
          .position-relative
          +
          + .position-static +

          .position-absolute

          +
          +
          +
          +
          +
          +
          + +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-responsivegrid.html b/legacy/smartadmin/utilities-responsivegrid.html new file mode 100644 index 0000000..e09d11d --- /dev/null +++ b/legacy/smartadmin/utilities-responsivegrid.html @@ -0,0 +1,2352 @@ + + + + + + + + Responsive Grid | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Responsive Grid

          + + + + + + +
          Use our powerful mobile-first flexbox grid to build layouts of all shapes and sizes thanks to a twelve column system, six default responsive tiers, and dozens of predefined classes.
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + Extra small
          + <576px +
          + Small
          + ≥576px +
          + Medium
          + ≥768px +
          + Large
          + ≥992px +
          + Extra large
          + ≥1200px +
          + XX large
          + ≥1400px +
          + XXX large
          + ≥1599px +
          Grid behaviorHorizontal at all timesCollapsed to starthorizontal above breakpoints
          Max containerNone (auto)540px720px960px1140px1320px1500px
          Class prefix.col-.col-sm-.col-md-.col-lg-.col-xl-.col-xxl-.col-xxxl-
          Number of columns12
          Max column widthAuto60px78px95px95px95px95px
          Gutter width1.5rem (0.75rem on left and right)
          Custom guttersYes
          NestableYes
          Column orderingYes
          + + +
          +
          + How it works + + Bootstrap's grid system uses a series of containers, rows, and columns to layout and align content. It's built with flexbox and is fully responsive. Below is an example and an in-depth look at how the grid comes together. + +
          +
          +
          +
          +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          +
          +
          +
          +
          +
          + Auto-layout columns + + Utilize breakpoint-specific column classes for equal-width columns. Add any number of unit-less classes for each breakpoint you need and every column will be the same width. + +
          +
          + Equal-width + + For example, here are two grid layouts that apply to every device and viewport, from xs to xl. + +
          +
          +
          +
          +
          +
          + 1 of 2 +
          +
          + 1 of 2 +
          +
          +
          +
          + 1 of 3 +
          +
          + 1 of 3 +
          +
          + 1 of 3 +
          +
          +
          +
          +
          +
          +
          + Setting one column width + + Auto-layout for flexbox grid columns also means you can set the width of one column and the others will automatically resize around it. You may use predefined grid classes (as shown below), grid mixins, or inline widths. Note that the other columns will resize no matter the width of the center column. + +
          +
          +
          +
          +
          +
          + 1 of 3 +
          +
          + 2 of 3 (wider) +
          +
          + 3 of 3 +
          +
          +
          +
          + 1 of 3 +
          +
          + 2 of 3 (wider) +
          +
          + 3 of 3 +
          +
          +
          +
          +
          +
          +
          + Variable width content + + Using the col-{breakpoint}-auto classes, columns can size itself based on the natural width of its content. This is super handy with single line content like inputs, numbers, etc. This, in conjunction with horizontal alignment classes, is very useful for centering layouts with uneven column sizes as viewport width changes. + +
          + +
          +
          +
          +
          +
          + 1 of 3 +
          +
          + Variable width content +
          +
          + 3 of 3 +
          +
          +
          +
          + 1 of 3 +
          +
          + Variable width content +
          +
          + 3 of 3 +
          +
          +
          +
          +
          +
          +
          + Equal-width multi-row + + Create equal-width columns that span multiple rows by inserting a .w-100 where you want the columns to break to a new line. Make the breaks responsive by mixing the .w-100 with some responsive display utilities. + +
          +
          +
          +
          +
          +
          col
          +
          col
          +
          +
          col
          +
          col
          +
          +
          +
          +
          +
          +
          + Responsive classes + + Bootstrap's grid includes five tiers of predefined classes for building complex responsive layouts. Customize the size of your columns on extra small, small, medium, large, or extra large devices however you see fit. + +
          +
          + All breakpoints + + For grids that are the same from the smallest of devices to the largest, use the .col and .col-* classes. Specify a numbered class when you need a particularly sized column; otherwise, feel free to stick to .col. + +
          +
          +
          +
          +
          +
          col
          +
          col
          +
          col
          +
          col
          +
          +
          +
          col-8
          +
          col-4
          +
          +
          +
          +
          +
          +
          + Stacked to horizontal + + Using a single set of .col-sm-* classes, you can create a basic grid system that starts out stacked on extra small devices before becoming horizontal on desktop (medium) devices. + +
          +
          +
          +
          +
          +
          col-sm-8
          +
          col-sm-4
          +
          +
          +
          col-sm
          +
          col-sm
          +
          col-sm
          +
          +
          +
          +
          +
          +
          + Mix and match + + Don't want your columns to simply stack in some grid tiers? Use a combination of different classes for each tier as needed. See the example below for a better idea of how it all works. + +
          +
          +
          +
          + +
          +
          .col .col-md-8
          +
          .col-6 .col-md-4
          +
          + +
          +
          .col-6 .col-md-4
          +
          .col-6 .col-md-4
          +
          .col-6 .col-md-4
          +
          + +
          +
          .col-6
          +
          .col-6
          +
          +
          +
          +
          +
          +
          + Alignment + + Use flexbox alignment utilities to vertically and horizontally align columns. Bootstrap 5 uses a flexbox-based grid system. + +
          +
          +
          +
          +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          + One of three columns +
          +
          +
          +
          +
          +
          +
          + Horizontal alignment +
          +
          +
          +
          +
          +
          + One of two columns +
          +
          + One of two columns +
          +
          +
          +
          + One of two columns +
          +
          + One of two columns +
          +
          +
          +
          + One of two columns +
          +
          + One of two columns +
          +
          +
          +
          + One of two columns +
          +
          + One of two columns +
          +
          +
          +
          + One of two columns +
          +
          + One of two columns +
          +
          +
          +
          +
          +
          +
          + Gutters + + Gutters can be responsively adjusted using gutter modifier classes. For example: .g-0 removes gutters, .g-4 sets gutters to 1.5rem, and .g-*-* classes can be used for responsive gutter widths. + +
          +
          +
          +
          +
          +
          .col-6 .g-0
          +
          .col-6 .g-0
          +
          +
          +
          .col-6 .g-4
          +
          .col-6 .g-4
          +
          +
          +
          +
          +
          +
          + Column ordering with order classes + + Use .order- classes for controlling the visual order of your content. These classes are responsive, so you can set the order by breakpoint (e.g., .order-1.order-md-2). + +
          +
          +
          +
          +
          +
          + First, but last +
          +
          + Second, but unordered +
          +
          + Third, but first +
          +
          +
          +
          +
          +
          +
          + Offset classes + + Move columns to the right using .offset-md-* classes. These classes increase the left margin of a column by * columns. For example, .offset-md-4 moves .col-md-4 over four columns. + +
          +
          +
          +
          +
          +
          .col-md-4
          +
          .col-md-4 .offset-md-4
          +
          +
          +
          .col-md-3 .offset-md-3
          +
          .col-md-3 .offset-md-3
          +
          +
          +
          +
          +
          +
          + Push and pull + + Easily change the order of our built-in grid columns with .push-md-* and .pull-md-* modifier classes. + +
          +
          +
          +
          +
          +
          .col-md-9 .push-md-3
          +
          .col-md-3 .pull-md-9
          +
          +
          +
          +
          +
          +
          + Nesting + + To nest your content with the default grid, add a new .row and set of .col-sm-* columns within an existing .col-sm-* column. Nested rows should include a set of columns that add up to 12 or fewer (it is not required that you use all 12 available columns). + +
          +
          +
          +
          +
          +
          + Level 1: .col-sm-9 +
          +
          + Level 2: .col-8 .col-sm-6 +
          +
          + Level 2: .col-4 .col-sm-6 +
          +
          +
          +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-sizing.html b/legacy/smartadmin/utilities-sizing.html new file mode 100644 index 0000000..d466997 --- /dev/null +++ b/legacy/smartadmin/utilities-sizing.html @@ -0,0 +1,2719 @@ + + + + + + + + Sizing | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Sizing

          + + + + + + +
          Easily make an element as wide or as tall with our width and height utilities.
          + + +
          + +
          +

          + You are able to reset the height and width of an object by adding class .height-mobile-auto and .width-mobile-auto. Expand full height and width of your mobile device by adding .expand-full-height-on-mobile and .expand-full-width-on-mobile. Reset max and minium width/height by using the following modifier: .h-auto, .w-auto, .max-width-reset, .max-height-reset, and .min-width-0 +

          +
          + +
          +
          +
          +
          +

          + Width presets +

          +
          + + + +
          +
          +
          +
          +
          + Uniform widths to keep things aligned. See helpers.scss file for more details. You can also set .width-0 to remove any given width, or you can use .w-auto to undo explicitly specified widths +
          +
          +
          +
          +
          + Class +

          + + .width-1 + +

          + + Description + +

          + change width to 1.5rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-2 + +

          + + Description + +

          + change width to 2rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-3 + +

          + + Description + +

          + change width to 2.5rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-4 + +

          + + Description + +

          + change width to 2.75rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-5 + +

          + + Description + +

          + change width to 3rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-6 + +

          + + Description + +

          + change width to 3.25rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-7 + +

          + + Description + +

          + change width to 3.5rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-8 + +

          + + Description + +

          + change width to 3.75rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-9 + +

          + + Description + +

          + change width to 4rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-10 + +

          + + Description + +

          + change width to 4.25rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-xs + +

          + + Description + +

          + change min-width to 5rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-sm + +

          + + Description + +

          + change min-width to 10rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-lg + +

          + + Description + +

          + change min-width to 15rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .width-xl + +

          + + Description + +

          + change min-width to 20rem +

          + + Example + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .w-25 + +

          + + Description + +

          + change width to 25% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .w-50 + +

          + + Description + +

          + change width to 50% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .w-75 + +

          + + Description + +

          + change width to 75% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .w-100 + +

          + + Description + +

          + change width to 100% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Height presets +

          +
          + + + +
          +
          +
          +
          +
          + Uniform heights to keep things aligned. See variables.scss file for more details on $p-* values. +
          +
          +
          +
          +
          + Class +

          + + .height-1 + +

          + + Description + +

          + change height to 1.5rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-2 + +

          + + Description + +

          + change height to 2rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-3 + +

          + + Description + +

          + change height to 2.5rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-4 + +

          + + Description + +

          + change height to 2.75rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-5 + +

          + + Description + +

          + change height to 3rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-6 + +

          + + Description + +

          + change height to 3.25rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-7 + +

          + + Description + +

          + change height to 3.5rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-8 + +

          + + Description + +

          + change height to 3.75rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-9 + +

          + + Description + +

          + change height to 4rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-10 + +

          + + Description + +

          + change height to 4.25rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-xs + +

          + + Description + +

          + change min-height to 5rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-sm + +

          + + Description + +

          + change min-height to 10rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-lg + +

          + + Description + +

          + change min-height to 15rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          + Class +

          + + .height-xl + +

          + + Description + +

          + change min-height to 20rem +

          + + Example + +
          +
          +
          +
          + +
          +
          +
          +
          +
          +
          + Class +

          + + .h-25 + +

          + + Description + +

          + change height to 25% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .h-50 + +

          + + Description + +

          + change height to 50% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .h-75 + +

          + + Description + +

          + change height to 75% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          +
          +
          + Class +

          + + .h-100 + +

          + + Description + +

          + change height to 100% +

          + + Example + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-spacing.html b/legacy/smartadmin/utilities-spacing.html new file mode 100644 index 0000000..fefdaa0 --- /dev/null +++ b/legacy/smartadmin/utilities-spacing.html @@ -0,0 +1,2068 @@ + + + + + + + + Spacing | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Spacing

          + + + + + + +
          Bootstrap includes a wide range of shorthand responsive margin and padding utility classes to modify an element’s appearance.
          + + +
          + +
          +

          Assign responsive-friendly margin or padding values to an element or a subset of its sides with shorthand classes. Includes support for individual properties, all properties, and vertical and horizontal properties. Classes are built from a default Sass map ranging from .25rem to 3rem.

          +

          + We have further added quick margin and padding options for by using gutter space variable .m-g, margin bottom gutter .mb-g. Padding gutter can be adding by using .p-g modifier. The *-g will change based on the gutter variable. +

          +
          +
          +
          +
          +
          +

          + Default Panel +

          +
          + + + +
          +
          +
          +
          +
          +

          Spacing utilities that apply to all breakpoints, from xs to xxl, have no breakpoint abbreviation in them. This is because those classes are applied from min-width: 0 and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.

          +

          The classes are named using the format {property}{sides}-{size} for xs and {property}{sides}-{breakpoint}-{size} for sm, md, lg, xl, and xxl.

          +
          +

          Where property is one of:

          +
            +
          • t - for classes that set margin-top or padding-top
          • +
          • b - for classes that set margin-bottom or padding-bottom
          • +
          • l - for classes that set margin-start or padding-start
          • +
          • r - for classes that set margin-end or padding-end
          • +
          • x - for classes that set both *-left and *-right
          • +
          • y - for classes that set both *-top and *-bottom
          • +
          • blank - for classes that set a margin or padding on all 4 sides of the element
          • +
          +

          Where size is one of:

          +
            +
          • 0 - for classes that eliminate the margin or padding by setting it to 0
          • +
          • 1 - (by default) for classes that set the margin or padding to $spacer * .25
          • +
          • 2 - (by default) for classes that set the margin or padding to $spacer * .5
          • +
          • 3 - (by default) for classes that set the margin or padding to $spacer
          • +
          • 4 - (by default) for classes that set the margin or padding to $spacer * 1.5
          • +
          • 5 - (by default) for classes that set the margin or padding to $spacer * 2
          • +
          • auto - for classes that set the margin to auto
          • +
          +

          + Example padding: +

          +
          +
          +
          .p-2 .p-sm-3 .p-md-4 .p-lg-5 .p-xl-6 .p-xxl-7
          +
          +
          +
          .p-1 .p-sm-2 .p-md-3 .p-lg-4 .p-xl-5 .p-xxl-6
          +
          +
          +
          .p-0 .p-sm-1 .p-md-2 .p-lg-3 .p-xl-4 .p-xxl-5
          +
          +
          +
          .p-3 .p-sm-0 .p-md-1 .p-lg-2 .p-xl-3 .p-xxl-4
          +
          +
          +
          .p-4 .p-sm-4 .p-md-0 .p-lg-1 .p-xl-2 .p-xxl-3
          +
          +
          +
          .p-5 .p-sm-6 .p-md-3 .p-lg-0 .p-xl-1 .p-xxl-2
          +
          +
          +
          .p-6 .p-sm-5 .p-md-5 .p-lg-6 .p-xl-0 .p-xxl-1
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Horizontal centering +

          +
          + + + +
          +
          +
          +
          +
          +

          Additionally, Bootstrap also includes an .mx-auto class for horizontally centering fixed-width block level content—that is, content that has display: block and a width set—by setting the horizontal margins to auto.

          +
          +
          +
          + Centered element +
          +
          +
          +
          +
          +
          +
          +

          + Negative margin +

          +
          + + + +
          +
          +
          +
          +
          + The syntax is nearly the same as the default, positive margin utilities, but with the addition of n before the requested size. +
          +

          + Here’s an example of customizing the Bootstrap grid at the medium (md) breakpoint and above. We’ve increased the .col padding with .px-md-5 and then counteracted that with .mx-md-n5 on the parent .row. +

          +
          +
          +
          Custom column padding
          +
          +
          +
          Custom column padding
          +
          +
          +
          +
          +
          +
          +
          +

          + Margin examples +

          +
          + + + +
          +
          +
          +
          +
          + Margin specific viewports example +
          +
          + *-xs-* <576px +
          +
          + *-sm-* ≥576px +
          +
          + *-md-* ≥768px +
          +
          + *-lg-* ≥992px +
          +
          + *-xl-* ≥1200px +
          +
          + *-xxl-* ≥1400px +
          +
          +
          +
          +
          +
          + .ms-1 .ms-sm-2 .ms-md-3 .ms-lg-4 .ms-xl-5 .ms-xxl-6 +
          +
          +
          +
          + .mx-1 .mx-sm-2 .mx-md-3 .mx-lg-4 .mx-xl-5 .mx-xxl-6 +
          +
          +
          +
          + .my-1 .my-sm-2 .my-md-3 .my-lg-4 .my-xl-5 .my-xxl-6 +
          +
          +
          +
          + .m-1 .m-sm-2 .m-md-3 .m-lg-4 .m-xl-5 .m-xxl-6 +
          +
          +
          +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-typography.html b/legacy/smartadmin/utilities-typography.html new file mode 100644 index 0000000..a72cbdb --- /dev/null +++ b/legacy/smartadmin/utilities-typography.html @@ -0,0 +1,2690 @@ + + + + + + + + Typography | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Typography

          + + + + + + +
          Documentation and examples for typography, including global settings, headings, body text, lists, and more.
          + + +
          + +
          +
          + +
          +
          +

          + Display headings +

          +
          + + + +
          +
          +
          +
          +
          + Traditional heading elements are designed to work best in the meat of your page content. When you need a heading to stand out, consider using a display heading—a larger, slightly more opinionated heading style. +
          +
          +

          Display 1

          +

          Display 2

          +

          Display 3

          +

          Display 4

          +
          +
          +
          +
          +
          +
          +

          + Customizing headings +

          +
          + + + +
          +
          +
          +
          +
          + Use the included utility classes to recreate the small secondary heading text +
          +
          +

          + Fancy display heading + With faded secondary text +

          +
          +
          +
          +

          + h1. Default Page Header + + with text description on the bottom + +

          +
          +
          + +
          +
          +
          +
          +
          +

          + Basic headings +

          +
          + + + +
          +
          +
          +
          +
          + All HTML headings, <h1> through <h6>, are available +
          +
          +

          h1. Heading 1

          +

          h2. Heading 2

          +

          h3. Heading 3

          +

          h4. Heading 4

          +
          h5. Heading 5
          +
          h6. Heading 6
          +
          +
          +
          +
          +
          +
          +

          + Lead markup +

          +
          + + + +
          +
          +
          +
          +
          + Make a paragraph stand out by adding .lead +
          +
          +

          + Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus. +

          +
          +
          +
          +
          + +
          +
          +

          + Inline text elements +

          +
          + + + +
          +
          +
          +
          +
          + Styling for common inline HTML5 elements. +
          +

          You can use the mark tag to highlight text.

          +

          This line of text is meant to be treated as deleted text.

          +

          This line of text is meant to be treated as no longer accurate.

          +

          This line of text is meant to be treated as an addition to the document.

          +

          This line of text will render as underlined

          +

          This line of text is meant to be treated as fine print.

          +

          This line rendered as bold text.

          +

          This line rendered as italicized text.

          +
          +
          +
          +
          +
          +

          + Abbreviation example +

          +
          + + + +
          +
          +
          +
          +
          + Stylized implementation of HTML's <abbr> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations have a default underline and gain a help cursor to provide additional context on hover and to users of assistive technologies. +
          +

          attr

          +

          HTML

          +
          +
          +
          +
          +
          +

          + Block quote +

          +
          + + + +
          +
          +
          +
          +
          + For quoting blocks of content from another source within your document. Wrap <blockquote class="blockquote"> around any HTML as the quote. Add a <footer class="blockquote-footer"> for identifying the source. Wrap the name of the source work in <cite> +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

          +
          Someone famous in Source Title
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

          +
          Someone famous in Source Title
          +
          +
          +

          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

          +
          Someone famous in Source Title
          +
          +
          +
          +
          + +
          +
          +

          + Wrapping text example +

          +
          + + + +
          +
          +
          +
          +
          + Wrap text with a .text-wrap class, to prevent text from wrapping with a .text-nowrap class +
          +
          +
          + This text should wrap. +
          +
          + This text should overflow the parent. +
          +
          +
          +
          +
          +
          +
          +

          + Turncate example +

          +
          + + + +
          +
          +
          +
          +
          + For longer content, you can add a .text-truncate class to truncate the text with an ellipsis. Requires display: inline-block or display: block. You can also combine the following classe .text-truncate and combine with .text-truncate-xs, .text-truncate-sm, .text-truncate-md, .text-truncate-default, and .text-truncate-lg to achieve the desired results +
          +
          + + Curabitur blandit tempus ardua ridiculus sed magna. + + + Curabitur blandit tempus ardua ridiculus sed magna. + + + Curabitur blandit tempus ardua ridiculus sed magna. + + + Curabitur blandit tempus ardua ridiculus sed magna. + + + Curabitur blandit tempus ardua ridiculus sed magna. + +
          +
          +
          +
          + +
          +
          +

          + Text alignment +

          +
          + + + +
          +
          +
          +
          +
          + Easily realign text to components with text alignment classes. .text-{left,right,center,justify} +
          +
          +

          + Left aligned text on all viewport sizes. +

          +

          + Center aligned text on all viewport sizes. +

          +

          + Right aligned text on all viewport sizes. +

          +

          Left aligned text on viewports sized SM (small) or wider.

          +

          Right aligned text on viewports sized MD (medium) or wider.

          +

          Left aligned text on viewports sized LG (large) or wider.

          +

          Left aligned text on viewports sized XL (extra-large) or wider.

          +
          +
          +
          +
          +
          +
          + +
          +
          +

          + Text transform +

          +
          + + + +
          +
          +
          +
          +
          + Quickly change the weight (boldness) of text with .font-weight-bold or italicize text with .font-italic. Reset boldness of text with .font-weight-bold. Try various font weights using .fw-{300,400,500,700,900} +
          +
          +
          +

          Sample text

          +

          Sample light text

          +

          Sample bold text

          +

          Sample bolder text

          +

          Sample boldest text

          +

          Sample light & italic text

          +

          Sample boldest & underline text

          +
          +
          +
          +
          +

          Lowercased text

          +

          Uppercased text

          +

          CapiTaliZed text

          +

          light text with lower case

          +

          Bold text with uppercase

          +

          Bolder capitalized text

          +

          Boldest text with uppercase & italic font

          +
          +
          +
          +
          +
          +
          +
          +

          + Font Colors +

          +
          + + + +
          +
          +
          +
          +
          + Convey meaning through color with a handful of color utility classes. Includes support for styling links with hover states, too. Reset colors using .text-reset class. +
          +
          +

          Primary state text

          +

          Success state text

          +

          Warning state text

          +

          Info state text

          +

          Danger state text

          +

          Text gradient

          +

          Light state text

          +

          Dark state text

          +

          Fontweight Normal

          +

          Muted state text

          +

          + Muted text with a reset link. +

          +
          +
          +
          +
          +
          +
          +

          + Font sizes +

          +
          + + + +
          +
          +
          +
          +
          + Change font sizes at quickly with .fs-nano or h{1-6} classes. +
          +
          + + .fs-xxl + + + .fs-xl + + + .fs-lg + + + .fs-md + + + .fs-sm + + + .fs-xs + + + .fs-nano + +
          +
          + + .h6 + + + .h5 + + + .h4 + + + .h3 + + + .h2 + + + .h1 + +
          +
          +
          +
          + +
          +
          +

          + Link States +

          +
          + + + +
          +
          + +
          + +
          +
          +

          + Unstyled list +

          +
          + + + +
          +
          +
          +
          +
          + Remove the default list-style and left margin on list items (immediate children only). This only applies to immediate children list items, meaning you will need to add the class for any nested lists as well. +
          +
          +
            +
          • Lorem ipsum dolor sit amet
          • +
          • Consectetur adipiscing elit
          • +
          • Integer molestie lorem at massa
          • +
          • Facilisis in pretium nisl aliquet
          • +
          • + Nulla volutpat aliquam velit +
              +
            • Phasellus iaculis neque
            • +
            • Purus sodales ultricies
            • +
            • Vestibulum laoreet porttitor sem
            • +
            • Ac tristique libero volutpat at
            • +
            +
          • +
          • Faucibus porta lacus fringilla vel
          • +
          • Aenean sit amet erat nunc
          • +
          • Eget porttitor lorem
          • +
          +
          +
          +
          +
          +
          +
          +

          + Inline list +

          +
          + + + +
          +
          +
          +
          +
          + Remove a list's bullets and apply some light margin with a combination of two classes, .list-inline and .list-inline-item +
          +
          +
            +
          • Lorem ipsum
          • +
          • Phasellus iaculis
          • +
          • Nulla volutpat
          • +
          +
          +
          +
          +
          +
          +
          +

          + Description list alignment +

          +
          + + + +
          +
          +
          +
          +
          + Align terms and descriptions horizontally by using our grid system's predefined classes (or semantic mixins). For longer terms, you can optionally add a .text-truncate class to truncate the text with an ellipsis +
          +
          +
          +
          Description lists
          +
          A description list is perfect for defining terms.
          +
          Euismod
          +
          +

          Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.

          +

          Donec id elit non mi porta gravida at eget metus.

          +
          +
          Malesuada porta
          +
          Etiam porta sem malesuada magna mollis euismod.
          +
          Truncated term is truncated
          +
          Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
          +
          Nesting
          +
          +
          +
          Nested definition list
          +
          Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc.
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +

          + Monospace font +

          +
          + + + +
          +
          +
          +
          +
          + Change a selection to our monospace font stack with .font-monospace +
          +
          +

          This is in monospace

          +
          +
          +
          +
          +
          +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities-visibility-generator.html b/legacy/smartadmin/utilities-visibility-generator.html new file mode 100644 index 0000000..13e7e48 --- /dev/null +++ b/legacy/smartadmin/utilities-visibility-generator.html @@ -0,0 +1,1951 @@ + + + + + + + + Visibility Generator | SmartAdmin - Enterprise Admin Dashboard by Webora + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + +
          + + + +
          + + + + + +
          +
          + +
          + + +

          Visibility Generator

          + + + + + + +
          Create responsive visibility classes for elements across screen sizes.
          + + +
          + +
          +
          About Visibility Classes
          +

          Bootstrap provides utility classes to control the visibility and display properties of elements based on screen size. + This tool helps you generate the classes you need for responsive design. Combine display types with breakpoints to create + elements that show or hide at specific screen sizes.

          +
          + +
          +
          +
          +
          Visibility Mode
          +
          +
          + + +
          +
          + + +
          +
          +
          + +
          +
          Display Type
          +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          +
          + +
          +
          + Breakpoints + Current: ... +
          + +
          +
          + + +
          +
          + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + + +
          +
          + +
          +
          +
          Generated Classes (Copy these)
          +
          + Select options and click "Generate Classes" to see the result. + +
          + +
          +
          + xs + sm + md + lg + xl + xxl +
          +
          +
          This element will update based on your selections
          +
          +
          + +
          + +
          +
          +
          + /* CSS will appear here */ +
          + +
          +
          +
          +
          +
          +
          +
          +
          +
          + +
          + +
          + +
          + + + +
          + + + +
          + +
          + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/legacy/smartadmin/utilities_borders.html b/legacy/smartadmin/utilities_borders.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/utilities_borders.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/utilities_color_pallet.html b/legacy/smartadmin/utilities_color_pallet.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/utilities_color_pallet.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/visibilitygenerator.html b/legacy/smartadmin/visibilitygenerator.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/visibilitygenerator.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/legacy/smartadmin/webfonts/fontawesome/fontawesome.css b/legacy/smartadmin/webfonts/fontawesome/fontawesome.css new file mode 100644 index 0000000..a2461c5 --- /dev/null +++ b/legacy/smartadmin/webfonts/fontawesome/fontawesome.css @@ -0,0 +1,22 @@ +@charset "UTF-8";/*! + * Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-abacus:before{content:"\f640"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acorn:before{content:"\f6ae"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-conditioner:before{content:"\f8f4"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-album:before{content:"\f89f"}.fa-album-collection:before{content:"\f8a0"}.fa-algolia:before{content:"\f36c"}.fa-alicorn:before{content:"\f6b0"}.fa-alien:before{content:"\f8f5"}.fa-alien-monster:before{content:"\f8f6"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-amp-guitar:before{content:"\f8a1"}.fa-analytics:before{content:"\f643"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angel:before{content:"\f779"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-crate:before{content:"\f6b1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-alt-down:before{content:"\f354"}.fa-arrow-alt-from-bottom:before{content:"\f346"}.fa-arrow-alt-from-left:before{content:"\f347"}.fa-arrow-alt-from-right:before{content:"\f348"}.fa-arrow-alt-from-top:before{content:"\f349"}.fa-arrow-alt-left:before{content:"\f355"}.fa-arrow-alt-right:before{content:"\f356"}.fa-arrow-alt-square-down:before{content:"\f350"}.fa-arrow-alt-square-left:before{content:"\f351"}.fa-arrow-alt-square-right:before{content:"\f352"}.fa-arrow-alt-square-up:before{content:"\f353"}.fa-arrow-alt-to-bottom:before{content:"\f34a"}.fa-arrow-alt-to-left:before{content:"\f34b"}.fa-arrow-alt-to-right:before{content:"\f34c"}.fa-arrow-alt-to-top:before{content:"\f34d"}.fa-arrow-alt-up:before{content:"\f357"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-from-bottom:before{content:"\f342"}.fa-arrow-from-left:before{content:"\f343"}.fa-arrow-from-right:before{content:"\f344"}.fa-arrow-from-top:before{content:"\f345"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-square-down:before{content:"\f339"}.fa-arrow-square-left:before{content:"\f33a"}.fa-arrow-square-right:before{content:"\f33b"}.fa-arrow-square-up:before{content:"\f33c"}.fa-arrow-to-bottom:before{content:"\f33d"}.fa-arrow-to-left:before{content:"\f33e"}.fa-arrow-to-right:before{content:"\f340"}.fa-arrow-to-top:before{content:"\f341"}.fa-arrow-up:before{content:"\f062"}.fa-arrows:before{content:"\f047"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-arrows-h:before{content:"\f07e"}.fa-arrows-v:before{content:"\f07d"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-atom-alt:before{content:"\f5d3"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-axe:before{content:"\f6b2"}.fa-axe-battle:before{content:"\f6b3"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backpack:before{content:"\f5d4"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"陵"}.fa-bacterium:before{content:"讀"}.fa-badge:before{content:"\f335"}.fa-badge-check:before{content:"\f336"}.fa-badge-dollar:before{content:"\f645"}.fa-badge-percent:before{content:"\f646"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-badger-honey:before{content:"\f6b4"}.fa-bags-shopping:before{content:"\f847"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ball-pile:before{content:"\f77e"}.fa-ballot:before{content:"\f732"}.fa-ballot-check:before{content:"\f733"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-banjo:before{content:"\f8a3"}.fa-barcode:before{content:"\f02a"}.fa-barcode-alt:before{content:"\f463"}.fa-barcode-read:before{content:"\f464"}.fa-barcode-scan:before{content:"\f465"}.fa-bars:before{content:"\f0c9"}.fa-baseball:before{content:"\f432"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-basketball-hoop:before{content:"\f435"}.fa-bat:before{content:"\f6b5"}.fa-bath:before{content:"\f2cd"}.fa-battery-bolt:before{content:"\f376"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-slash:before{content:"\f377"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-bed-alt:before{content:"\f8f7"}.fa-bed-bunk:before{content:"\f8f8"}.fa-bed-empty:before{content:"\f8f9"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-exclamation:before{content:"\f848"}.fa-bell-on:before{content:"\f8fa"}.fa-bell-plus:before{content:"\f849"}.fa-bell-school:before{content:"\f5d5"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-bell-slash:before{content:"\f1f6"}.fa-bells:before{content:"\f77f"}.fa-betamax:before{content:"\f8a4"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-biking-mountain:before{content:"\f84b"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blanket:before{content:"\f498"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blinds:before{content:"\f8fb"}.fa-blinds-open:before{content:"\f8fc"}.fa-blinds-raised:before{content:"\f8fd"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bone-break:before{content:"\f5d8"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-alt:before{content:"\f5d9"}.fa-book-dead:before{content:"\f6b7"}.fa-book-heart:before{content:"\f499"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-book-spells:before{content:"\f6b8"}.fa-book-user:before{content:"\f7e7"}.fa-bookmark:before{content:"\f02e"}.fa-books:before{content:"\f5db"}.fa-books-medical:before{content:"\f7e8"}.fa-boombox:before{content:"\f8a5"}.fa-boot:before{content:"\f782"}.fa-booth-curtain:before{content:"\f734"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-bottom:before{content:"\f84d"}.fa-border-center-h:before{content:"\f89c"}.fa-border-center-v:before{content:"\f89d"}.fa-border-inner:before{content:"\f84e"}.fa-border-left:before{content:"\f84f"}.fa-border-none:before{content:"\f850"}.fa-border-outer:before{content:"\f851"}.fa-border-right:before{content:"\f852"}.fa-border-style:before{content:"\f853"}.fa-border-style-alt:before{content:"\f854"}.fa-border-top:before{content:"\f855"}.fa-bow-arrow:before{content:"\f6b9"}.fa-bowling-ball:before{content:"\f436"}.fa-bowling-pins:before{content:"\f437"}.fa-box:before{content:"\f466"}.fa-box-alt:before{content:"\f49a"}.fa-box-ballot:before{content:"\f735"}.fa-box-check:before{content:"\f467"}.fa-box-fragile:before{content:"\f49b"}.fa-box-full:before{content:"\f49c"}.fa-box-heart:before{content:"\f49d"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"拏"}.fa-box-up:before{content:"\f49f"}.fa-box-usd:before{content:"\f4a0"}.fa-boxes:before{content:"\f468"}.fa-boxes-alt:before{content:"\f4a1"}.fa-boxing-glove:before{content:"\f438"}.fa-brackets:before{content:"\f7e9"}.fa-brackets-curly:before{content:"\f7ea"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-loaf:before{content:"\f7eb"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-bring-forward:before{content:"\f856"}.fa-bring-front:before{content:"\f857"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-browser:before{content:"\f37e"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-bullseye-arrow:before{content:"\f648"}.fa-bullseye-pointer:before{content:"\f649"}.fa-burger-soda:before{content:"\f858"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-burrito:before{content:"\f7ed"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-bus-school:before{content:"\f5dd"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-cabinet-filing:before{content:"\f64b"}.fa-cactus:before{content:"\f8a7"}.fa-calculator:before{content:"\f1ec"}.fa-calculator-alt:before{content:"\f64c"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-edit:before{content:"\f333"}.fa-calendar-exclamation:before{content:"\f334"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-star:before{content:"\f736"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camcorder:before{content:"\f8a8"}.fa-camera:before{content:"\f030"}.fa-camera-alt:before{content:"\f332"}.fa-camera-home:before{content:"\f8fe"}.fa-camera-movie:before{content:"\f8a9"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-retro:before{content:"\f083"}.fa-campfire:before{content:"\f6ba"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candle-holder:before{content:"\f6bc"}.fa-candy-cane:before{content:"\f786"}.fa-candy-corn:before{content:"\f6bd"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-building:before{content:"\f859"}.fa-car-bump:before{content:"\f5e0"}.fa-car-bus:before{content:"\f85a"}.fa-car-crash:before{content:"\f5e1"}.fa-car-garage:before{content:"\f5e2"}.fa-car-mechanic:before{content:"\f5e3"}.fa-car-side:before{content:"\f5e4"}.fa-car-tilt:before{content:"\f5e5"}.fa-car-wash:before{content:"\f5e6"}.fa-caravan:before{content:"\f8ff"}.fa-caravan-alt:before{content:"豈"}.fa-caret-circle-down:before{content:"\f32d"}.fa-caret-circle-left:before{content:"\f32e"}.fa-caret-circle-right:before{content:"\f330"}.fa-caret-circle-up:before{content:"\f331"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cars:before{content:"\f85b"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cassette-tape:before{content:"\f8ab"}.fa-cat:before{content:"\f6be"}.fa-cat-space:before{content:"更"}.fa-cauldron:before{content:"\f6bf"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-cctv:before{content:"\f8ac"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chair-office:before{content:"\f6c1"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-line-down:before{content:"\f64d"}.fa-chart-network:before{content:"\f78a"}.fa-chart-pie:before{content:"\f200"}.fa-chart-pie-alt:before{content:"\f64e"}.fa-chart-scatter:before{content:"\f7ee"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-cheeseburger:before{content:"\f7f1"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-bishop-alt:before{content:"\f43b"}.fa-chess-board:before{content:"\f43c"}.fa-chess-clock:before{content:"\f43d"}.fa-chess-clock-alt:before{content:"\f43e"}.fa-chess-king:before{content:"\f43f"}.fa-chess-king-alt:before{content:"\f440"}.fa-chess-knight:before{content:"\f441"}.fa-chess-knight-alt:before{content:"\f442"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-pawn-alt:before{content:"\f444"}.fa-chess-queen:before{content:"\f445"}.fa-chess-queen-alt:before{content:"\f446"}.fa-chess-rook:before{content:"\f447"}.fa-chess-rook-alt:before{content:"\f448"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-double-down:before{content:"\f322"}.fa-chevron-double-left:before{content:"\f323"}.fa-chevron-double-right:before{content:"\f324"}.fa-chevron-double-up:before{content:"\f325"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-square-down:before{content:"\f329"}.fa-chevron-square-left:before{content:"\f32a"}.fa-chevron-square-right:before{content:"\f32b"}.fa-chevron-square-up:before{content:"\f32c"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chimney:before{content:"\f78b"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clarinet:before{content:"\f8ad"}.fa-claw-marks:before{content:"\f6c2"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-list-check:before{content:"\f737"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-drizzle:before{content:"\f738"}.fa-cloud-hail:before{content:"\f739"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-music:before{content:"\f8ae"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-cloud-showers:before{content:"\f73f"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sleet:before{content:"\f741"}.fa-cloud-snow:before{content:"\f742"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-clouds:before{content:"\f744"}.fa-clouds-moon:before{content:"\f745"}.fa-clouds-sun:before{content:"\f746"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-club:before{content:"\f327"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-merge:before{content:"\f387"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-coffee-pot:before{content:"車"}.fa-coffee-togo:before{content:"\f6c5"}.fa-coffin:before{content:"\f6c6"}.fa-coffin-cross:before{content:"陋"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coin:before{content:"\f85c"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comet:before{content:"賈"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-alt-check:before{content:"\f4a2"}.fa-comment-alt-dollar:before{content:"\f650"}.fa-comment-alt-dots:before{content:"\f4a3"}.fa-comment-alt-edit:before{content:"\f4a4"}.fa-comment-alt-exclamation:before{content:"\f4a5"}.fa-comment-alt-lines:before{content:"\f4a6"}.fa-comment-alt-medical:before{content:"\f7f4"}.fa-comment-alt-minus:before{content:"\f4a7"}.fa-comment-alt-music:before{content:"\f8af"}.fa-comment-alt-plus:before{content:"\f4a8"}.fa-comment-alt-slash:before{content:"\f4a9"}.fa-comment-alt-smile:before{content:"\f4aa"}.fa-comment-alt-times:before{content:"\f4ab"}.fa-comment-check:before{content:"\f4ac"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-edit:before{content:"\f4ae"}.fa-comment-exclamation:before{content:"\f4af"}.fa-comment-lines:before{content:"\f4b0"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-minus:before{content:"\f4b1"}.fa-comment-music:before{content:"\f8b0"}.fa-comment-plus:before{content:"\f4b2"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-smile:before{content:"\f4b4"}.fa-comment-times:before{content:"\f4b5"}.fa-comments:before{content:"\f086"}.fa-comments-alt:before{content:"\f4b6"}.fa-comments-alt-dollar:before{content:"\f652"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-slash:before{content:"\f5e9"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-compress-wide:before{content:"\f326"}.fa-computer-classic:before{content:"\f8b1"}.fa-computer-speaker:before{content:"\f8b2"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-construction:before{content:"\f85d"}.fa-container-storage:before{content:"\f4b7"}.fa-contao:before{content:"\f26d"}.fa-conveyor-belt:before{content:"\f46e"}.fa-conveyor-belt-alt:before{content:"\f46f"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-corn:before{content:"\f6c7"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-cowbell:before{content:"\f8b3"}.fa-cowbell-more:before{content:"\f8b4"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-credit-card-blank:before{content:"\f389"}.fa-credit-card-front:before{content:"\f38a"}.fa-cricket:before{content:"\f449"}.fa-critical-role:before{content:"\f6c9"}.fa-croissant:before{content:"\f7f6"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-crutches:before{content:"\f7f8"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-curling:before{content:"\f44a"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dagger:before{content:"\f6cb"}.fa-dailymotion:before{content:"勒"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-debug:before{content:"\f7f9"}.fa-deer:before{content:"\f78e"}.fa-deer-rudolph:before{content:"\f78f"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-desktop-alt:before{content:"\f390"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dewpoint:before{content:"\f748"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diamond:before{content:"\f219"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d10:before{content:"\f6cd"}.fa-dice-d12:before{content:"\f6ce"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d4:before{content:"\f6d0"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-d8:before{content:"\f6d2"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digging:before{content:"\f85e"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-diploma:before{content:"\f5ea"}.fa-directions:before{content:"\f5eb"}.fa-disc-drive:before{content:"\f8b5"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-do-not-enter:before{content:"\f5ec"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dog-leashed:before{content:"\f6d4"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-empty:before{content:"\f473"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-circle:before{content:"\f5ed"}.fa-draw-polygon:before{content:"\f5ee"}.fa-draw-square:before{content:"\f5ef"}.fa-dreidel:before{content:"\f792"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-drone:before{content:"\f85f"}.fa-drone-alt:before{content:"\f860"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick:before{content:"\f6d6"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dryer:before{content:"\f861"}.fa-dryer-alt:before{content:"\f862"}.fa-duck:before{content:"\f6d8"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-ear:before{content:"\f5f0"}.fa-ear-muffs:before{content:"\f795"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-eclipse:before{content:"\f749"}.fa-eclipse-alt:before{content:"\f74a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-egg-fried:before{content:"\f7fc"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-elephant:before{content:"\f6da"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-h-alt:before{content:"\f39b"}.fa-ellipsis-v:before{content:"\f142"}.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-empty-set:before{content:"\f656"}.fa-engine-warning:before{content:"\f5f2"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange:before{content:"\f0ec"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-square:before{content:"\f321"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows:before{content:"\f31d"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expand-wide:before{content:"\f320"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link:before{content:"\f08e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square:before{content:"\f14c"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-evil:before{content:"\f6db"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fan-table:before{content:"滑"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-farm:before{content:"\f864"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"串"}.fa-faucet-drip:before{content:"句"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-field-hockey:before{content:"\f44c"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-certificate:before{content:"\f5f3"}.fa-file-chart-line:before{content:"\f659"}.fa-file-chart-pie:before{content:"\f65a"}.fa-file-check:before{content:"\f316"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-edit:before{content:"\f31c"}.fa-file-excel:before{content:"\f1c3"}.fa-file-exclamation:before{content:"\f31a"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-minus:before{content:"\f318"}.fa-file-music:before{content:"\f8b6"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-plus:before{content:"\f319"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-search:before{content:"\f865"}.fa-file-signature:before{content:"\f573"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-file-times:before{content:"\f317"}.fa-file-upload:before{content:"\f574"}.fa-file-user:before{content:"\f65c"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-files-medical:before{content:"\f7fd"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-film-alt:before{content:"\f3a0"}.fa-film-canister:before{content:"\f8b7"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-smoke:before{content:"\f74b"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"龜"}.fa-fireplace:before{content:"\f79a"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fish-cooked:before{content:"\f7fe"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-alt:before{content:"\f74c"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flame:before{content:"\f6df"}.fa-flashlight:before{content:"\f8b8"}.fa-flask:before{content:"\f0c3"}.fa-flask-poison:before{content:"\f6e0"}.fa-flask-potion:before{content:"\f6e1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flower:before{content:"\f7ff"}.fa-flower-daffodil:before{content:"\f800"}.fa-flower-tulip:before{content:"\f801"}.fa-flushed:before{content:"\f579"}.fa-flute:before{content:"\f8b9"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-fly:before{content:"\f417"}.fa-fog:before{content:"\f74e"}.fa-folder:before{content:"\f07b"}.fa-folder-download:before{content:"肋"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-times:before{content:"\f65f"}.fa-folder-tree:before{content:"\f802"}.fa-folder-upload:before{content:"凜"}.fa-folders:before{content:"\f660"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-font-case:before{content:"\f866"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-football-helmet:before{content:"\f44f"}.fa-forklift:before{content:"\f47a"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-fragile:before{content:"\f4bb"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-french-fries:before{content:"\f803"}.fa-frog:before{content:"\f52e"}.fa-frosty-head:before{content:"\f79b"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-function:before{content:"\f661"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-galaxy:before{content:"龜"}.fa-game-board:before{content:"\f867"}.fa-game-board-alt:before{content:"\f868"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-gamepad:before{content:"\f11b"}.fa-gamepad-alt:before{content:"\f8bc"}.fa-garage:before{content:"契"}.fa-garage-car:before{content:"金"}.fa-garage-open:before{content:"喇"}.fa-gas-pump:before{content:"\f52f"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gift-card:before{content:"\f663"}.fa-gifts:before{content:"\f79c"}.fa-gingerbread-man:before{content:"\f79d"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass:before{content:"\f804"}.fa-glass-champagne:before{content:"\f79e"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-citrus:before{content:"\f869"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glass-whiskey-rocks:before{content:"\f7a1"}.fa-glasses:before{content:"\f530"}.fa-glasses-alt:before{content:"\f5f5"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-globe-snow:before{content:"\f7a3"}.fa-globe-stand:before{content:"\f5f6"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-golf-club:before{content:"\f451"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gramophone:before{content:"\f8bd"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-guitar-electric:before{content:"\f8be"}.fa-guitars:before{content:"\f8bf"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-h1:before{content:"\f313"}.fa-h2:before{content:"\f314"}.fa-h3:before{content:"\f315"}.fa-h4:before{content:"\f86a"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hammer-war:before{content:"\f6e4"}.fa-hamsa:before{content:"\f665"}.fa-hand-heart:before{content:"\f4bc"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-box:before{content:"\f47b"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-hand-holding-medical:before{content:"樂"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-receiving:before{content:"\f47c"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"諾"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-heart:before{content:"\f4c3"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-usd:before{content:"\f4c5"}.fa-hands-wash:before{content:"丹"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt:before{content:"\f4c6"}.fa-handshake-alt-slash:before{content:"寧"}.fa-handshake-slash:before{content:"怒"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-chef:before{content:"\f86b"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-santa:before{content:"\f7a7"}.fa-hat-winter:before{content:"\f7a8"}.fa-hat-witch:before{content:"\f6e7"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side:before{content:"\f6e9"}.fa-head-side-brain:before{content:"\f808"}.fa-head-side-cough:before{content:"率"}.fa-head-side-cough-slash:before{content:"異"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-head-side-mask:before{content:"北"}.fa-head-side-medical:before{content:"\f809"}.fa-head-side-virus:before{content:"磻"}.fa-head-vr:before{content:"\f6ea"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heart-circle:before{content:"\f4c7"}.fa-heart-rate:before{content:"\f5f8"}.fa-heart-square:before{content:"\f4c8"}.fa-heartbeat:before{content:"\f21e"}.fa-heat:before{content:"奈"}.fa-helicopter:before{content:"\f533"}.fa-helmet-battle:before{content:"\f6eb"}.fa-hexagon:before{content:"\f312"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-mask:before{content:"\f6ee"}.fa-hockey-puck:before{content:"\f453"}.fa-hockey-sticks:before{content:"\f454"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-home-alt:before{content:"\f80a"}.fa-home-heart:before{content:"\f4c9"}.fa-home-lg:before{content:"\f80b"}.fa-home-lg-alt:before{content:"\f80c"}.fa-hood-cloak:before{content:"\f6ef"}.fa-hooli:before{content:"\f427"}.fa-horizontal-rule:before{content:"\f86c"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-horse-saddle:before{content:"\f8c3"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hospitals:before{content:"\f80e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house:before{content:"懶"}.fa-house-damage:before{content:"\f6f1"}.fa-house-day:before{content:"癩"}.fa-house-flood:before{content:"\f74f"}.fa-house-leave:before{content:"羅"}.fa-house-night:before{content:"蘿"}.fa-house-return:before{content:"螺"}.fa-house-signal:before{content:"裸"}.fa-house-user:before{content:"便"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-humidity:before{content:"\f750"}.fa-hurricane:before{content:"\f751"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-ice-skate:before{content:"\f7ac"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-icons-alt:before{content:"\f86e"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"邏"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-polaroid:before{content:"\f8c4"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-inbox-in:before{content:"\f310"}.fa-inbox-out:before{content:"\f311"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-industry-alt:before{content:"\f3b3"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-info-square:before{content:"\f30f"}.fa-inhaler:before{content:"\f5f9"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"凌"}.fa-integral:before{content:"\f667"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-intersection:before{content:"\f668"}.fa-inventory:before{content:"\f480"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-island-tropical:before{content:"\f811"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-joystick:before{content:"\f8c5"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-jug:before{content:"\f8c6"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-kazoo:before{content:"\f8c7"}.fa-kerning:before{content:"\f86f"}.fa-key:before{content:"\f084"}.fa-key-skeleton:before{content:"\f6f3"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-keynote:before{content:"\f66c"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kidneys:before{content:"\f5fb"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kite:before{content:"\f6f4"}.fa-kiwi-bird:before{content:"\f535"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-korvue:before{content:"\f42f"}.fa-lambda:before{content:"\f66e"}.fa-lamp:before{content:"\f4ca"}.fa-lamp-desk:before{content:"樂"}.fa-lamp-floor:before{content:"洛"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before{content:"\f752"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"復"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lasso:before{content:"\f8c8"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-layer-minus:before{content:"\f5fe"}.fa-layer-plus:before{content:"\f5ff"}.fa-leaf:before{content:"\f06c"}.fa-leaf-heart:before{content:"\f4cb"}.fa-leaf-maple:before{content:"\f6f6"}.fa-leaf-oak:before{content:"\f6f7"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down:before{content:"\f149"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up:before{content:"\f148"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-light-ceiling:before{content:"烙"}.fa-light-switch:before{content:"珞"}.fa-light-switch-off:before{content:"落"}.fa-light-switch-on:before{content:"酪"}.fa-lightbulb:before{content:"\f0eb"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-lightbulb-on:before{content:"\f672"}.fa-lightbulb-slash:before{content:"\f673"}.fa-lights-holiday:before{content:"\f7b2"}.fa-line:before{content:"\f3c0"}.fa-line-columns:before{content:"\f870"}.fa-line-height:before{content:"\f871"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lips:before{content:"\f600"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-music:before{content:"\f8c9"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location:before{content:"\f601"}.fa-location-arrow:before{content:"\f124"}.fa-location-circle:before{content:"\f602"}.fa-location-slash:before{content:"\f603"}.fa-lock:before{content:"\f023"}.fa-lock-alt:before{content:"\f30d"}.fa-lock-open:before{content:"\f3c1"}.fa-lock-open-alt:before{content:"\f3c2"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-long-arrow-up:before{content:"\f176"}.fa-loveseat:before{content:"\f4cc"}.fa-low-vision:before{content:"\f2a8"}.fa-luchador:before{content:"\f455"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"不"}.fa-lyft:before{content:"\f3c3"}.fa-mace:before{content:"\f6f8"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailbox:before{content:"\f813"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-mandolin:before{content:"\f6f9"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-marker-alt-slash:before{content:"\f605"}.fa-map-marker-check:before{content:"\f606"}.fa-map-marker-edit:before{content:"\f607"}.fa-map-marker-exclamation:before{content:"\f608"}.fa-map-marker-minus:before{content:"\f609"}.fa-map-marker-plus:before{content:"\f60a"}.fa-map-marker-question:before{content:"\f60b"}.fa-map-marker-slash:before{content:"\f60c"}.fa-map-marker-smile:before{content:"\f60d"}.fa-map-marker-times:before{content:"\f60e"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-meat:before{content:"\f814"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaphone:before{content:"\f675"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"駱"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microphone-stand:before{content:"\f8cb"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-microwave:before{content:"亂"}.fa-mind-share:before{content:"\f677"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-hexagon:before{content:"\f307"}.fa-minus-octagon:before{content:"\f308"}.fa-minus-square:before{content:"\f146"}.fa-mistletoe:before{content:"\f7b4"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"稜"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-mobile-android:before{content:"\f3ce"}.fa-mobile-android-alt:before{content:"\f3cf"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-money-check-edit:before{content:"\f872"}.fa-money-check-edit-alt:before{content:"\f873"}.fa-monitor-heart-rate:before{content:"\f611"}.fa-monkey:before{content:"\f6fb"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-moon-cloud:before{content:"\f754"}.fa-moon-stars:before{content:"\f755"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mountains:before{content:"\f6fd"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-alt:before{content:"\f8cd"}.fa-mouse-pointer:before{content:"\f245"}.fa-mp3-player:before{content:"\f8ce"}.fa-mug:before{content:"\f874"}.fa-mug-hot:before{content:"\f7b6"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-mug-tea:before{content:"\f875"}.fa-music:before{content:"\f001"}.fa-music-alt:before{content:"\f8cf"}.fa-music-alt-slash:before{content:"\f8d0"}.fa-music-slash:before{content:"\f8d1"}.fa-napster:before{content:"\f3d2"}.fa-narwhal:before{content:"\f6fe"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octagon:before{content:"\f306"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-oil-temp:before{content:"\f614"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-omega:before{content:"\f67a"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-ornament:before{content:"\f7b8"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-outlet:before{content:"卵"}.fa-oven:before{content:"欄"}.fa-overline:before{content:"\f876"}.fa-page-break:before{content:"\f877"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-brush-alt:before{content:"\f5a9"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-pallet-alt:before{content:"\f483"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paragraph-rtl:before{content:"\f878"}.fa-parking:before{content:"\f540"}.fa-parking-circle:before{content:"\f615"}.fa-parking-circle-slash:before{content:"\f616"}.fa-parking-slash:before{content:"\f617"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paw-alt:before{content:"\f701"}.fa-paw-claws:before{content:"\f702"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pegasus:before{content:"\f703"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil:before{content:"\f040"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-paintbrush:before{content:"\f618"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-pennant:before{content:"\f456"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"泌"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-person-carry:before{content:"\f4cf"}.fa-person-dolly:before{content:"\f4d0"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-person-sign:before{content:"\f757"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-laptop:before{content:"\f87a"}.fa-phone-office:before{content:"\f67d"}.fa-phone-plus:before{content:"\f4d2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pi:before{content:"\f67e"}.fa-piano:before{content:"\f8d4"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-pie:before{content:"\f705"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"爛"}.fa-pig:before{content:"\f706"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza:before{content:"\f817"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-alt:before{content:"\f3de"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"數"}.fa-planet-moon:before{content:"蘭"}.fa-planet-ringed:before{content:"鸞"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-hexagon:before{content:"\f300"}.fa-plus-octagon:before{content:"\f301"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-podium:before{content:"\f680"}.fa-podium-star:before{content:"\f758"}.fa-police-box:before{content:"嵐"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poll-people:before{content:"\f759"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-popcorn:before{content:"\f819"}.fa-portal-enter:before{content:"濫"}.fa-portal-exit:before{content:"藍"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-presentation:before{content:"\f685"}.fa-print:before{content:"\f02f"}.fa-print-search:before{content:"\f81a"}.fa-print-slash:before{content:"\f686"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-projector:before{content:"\f8d6"}.fa-pump-medical:before{content:"索"}.fa-pump-soap:before{content:"參"}.fa-pumpkin:before{content:"\f707"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-question-square:before{content:"\f2fd"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rabbit:before{content:"\f708"}.fa-rabbit-fast:before{content:"\f709"}.fa-racquet:before{content:"\f45a"}.fa-radar:before{content:"襤"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-radio:before{content:"\f8d7"}.fa-radio-alt:before{content:"\f8d8"}.fa-rainbow:before{content:"\f75b"}.fa-raindrops:before{content:"\f75c"}.fa-ram:before{content:"\f70a"}.fa-ramp-loading:before{content:"\f4d4"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-raygun:before{content:"拉"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-rectangle-landscape:before{content:"\f2fa"}.fa-rectangle-portrait:before{content:"\f2fb"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-refrigerator:before{content:"臘"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-repeat:before{content:"\f363"}.fa-repeat-1:before{content:"\f365"}.fa-repeat-1-alt:before{content:"\f366"}.fa-repeat-alt:before{content:"\f364"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-retweet-alt:before{content:"\f361"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-rings-wedding:before{content:"\f81b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocket-launch:before{content:"蠟"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-route-highway:before{content:"\f61a"}.fa-route-interstate:before{content:"\f61b"}.fa-router:before{content:"\f8da"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-triangle:before{content:"\f61c"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rv:before{content:"\f7be"}.fa-sack:before{content:"\f81c"}.fa-sack-dollar:before{content:"\f81d"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salad:before{content:"\f81e"}.fa-salesforce:before{content:"\f83b"}.fa-sandwich:before{content:"\f81f"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-sausage:before{content:"\f820"}.fa-save:before{content:"\f0c7"}.fa-sax-hot:before{content:"\f8db"}.fa-saxophone:before{content:"\f8dc"}.fa-scalpel:before{content:"\f61d"}.fa-scalpel-path:before{content:"\f61e"}.fa-scanner:before{content:"\f488"}.fa-scanner-image:before{content:"\f8f3"}.fa-scanner-keyboard:before{content:"\f489"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-scarecrow:before{content:"\f70d"}.fa-scarf:before{content:"\f7c1"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-scroll-old:before{content:"\f70f"}.fa-scrubber:before{content:"\f2f8"}.fa-scythe:before{content:"\f710"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-send-back:before{content:"\f87e"}.fa-send-backward:before{content:"\f87f"}.fa-sensor:before{content:"廊"}.fa-sensor-alert:before{content:"朗"}.fa-sensor-fire:before{content:"浪"}.fa-sensor-on:before{content:"狼"}.fa-sensor-smoke:before{content:"郎"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-all:before{content:"\f367"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-sheep:before{content:"\f711"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield:before{content:"\f132"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-check:before{content:"\f2f7"}.fa-shield-cross:before{content:"\f712"}.fa-shield-virus:before{content:"塞"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shipping-timed:before{content:"\f48c"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shish-kebab:before{content:"\f821"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"綾"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shovel:before{content:"\f713"}.fa-shovel-snow:before{content:"\f7c3"}.fa-shower:before{content:"\f2cc"}.fa-shredder:before{content:"\f68a"}.fa-shuttle-van:before{content:"\f5b6"}.fa-shuttlecock:before{content:"\f45b"}.fa-sickle:before{content:"\f822"}.fa-sigma:before{content:"\f68b"}.fa-sign:before{content:"\f4d9"}.fa-sign-in:before{content:"\f090"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out:before{content:"\f08b"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signal-1:before{content:"\f68c"}.fa-signal-2:before{content:"\f68d"}.fa-signal-3:before{content:"\f68e"}.fa-signal-4:before{content:"\f68f"}.fa-signal-alt:before{content:"\f690"}.fa-signal-alt-1:before{content:"\f691"}.fa-signal-alt-2:before{content:"\f692"}.fa-signal-alt-3:before{content:"\f693"}.fa-signal-alt-slash:before{content:"\f694"}.fa-signal-slash:before{content:"\f695"}.fa-signal-stream:before{content:"\f8dd"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"省"}.fa-siren:before{content:"來"}.fa-siren-on:before{content:"冷"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-skeleton:before{content:"\f620"}.fa-sketch:before{content:"\f7c6"}.fa-ski-jump:before{content:"\f7c7"}.fa-ski-lift:before{content:"\f7c8"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-cow:before{content:"\f8de"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sledding:before{content:"\f7cb"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-sliders-h-square:before{content:"\f3f0"}.fa-sliders-v:before{content:"\f3f1"}.fa-sliders-v-square:before{content:"\f3f2"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-plus:before{content:"\f5b9"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoke:before{content:"\f760"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snake:before{content:"\f716"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snooze:before{content:"\f880"}.fa-snow-blowing:before{content:"\f761"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowflakes:before{content:"\f7cf"}.fa-snowman:before{content:"\f7d0"}.fa-snowmobile:before{content:"\f7d1"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"葉"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-solar-system:before{content:"勞"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-alt:before{content:"\f883"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-circle:before{content:"擄"}.fa-sort-circle-down:before{content:"櫓"}.fa-sort-circle-up:before{content:"爐"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-shapes-down:before{content:"\f888"}.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-sort-shapes-up:before{content:"\f88a"}.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-sort-size-down:before{content:"\f88c"}.fa-sort-size-down-alt:before{content:"\f88d"}.fa-sort-size-up:before{content:"\f88e"}.fa-sort-size-up-alt:before{content:"\f88f"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-soup:before{content:"\f823"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-space-station-moon:before{content:"盧"}.fa-space-station-moon-alt:before{content:"老"}.fa-spade:before{content:"\f2f4"}.fa-sparkles:before{content:"\f890"}.fa-speakap:before{content:"\f3f3"}.fa-speaker:before{content:"\f8df"}.fa-speaker-deck:before{content:"\f83c"}.fa-speakers:before{content:"\f8e0"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spider-black-widow:before{content:"\f718"}.fa-spider-web:before{content:"\f719"}.fa-spinner:before{content:"\f110"}.fa-spinner-third:before{content:"\f3f4"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-sprinkler:before{content:"蘆"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root:before{content:"\f697"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-squirrel:before{content:"\f71a"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staff:before{content:"\f71b"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-christmas:before{content:"\f7d4"}.fa-star-exclamation:before{content:"\f2f3"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-star-shooting:before{content:"虜"}.fa-starfighter:before{content:"路"}.fa-starfighter-alt:before{content:"露"}.fa-stars:before{content:"\f762"}.fa-starship:before{content:"魯"}.fa-starship-freighter:before{content:"鷺"}.fa-staylinked:before{content:"\f3f5"}.fa-steak:before{content:"\f824"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-steering-wheel:before{content:"\f622"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stocking:before{content:"\f7d5"}.fa-stomach:before{content:"\f623"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"說"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"殺"}.fa-store-slash:before{content:"辰"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-stretcher:before{content:"\f825"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-cloud:before{content:"\f763"}.fa-sun-dust:before{content:"\f764"}.fa-sun-haze:before{content:"\f765"}.fa-sunglasses:before{content:"\f892"}.fa-sunrise:before{content:"\f766"}.fa-sunset:before{content:"\f767"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-sword:before{content:"\f71c"}.fa-sword-laser:before{content:"碌"}.fa-sword-laser-alt:before{content:"祿"}.fa-swords:before{content:"\f71d"}.fa-swords-laser:before{content:"綠"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablet-android:before{content:"\f3fb"}.fa-tablet-android-alt:before{content:"\f3fc"}.fa-tablet-rugged:before{content:"\f48f"}.fa-tablets:before{content:"\f490"}.fa-tachometer:before{content:"\f0e4"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tachometer-alt-average:before{content:"\f624"}.fa-tachometer-alt-fast:before{content:"\f625"}.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-tachometer-alt-slow:before{content:"\f627"}.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-tachometer-average:before{content:"\f629"}.fa-tachometer-fast:before{content:"\f62a"}.fa-tachometer-fastest:before{content:"\f62b"}.fa-tachometer-slow:before{content:"\f62c"}.fa-tachometer-slowest:before{content:"\f62d"}.fa-taco:before{content:"\f826"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tally:before{content:"\f69c"}.fa-tanakh:before{content:"\f827"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-tasks-alt:before{content:"\f828"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-telescope:before{content:"菉"}.fa-temperature-down:before{content:"錄"}.fa-temperature-frigid:before{content:"\f768"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-hot:before{content:"\f76a"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-up:before{content:"鹿"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-tennis-ball:before{content:"\f45e"}.fa-terminal:before{content:"\f120"}.fa-text:before{content:"\f893"}.fa-text-height:before{content:"\f034"}.fa-text-size:before{content:"\f894"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-theta:before{content:"\f69e"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-thunderstorm:before{content:"\f76c"}.fa-thunderstorm-moon:before{content:"\f76d"}.fa-thunderstorm-sun:before{content:"\f76e"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tilde:before{content:"\f69f"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-times-hexagon:before{content:"\f2ee"}.fa-times-octagon:before{content:"\f2f0"}.fa-times-square:before{content:"\f2d3"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tire:before{content:"\f631"}.fa-tire-flat:before{content:"\f632"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-tire-rugged:before{content:"\f634"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-alt:before{content:"\f71f"}.fa-toilet-paper-slash:before{content:"沈"}.fa-tombstone:before{content:"\f720"}.fa-tombstone-alt:before{content:"\f721"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-toothbrush:before{content:"\f635"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-cone:before{content:"\f636"}.fa-traffic-light:before{content:"\f637"}.fa-traffic-light-go:before{content:"\f638"}.fa-traffic-light-slow:before{content:"\f639"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-trailer:before{content:"論"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-transporter:before{content:"壟"}.fa-transporter-1:before{content:"弄"}.fa-transporter-2:before{content:"籠"}.fa-transporter-3:before{content:"聾"}.fa-transporter-empty:before{content:"牢"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-trash-undo:before{content:"\f895"}.fa-trash-undo-alt:before{content:"\f896"}.fa-treasure-chest:before{content:"\f723"}.fa-tree:before{content:"\f1bb"}.fa-tree-alt:before{content:"\f400"}.fa-tree-christmas:before{content:"\f7db"}.fa-tree-decorated:before{content:"\f7dc"}.fa-tree-large:before{content:"\f7dd"}.fa-tree-palm:before{content:"\f82b"}.fa-trees:before{content:"\f724"}.fa-trello:before{content:"\f181"}.fa-triangle:before{content:"\f2ec"}.fa-triangle-music:before{content:"\f8e2"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-trophy-alt:before{content:"\f2eb"}.fa-truck:before{content:"\f0d1"}.fa-truck-container:before{content:"\f4dc"}.fa-truck-couch:before{content:"\f4dd"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plow:before{content:"\f7de"}.fa-truck-ramp:before{content:"\f4e0"}.fa-trumpet:before{content:"\f8e3"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-turkey:before{content:"\f725"}.fa-turntable:before{content:"\f8e4"}.fa-turtle:before{content:"\f726"}.fa-tv:before{content:"\f26c"}.fa-tv-alt:before{content:"\f8e5"}.fa-tv-music:before{content:"\f8e6"}.fa-tv-retro:before{content:"\f401"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typewriter:before{content:"\f8e7"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-ufo:before{content:"磊"}.fa-ufo-beam:before{content:"賂"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-unicorn:before{content:"\f727"}.fa-union:before{content:"\f6a2"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"雷"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usb-drive:before{content:"\f8e9"}.fa-usd-circle:before{content:"\f2e8"}.fa-usd-square:before{content:"\f2e9"}.fa-user:before{content:"\f007"}.fa-user-alien:before{content:"壘"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-chart:before{content:"\f6a3"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-cowboy:before{content:"\f8ea"}.fa-user-crown:before{content:"\f6a4"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-hard-hat:before{content:"\f82c"}.fa-user-headset:before{content:"\f82d"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-md-chat:before{content:"\f82e"}.fa-user-minus:before{content:"\f503"}.fa-user-music:before{content:"\f8eb"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-robot:before{content:"屢"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-user-unlock:before{content:"菱"}.fa-user-visor:before{content:"樓"}.fa-users:before{content:"\f0c0"}.fa-users-class:before{content:"\f63d"}.fa-users-cog:before{content:"\f509"}.fa-users-crown:before{content:"\f6a5"}.fa-users-medical:before{content:"\f830"}.fa-users-slash:before{content:"拾"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-fork:before{content:"\f2e3"}.fa-utensil-knife:before{content:"\f2e4"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-utensils-alt:before{content:"\f2e6"}.fa-vaadin:before{content:"\f408"}.fa-vacuum:before{content:"淚"}.fa-vacuum-robot:before{content:"漏"}.fa-value-absolute:before{content:"\f6a6"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vhs:before{content:"\f8ec"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-plus:before{content:"\f4e1"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-violin:before{content:"\f8ed"}.fa-virus:before{content:"若"}.fa-virus-slash:before{content:"掠"}.fa-viruses:before{content:"略"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume:before{content:"\f6a8"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-slash:before{content:"\f2e2"}.fa-volume-up:before{content:"\f028"}.fa-vote-nay:before{content:"\f771"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-wagon-covered:before{content:"\f8ee"}.fa-walker:before{content:"\f831"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-wand:before{content:"\f72a"}.fa-wand-magic:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-warehouse-alt:before{content:"\f495"}.fa-washer:before{content:"\f898"}.fa-watch:before{content:"\f2e1"}.fa-watch-calculator:before{content:"\f8f0"}.fa-watch-fitness:before{content:"\f63e"}.fa-water:before{content:"\f773"}.fa-water-lower:before{content:"\f774"}.fa-water-rise:before{content:"\f775"}.fa-wave-sine:before{content:"\f899"}.fa-wave-square:before{content:"\f83e"}.fa-wave-triangle:before{content:"\f89a"}.fa-waveform:before{content:"\f8f1"}.fa-waveform-path:before{content:"\f8f2"}.fa-waze:before{content:"\f83f"}.fa-webcam:before{content:"\f832"}.fa-webcam-slash:before{content:"\f833"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whale:before{content:"\f72c"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheat:before{content:"\f72d"}.fa-wheelchair:before{content:"\f193"}.fa-whistle:before{content:"\f460"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wifi-1:before{content:"\f6aa"}.fa-wifi-2:before{content:"\f6ab"}.fa-wifi-slash:before{content:"\f6ac"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-wind-turbine:before{content:"\f89b"}.fa-wind-warning:before{content:"\f776"}.fa-window:before{content:"\f40e"}.fa-window-alt:before{content:"\f40f"}.fa-window-close:before{content:"\f410"}.fa-window-frame:before{content:"累"}.fa-window-frame-open:before{content:"縷"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-windsock:before{content:"\f777"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wreath:before{content:"\f7e2"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}/*! + * Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(fonts/fa-brands-400.eot);src:url(fonts/fa-brands-400d41d.eot?#iefix) format("embedded-opentype"),url(fonts/fa-brands-400.woff2) format("woff2"),url(fonts/fa-brands-400.woff) format("woff"),url(fonts/fa-brands-400.ttf) format("truetype"),url(fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400}/*! + * Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */@font-face{font-family:"Font Awesome 5 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(fonts/fa-duotone-900.eot);src:url(fonts/fa-duotone-900d41d.eot?#iefix) format("embedded-opentype"),url(fonts/fa-duotone-900.woff2) format("woff2"),url(fonts/fa-duotone-900.woff) format("woff"),url(fonts/fa-duotone-900.ttf) format("truetype"),url(fonts/fa-duotone-900.svg#fontawesome) format("svg")}.fad{position:relative;font-family:"Font Awesome 5 Duotone";font-weight:900}.fad:before{position:absolute;color:var(--fa-primary-color,inherit);opacity:1;opacity:var(--fa-primary-opacity,1)}.fad:after{color:var(--fa-secondary-color,inherit);opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:1;opacity:var(--fa-primary-opacity,1)}.fad.fa-inverse{color:#fff}.fad.fa-stack-1x,.fad.fa-stack-2x{position:absolute}.fad.fa-fw:before,.fad.fa-stack-1x:before,.fad.fa-stack-2x:before{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.fad.fa-abacus:after{content:"\10f640"}.fad.fa-acorn:after{content:"\10f6ae"}.fad.fa-ad:after{content:"\10f641"}.fad.fa-address-book:after{content:"\10f2b9"}.fad.fa-address-card:after{content:"\10f2bb"}.fad.fa-adjust:after{content:"\10f042"}.fad.fa-air-conditioner:after{content:"\10f8f4"}.fad.fa-air-freshener:after{content:"\10f5d0"}.fad.fa-alarm-clock:after{content:"\10f34e"}.fad.fa-alarm-exclamation:after{content:"\10f843"}.fad.fa-alarm-plus:after{content:"\10f844"}.fad.fa-alarm-snooze:after{content:"\10f845"}.fad.fa-album:after{content:"\10f89f"}.fad.fa-album-collection:after{content:"\10f8a0"}.fad.fa-alicorn:after{content:"\10f6b0"}.fad.fa-alien:after{content:"\10f8f5"}.fad.fa-alien-monster:after{content:"\10f8f6"}.fad.fa-align-center:after{content:"\10f037"}.fad.fa-align-justify:after{content:"\10f039"}.fad.fa-align-left:after{content:"\10f036"}.fad.fa-align-right:after{content:"\10f038"}.fad.fa-align-slash:after{content:"\10f846"}.fad.fa-allergies:after{content:"\10f461"}.fad.fa-ambulance:after{content:"\10f0f9"}.fad.fa-american-sign-language-interpreting:after{content:"\10f2a3"}.fad.fa-amp-guitar:after{content:"\10f8a1"}.fad.fa-analytics:after{content:"\10f643"}.fad.fa-anchor:after{content:"\10f13d"}.fad.fa-angel:after{content:"\10f779"}.fad.fa-angle-double-down:after{content:"\10f103"}.fad.fa-angle-double-left:after{content:"\10f100"}.fad.fa-angle-double-right:after{content:"\10f101"}.fad.fa-angle-double-up:after{content:"\10f102"}.fad.fa-angle-down:after{content:"\10f107"}.fad.fa-angle-left:after{content:"\10f104"}.fad.fa-angle-right:after{content:"\10f105"}.fad.fa-angle-up:after{content:"\10f106"}.fad.fa-angry:after{content:"\10f556"}.fad.fa-ankh:after{content:"\10f644"}.fad.fa-apple-alt:after{content:"\10f5d1"}.fad.fa-apple-crate:after{content:"\10f6b1"}.fad.fa-archive:after{content:"\10f187"}.fad.fa-archway:after{content:"\10f557"}.fad.fa-arrow-alt-circle-down:after{content:"\10f358"}.fad.fa-arrow-alt-circle-left:after{content:"\10f359"}.fad.fa-arrow-alt-circle-right:after{content:"\10f35a"}.fad.fa-arrow-alt-circle-up:after{content:"\10f35b"}.fad.fa-arrow-alt-down:after{content:"\10f354"}.fad.fa-arrow-alt-from-bottom:after{content:"\10f346"}.fad.fa-arrow-alt-from-left:after{content:"\10f347"}.fad.fa-arrow-alt-from-right:after{content:"\10f348"}.fad.fa-arrow-alt-from-top:after{content:"\10f349"}.fad.fa-arrow-alt-left:after{content:"\10f355"}.fad.fa-arrow-alt-right:after{content:"\10f356"}.fad.fa-arrow-alt-square-down:after{content:"\10f350"}.fad.fa-arrow-alt-square-left:after{content:"\10f351"}.fad.fa-arrow-alt-square-right:after{content:"\10f352"}.fad.fa-arrow-alt-square-up:after{content:"\10f353"}.fad.fa-arrow-alt-to-bottom:after{content:"\10f34a"}.fad.fa-arrow-alt-to-left:after{content:"\10f34b"}.fad.fa-arrow-alt-to-right:after{content:"\10f34c"}.fad.fa-arrow-alt-to-top:after{content:"\10f34d"}.fad.fa-arrow-alt-up:after{content:"\10f357"}.fad.fa-arrow-circle-down:after{content:"\10f0ab"}.fad.fa-arrow-circle-left:after{content:"\10f0a8"}.fad.fa-arrow-circle-right:after{content:"\10f0a9"}.fad.fa-arrow-circle-up:after{content:"\10f0aa"}.fad.fa-arrow-down:after{content:"\10f063"}.fad.fa-arrow-from-bottom:after{content:"\10f342"}.fad.fa-arrow-from-left:after{content:"\10f343"}.fad.fa-arrow-from-right:after{content:"\10f344"}.fad.fa-arrow-from-top:after{content:"\10f345"}.fad.fa-arrow-left:after{content:"\10f060"}.fad.fa-arrow-right:after{content:"\10f061"}.fad.fa-arrow-square-down:after{content:"\10f339"}.fad.fa-arrow-square-left:after{content:"\10f33a"}.fad.fa-arrow-square-right:after{content:"\10f33b"}.fad.fa-arrow-square-up:after{content:"\10f33c"}.fad.fa-arrow-to-bottom:after{content:"\10f33d"}.fad.fa-arrow-to-left:after{content:"\10f33e"}.fad.fa-arrow-to-right:after{content:"\10f340"}.fad.fa-arrow-to-top:after{content:"\10f341"}.fad.fa-arrow-up:after{content:"\10f062"}.fad.fa-arrows:after{content:"\10f047"}.fad.fa-arrows-alt:after{content:"\10f0b2"}.fad.fa-arrows-alt-h:after{content:"\10f337"}.fad.fa-arrows-alt-v:after{content:"\10f338"}.fad.fa-arrows-h:after{content:"\10f07e"}.fad.fa-arrows-v:after{content:"\10f07d"}.fad.fa-assistive-listening-systems:after{content:"\10f2a2"}.fad.fa-asterisk:after{content:"\10f069"}.fad.fa-at:after{content:"\10f1fa"}.fad.fa-atlas:after{content:"\10f558"}.fad.fa-atom:after{content:"\10f5d2"}.fad.fa-atom-alt:after{content:"\10f5d3"}.fad.fa-audio-description:after{content:"\10f29e"}.fad.fa-award:after{content:"\10f559"}.fad.fa-axe:after{content:"\10f6b2"}.fad.fa-axe-battle:after{content:"\10f6b3"}.fad.fa-baby:after{content:"\10f77c"}.fad.fa-baby-carriage:after{content:"\10f77d"}.fad.fa-backpack:after{content:"\10f5d4"}.fad.fa-backspace:after{content:"\10f55a"}.fad.fa-backward:after{content:"\10f04a"}.fad.fa-bacon:after{content:"\10f7e5"}.fad.fa-bacteria:after{content:"\10f959"}.fad.fa-bacterium:after{content:"\10f95a"}.fad.fa-badge:after{content:"\10f335"}.fad.fa-badge-check:after{content:"\10f336"}.fad.fa-badge-dollar:after{content:"\10f645"}.fad.fa-badge-percent:after{content:"\10f646"}.fad.fa-badge-sheriff:after{content:"\10f8a2"}.fad.fa-badger-honey:after{content:"\10f6b4"}.fad.fa-bags-shopping:after{content:"\10f847"}.fad.fa-bahai:after{content:"\10f666"}.fad.fa-balance-scale:after{content:"\10f24e"}.fad.fa-balance-scale-left:after{content:"\10f515"}.fad.fa-balance-scale-right:after{content:"\10f516"}.fad.fa-ball-pile:after{content:"\10f77e"}.fad.fa-ballot:after{content:"\10f732"}.fad.fa-ballot-check:after{content:"\10f733"}.fad.fa-ban:after{content:"\10f05e"}.fad.fa-band-aid:after{content:"\10f462"}.fad.fa-banjo:after{content:"\10f8a3"}.fad.fa-barcode:after{content:"\10f02a"}.fad.fa-barcode-alt:after{content:"\10f463"}.fad.fa-barcode-read:after{content:"\10f464"}.fad.fa-barcode-scan:after{content:"\10f465"}.fad.fa-bars:after{content:"\10f0c9"}.fad.fa-baseball:after{content:"\10f432"}.fad.fa-baseball-ball:after{content:"\10f433"}.fad.fa-basketball-ball:after{content:"\10f434"}.fad.fa-basketball-hoop:after{content:"\10f435"}.fad.fa-bat:after{content:"\10f6b5"}.fad.fa-bath:after{content:"\10f2cd"}.fad.fa-battery-bolt:after{content:"\10f376"}.fad.fa-battery-empty:after{content:"\10f244"}.fad.fa-battery-full:after{content:"\10f240"}.fad.fa-battery-half:after{content:"\10f242"}.fad.fa-battery-quarter:after{content:"\10f243"}.fad.fa-battery-slash:after{content:"\10f377"}.fad.fa-battery-three-quarters:after{content:"\10f241"}.fad.fa-bed:after{content:"\10f236"}.fad.fa-bed-alt:after{content:"\10f8f7"}.fad.fa-bed-bunk:after{content:"\10f8f8"}.fad.fa-bed-empty:after{content:"\10f8f9"}.fad.fa-beer:after{content:"\10f0fc"}.fad.fa-bell:after{content:"\10f0f3"}.fad.fa-bell-exclamation:after{content:"\10f848"}.fad.fa-bell-on:after{content:"\10f8fa"}.fad.fa-bell-plus:after{content:"\10f849"}.fad.fa-bell-school:after{content:"\10f5d5"}.fad.fa-bell-school-slash:after{content:"\10f5d6"}.fad.fa-bell-slash:after{content:"\10f1f6"}.fad.fa-bells:after{content:"\10f77f"}.fad.fa-betamax:after{content:"\10f8a4"}.fad.fa-bezier-curve:after{content:"\10f55b"}.fad.fa-bible:after{content:"\10f647"}.fad.fa-bicycle:after{content:"\10f206"}.fad.fa-biking:after{content:"\10f84a"}.fad.fa-biking-mountain:after{content:"\10f84b"}.fad.fa-binoculars:after{content:"\10f1e5"}.fad.fa-biohazard:after{content:"\10f780"}.fad.fa-birthday-cake:after{content:"\10f1fd"}.fad.fa-blanket:after{content:"\10f498"}.fad.fa-blender:after{content:"\10f517"}.fad.fa-blender-phone:after{content:"\10f6b6"}.fad.fa-blind:after{content:"\10f29d"}.fad.fa-blinds:after{content:"\10f8fb"}.fad.fa-blinds-open:after{content:"\10f8fc"}.fad.fa-blinds-raised:after{content:"\10f8fd"}.fad.fa-blog:after{content:"\10f781"}.fad.fa-bold:after{content:"\10f032"}.fad.fa-bolt:after{content:"\10f0e7"}.fad.fa-bomb:after{content:"\10f1e2"}.fad.fa-bone:after{content:"\10f5d7"}.fad.fa-bone-break:after{content:"\10f5d8"}.fad.fa-bong:after{content:"\10f55c"}.fad.fa-book:after{content:"\10f02d"}.fad.fa-book-alt:after{content:"\10f5d9"}.fad.fa-book-dead:after{content:"\10f6b7"}.fad.fa-book-heart:after{content:"\10f499"}.fad.fa-book-medical:after{content:"\10f7e6"}.fad.fa-book-open:after{content:"\10f518"}.fad.fa-book-reader:after{content:"\10f5da"}.fad.fa-book-spells:after{content:"\10f6b8"}.fad.fa-book-user:after{content:"\10f7e7"}.fad.fa-bookmark:after{content:"\10f02e"}.fad.fa-books:after{content:"\10f5db"}.fad.fa-books-medical:after{content:"\10f7e8"}.fad.fa-boombox:after{content:"\10f8a5"}.fad.fa-boot:after{content:"\10f782"}.fad.fa-booth-curtain:after{content:"\10f734"}.fad.fa-border-all:after{content:"\10f84c"}.fad.fa-border-bottom:after{content:"\10f84d"}.fad.fa-border-center-h:after{content:"\10f89c"}.fad.fa-border-center-v:after{content:"\10f89d"}.fad.fa-border-inner:after{content:"\10f84e"}.fad.fa-border-left:after{content:"\10f84f"}.fad.fa-border-none:after{content:"\10f850"}.fad.fa-border-outer:after{content:"\10f851"}.fad.fa-border-right:after{content:"\10f852"}.fad.fa-border-style:after{content:"\10f853"}.fad.fa-border-style-alt:after{content:"\10f854"}.fad.fa-border-top:after{content:"\10f855"}.fad.fa-bow-arrow:after{content:"\10f6b9"}.fad.fa-bowling-ball:after{content:"\10f436"}.fad.fa-bowling-pins:after{content:"\10f437"}.fad.fa-box:after{content:"\10f466"}.fad.fa-box-alt:after{content:"\10f49a"}.fad.fa-box-ballot:after{content:"\10f735"}.fad.fa-box-check:after{content:"\10f467"}.fad.fa-box-fragile:after{content:"\10f49b"}.fad.fa-box-full:after{content:"\10f49c"}.fad.fa-box-heart:after{content:"\10f49d"}.fad.fa-box-open:after{content:"\10f49e"}.fad.fa-box-tissue:after{content:"\10f95b"}.fad.fa-box-up:after{content:"\10f49f"}.fad.fa-box-usd:after{content:"\10f4a0"}.fad.fa-boxes:after{content:"\10f468"}.fad.fa-boxes-alt:after{content:"\10f4a1"}.fad.fa-boxing-glove:after{content:"\10f438"}.fad.fa-brackets:after{content:"\10f7e9"}.fad.fa-brackets-curly:after{content:"\10f7ea"}.fad.fa-braille:after{content:"\10f2a1"}.fad.fa-brain:after{content:"\10f5dc"}.fad.fa-bread-loaf:after{content:"\10f7eb"}.fad.fa-bread-slice:after{content:"\10f7ec"}.fad.fa-briefcase:after{content:"\10f0b1"}.fad.fa-briefcase-medical:after{content:"\10f469"}.fad.fa-bring-forward:after{content:"\10f856"}.fad.fa-bring-front:after{content:"\10f857"}.fad.fa-broadcast-tower:after{content:"\10f519"}.fad.fa-broom:after{content:"\10f51a"}.fad.fa-browser:after{content:"\10f37e"}.fad.fa-brush:after{content:"\10f55d"}.fad.fa-bug:after{content:"\10f188"}.fad.fa-building:after{content:"\10f1ad"}.fad.fa-bullhorn:after{content:"\10f0a1"}.fad.fa-bullseye:after{content:"\10f140"}.fad.fa-bullseye-arrow:after{content:"\10f648"}.fad.fa-bullseye-pointer:after{content:"\10f649"}.fad.fa-burger-soda:after{content:"\10f858"}.fad.fa-burn:after{content:"\10f46a"}.fad.fa-burrito:after{content:"\10f7ed"}.fad.fa-bus:after{content:"\10f207"}.fad.fa-bus-alt:after{content:"\10f55e"}.fad.fa-bus-school:after{content:"\10f5dd"}.fad.fa-business-time:after{content:"\10f64a"}.fad.fa-cabinet-filing:after{content:"\10f64b"}.fad.fa-cactus:after{content:"\10f8a7"}.fad.fa-calculator:after{content:"\10f1ec"}.fad.fa-calculator-alt:after{content:"\10f64c"}.fad.fa-calendar:after{content:"\10f133"}.fad.fa-calendar-alt:after{content:"\10f073"}.fad.fa-calendar-check:after{content:"\10f274"}.fad.fa-calendar-day:after{content:"\10f783"}.fad.fa-calendar-edit:after{content:"\10f333"}.fad.fa-calendar-exclamation:after{content:"\10f334"}.fad.fa-calendar-minus:after{content:"\10f272"}.fad.fa-calendar-plus:after{content:"\10f271"}.fad.fa-calendar-star:after{content:"\10f736"}.fad.fa-calendar-times:after{content:"\10f273"}.fad.fa-calendar-week:after{content:"\10f784"}.fad.fa-camcorder:after{content:"\10f8a8"}.fad.fa-camera:after{content:"\10f030"}.fad.fa-camera-alt:after{content:"\10f332"}.fad.fa-camera-home:after{content:"\10f8fe"}.fad.fa-camera-movie:after{content:"\10f8a9"}.fad.fa-camera-polaroid:after{content:"\10f8aa"}.fad.fa-camera-retro:after{content:"\10f083"}.fad.fa-campfire:after{content:"\10f6ba"}.fad.fa-campground:after{content:"\10f6bb"}.fad.fa-candle-holder:after{content:"\10f6bc"}.fad.fa-candy-cane:after{content:"\10f786"}.fad.fa-candy-corn:after{content:"\10f6bd"}.fad.fa-cannabis:after{content:"\10f55f"}.fad.fa-capsules:after{content:"\10f46b"}.fad.fa-car:after{content:"\10f1b9"}.fad.fa-car-alt:after{content:"\10f5de"}.fad.fa-car-battery:after{content:"\10f5df"}.fad.fa-car-building:after{content:"\10f859"}.fad.fa-car-bump:after{content:"\10f5e0"}.fad.fa-car-bus:after{content:"\10f85a"}.fad.fa-car-crash:after{content:"\10f5e1"}.fad.fa-car-garage:after{content:"\10f5e2"}.fad.fa-car-mechanic:after{content:"\10f5e3"}.fad.fa-car-side:after{content:"\10f5e4"}.fad.fa-car-tilt:after{content:"\10f5e5"}.fad.fa-car-wash:after{content:"\10f5e6"}.fad.fa-caravan:after{content:"\10f8ff"}.fad.fa-caravan-alt:after{content:"\10f900"}.fad.fa-caret-circle-down:after{content:"\10f32d"}.fad.fa-caret-circle-left:after{content:"\10f32e"}.fad.fa-caret-circle-right:after{content:"\10f330"}.fad.fa-caret-circle-up:after{content:"\10f331"}.fad.fa-caret-down:after{content:"\10f0d7"}.fad.fa-caret-left:after{content:"\10f0d9"}.fad.fa-caret-right:after{content:"\10f0da"}.fad.fa-caret-square-down:after{content:"\10f150"}.fad.fa-caret-square-left:after{content:"\10f191"}.fad.fa-caret-square-right:after{content:"\10f152"}.fad.fa-caret-square-up:after{content:"\10f151"}.fad.fa-caret-up:after{content:"\10f0d8"}.fad.fa-carrot:after{content:"\10f787"}.fad.fa-cars:after{content:"\10f85b"}.fad.fa-cart-arrow-down:after{content:"\10f218"}.fad.fa-cart-plus:after{content:"\10f217"}.fad.fa-cash-register:after{content:"\10f788"}.fad.fa-cassette-tape:after{content:"\10f8ab"}.fad.fa-cat:after{content:"\10f6be"}.fad.fa-cat-space:after{content:"\10f901"}.fad.fa-cauldron:after{content:"\10f6bf"}.fad.fa-cctv:after{content:"\10f8ac"}.fad.fa-certificate:after{content:"\10f0a3"}.fad.fa-chair:after{content:"\10f6c0"}.fad.fa-chair-office:after{content:"\10f6c1"}.fad.fa-chalkboard:after{content:"\10f51b"}.fad.fa-chalkboard-teacher:after{content:"\10f51c"}.fad.fa-charging-station:after{content:"\10f5e7"}.fad.fa-chart-area:after{content:"\10f1fe"}.fad.fa-chart-bar:after{content:"\10f080"}.fad.fa-chart-line:after{content:"\10f201"}.fad.fa-chart-line-down:after{content:"\10f64d"}.fad.fa-chart-network:after{content:"\10f78a"}.fad.fa-chart-pie:after{content:"\10f200"}.fad.fa-chart-pie-alt:after{content:"\10f64e"}.fad.fa-chart-scatter:after{content:"\10f7ee"}.fad.fa-check:after{content:"\10f00c"}.fad.fa-check-circle:after{content:"\10f058"}.fad.fa-check-double:after{content:"\10f560"}.fad.fa-check-square:after{content:"\10f14a"}.fad.fa-cheese:after{content:"\10f7ef"}.fad.fa-cheese-swiss:after{content:"\10f7f0"}.fad.fa-cheeseburger:after{content:"\10f7f1"}.fad.fa-chess:after{content:"\10f439"}.fad.fa-chess-bishop:after{content:"\10f43a"}.fad.fa-chess-bishop-alt:after{content:"\10f43b"}.fad.fa-chess-board:after{content:"\10f43c"}.fad.fa-chess-clock:after{content:"\10f43d"}.fad.fa-chess-clock-alt:after{content:"\10f43e"}.fad.fa-chess-king:after{content:"\10f43f"}.fad.fa-chess-king-alt:after{content:"\10f440"}.fad.fa-chess-knight:after{content:"\10f441"}.fad.fa-chess-knight-alt:after{content:"\10f442"}.fad.fa-chess-pawn:after{content:"\10f443"}.fad.fa-chess-pawn-alt:after{content:"\10f444"}.fad.fa-chess-queen:after{content:"\10f445"}.fad.fa-chess-queen-alt:after{content:"\10f446"}.fad.fa-chess-rook:after{content:"\10f447"}.fad.fa-chess-rook-alt:after{content:"\10f448"}.fad.fa-chevron-circle-down:after{content:"\10f13a"}.fad.fa-chevron-circle-left:after{content:"\10f137"}.fad.fa-chevron-circle-right:after{content:"\10f138"}.fad.fa-chevron-circle-up:after{content:"\10f139"}.fad.fa-chevron-double-down:after{content:"\10f322"}.fad.fa-chevron-double-left:after{content:"\10f323"}.fad.fa-chevron-double-right:after{content:"\10f324"}.fad.fa-chevron-double-up:after{content:"\10f325"}.fad.fa-chevron-down:after{content:"\10f078"}.fad.fa-chevron-left:after{content:"\10f053"}.fad.fa-chevron-right:after{content:"\10f054"}.fad.fa-chevron-square-down:after{content:"\10f329"}.fad.fa-chevron-square-left:after{content:"\10f32a"}.fad.fa-chevron-square-right:after{content:"\10f32b"}.fad.fa-chevron-square-up:after{content:"\10f32c"}.fad.fa-chevron-up:after{content:"\10f077"}.fad.fa-child:after{content:"\10f1ae"}.fad.fa-chimney:after{content:"\10f78b"}.fad.fa-church:after{content:"\10f51d"}.fad.fa-circle:after{content:"\10f111"}.fad.fa-circle-notch:after{content:"\10f1ce"}.fad.fa-city:after{content:"\10f64f"}.fad.fa-clarinet:after{content:"\10f8ad"}.fad.fa-claw-marks:after{content:"\10f6c2"}.fad.fa-clinic-medical:after{content:"\10f7f2"}.fad.fa-clipboard:after{content:"\10f328"}.fad.fa-clipboard-check:after{content:"\10f46c"}.fad.fa-clipboard-list:after{content:"\10f46d"}.fad.fa-clipboard-list-check:after{content:"\10f737"}.fad.fa-clipboard-prescription:after{content:"\10f5e8"}.fad.fa-clipboard-user:after{content:"\10f7f3"}.fad.fa-clock:after{content:"\10f017"}.fad.fa-clone:after{content:"\10f24d"}.fad.fa-closed-captioning:after{content:"\10f20a"}.fad.fa-cloud:after{content:"\10f0c2"}.fad.fa-cloud-download:after{content:"\10f0ed"}.fad.fa-cloud-download-alt:after{content:"\10f381"}.fad.fa-cloud-drizzle:after{content:"\10f738"}.fad.fa-cloud-hail:after{content:"\10f739"}.fad.fa-cloud-hail-mixed:after{content:"\10f73a"}.fad.fa-cloud-meatball:after{content:"\10f73b"}.fad.fa-cloud-moon:after{content:"\10f6c3"}.fad.fa-cloud-moon-rain:after{content:"\10f73c"}.fad.fa-cloud-music:after{content:"\10f8ae"}.fad.fa-cloud-rain:after{content:"\10f73d"}.fad.fa-cloud-rainbow:after{content:"\10f73e"}.fad.fa-cloud-showers:after{content:"\10f73f"}.fad.fa-cloud-showers-heavy:after{content:"\10f740"}.fad.fa-cloud-sleet:after{content:"\10f741"}.fad.fa-cloud-snow:after{content:"\10f742"}.fad.fa-cloud-sun:after{content:"\10f6c4"}.fad.fa-cloud-sun-rain:after{content:"\10f743"}.fad.fa-cloud-upload:after{content:"\10f0ee"}.fad.fa-cloud-upload-alt:after{content:"\10f382"}.fad.fa-clouds:after{content:"\10f744"}.fad.fa-clouds-moon:after{content:"\10f745"}.fad.fa-clouds-sun:after{content:"\10f746"}.fad.fa-club:after{content:"\10f327"}.fad.fa-cocktail:after{content:"\10f561"}.fad.fa-code:after{content:"\10f121"}.fad.fa-code-branch:after{content:"\10f126"}.fad.fa-code-commit:after{content:"\10f386"}.fad.fa-code-merge:after{content:"\10f387"}.fad.fa-coffee:after{content:"\10f0f4"}.fad.fa-coffee-pot:after{content:"\10f902"}.fad.fa-coffee-togo:after{content:"\10f6c5"}.fad.fa-coffin:after{content:"\10f6c6"}.fad.fa-coffin-cross:after{content:"\10f951"}.fad.fa-cog:after{content:"\10f013"}.fad.fa-cogs:after{content:"\10f085"}.fad.fa-coin:after{content:"\10f85c"}.fad.fa-coins:after{content:"\10f51e"}.fad.fa-columns:after{content:"\10f0db"}.fad.fa-comet:after{content:"\10f903"}.fad.fa-comment:after{content:"\10f075"}.fad.fa-comment-alt:after{content:"\10f27a"}.fad.fa-comment-alt-check:after{content:"\10f4a2"}.fad.fa-comment-alt-dollar:after{content:"\10f650"}.fad.fa-comment-alt-dots:after{content:"\10f4a3"}.fad.fa-comment-alt-edit:after{content:"\10f4a4"}.fad.fa-comment-alt-exclamation:after{content:"\10f4a5"}.fad.fa-comment-alt-lines:after{content:"\10f4a6"}.fad.fa-comment-alt-medical:after{content:"\10f7f4"}.fad.fa-comment-alt-minus:after{content:"\10f4a7"}.fad.fa-comment-alt-music:after{content:"\10f8af"}.fad.fa-comment-alt-plus:after{content:"\10f4a8"}.fad.fa-comment-alt-slash:after{content:"\10f4a9"}.fad.fa-comment-alt-smile:after{content:"\10f4aa"}.fad.fa-comment-alt-times:after{content:"\10f4ab"}.fad.fa-comment-check:after{content:"\10f4ac"}.fad.fa-comment-dollar:after{content:"\10f651"}.fad.fa-comment-dots:after{content:"\10f4ad"}.fad.fa-comment-edit:after{content:"\10f4ae"}.fad.fa-comment-exclamation:after{content:"\10f4af"}.fad.fa-comment-lines:after{content:"\10f4b0"}.fad.fa-comment-medical:after{content:"\10f7f5"}.fad.fa-comment-minus:after{content:"\10f4b1"}.fad.fa-comment-music:after{content:"\10f8b0"}.fad.fa-comment-plus:after{content:"\10f4b2"}.fad.fa-comment-slash:after{content:"\10f4b3"}.fad.fa-comment-smile:after{content:"\10f4b4"}.fad.fa-comment-times:after{content:"\10f4b5"}.fad.fa-comments:after{content:"\10f086"}.fad.fa-comments-alt:after{content:"\10f4b6"}.fad.fa-comments-alt-dollar:after{content:"\10f652"}.fad.fa-comments-dollar:after{content:"\10f653"}.fad.fa-compact-disc:after{content:"\10f51f"}.fad.fa-compass:after{content:"\10f14e"}.fad.fa-compass-slash:after{content:"\10f5e9"}.fad.fa-compress:after{content:"\10f066"}.fad.fa-compress-alt:after{content:"\10f422"}.fad.fa-compress-arrows-alt:after{content:"\10f78c"}.fad.fa-compress-wide:after{content:"\10f326"}.fad.fa-computer-classic:after{content:"\10f8b1"}.fad.fa-computer-speaker:after{content:"\10f8b2"}.fad.fa-concierge-bell:after{content:"\10f562"}.fad.fa-construction:after{content:"\10f85d"}.fad.fa-container-storage:after{content:"\10f4b7"}.fad.fa-conveyor-belt:after{content:"\10f46e"}.fad.fa-conveyor-belt-alt:after{content:"\10f46f"}.fad.fa-cookie:after{content:"\10f563"}.fad.fa-cookie-bite:after{content:"\10f564"}.fad.fa-copy:after{content:"\10f0c5"}.fad.fa-copyright:after{content:"\10f1f9"}.fad.fa-corn:after{content:"\10f6c7"}.fad.fa-couch:after{content:"\10f4b8"}.fad.fa-cow:after{content:"\10f6c8"}.fad.fa-cowbell:after{content:"\10f8b3"}.fad.fa-cowbell-more:after{content:"\10f8b4"}.fad.fa-credit-card:after{content:"\10f09d"}.fad.fa-credit-card-blank:after{content:"\10f389"}.fad.fa-credit-card-front:after{content:"\10f38a"}.fad.fa-cricket:after{content:"\10f449"}.fad.fa-croissant:after{content:"\10f7f6"}.fad.fa-crop:after{content:"\10f125"}.fad.fa-crop-alt:after{content:"\10f565"}.fad.fa-cross:after{content:"\10f654"}.fad.fa-crosshairs:after{content:"\10f05b"}.fad.fa-crow:after{content:"\10f520"}.fad.fa-crown:after{content:"\10f521"}.fad.fa-crutch:after{content:"\10f7f7"}.fad.fa-crutches:after{content:"\10f7f8"}.fad.fa-cube:after{content:"\10f1b2"}.fad.fa-cubes:after{content:"\10f1b3"}.fad.fa-curling:after{content:"\10f44a"}.fad.fa-cut:after{content:"\10f0c4"}.fad.fa-dagger:after{content:"\10f6cb"}.fad.fa-database:after{content:"\10f1c0"}.fad.fa-deaf:after{content:"\10f2a4"}.fad.fa-debug:after{content:"\10f7f9"}.fad.fa-deer:after{content:"\10f78e"}.fad.fa-deer-rudolph:after{content:"\10f78f"}.fad.fa-democrat:after{content:"\10f747"}.fad.fa-desktop:after{content:"\10f108"}.fad.fa-desktop-alt:after{content:"\10f390"}.fad.fa-dewpoint:after{content:"\10f748"}.fad.fa-dharmachakra:after{content:"\10f655"}.fad.fa-diagnoses:after{content:"\10f470"}.fad.fa-diamond:after{content:"\10f219"}.fad.fa-dice:after{content:"\10f522"}.fad.fa-dice-d10:after{content:"\10f6cd"}.fad.fa-dice-d12:after{content:"\10f6ce"}.fad.fa-dice-d20:after{content:"\10f6cf"}.fad.fa-dice-d4:after{content:"\10f6d0"}.fad.fa-dice-d6:after{content:"\10f6d1"}.fad.fa-dice-d8:after{content:"\10f6d2"}.fad.fa-dice-five:after{content:"\10f523"}.fad.fa-dice-four:after{content:"\10f524"}.fad.fa-dice-one:after{content:"\10f525"}.fad.fa-dice-six:after{content:"\10f526"}.fad.fa-dice-three:after{content:"\10f527"}.fad.fa-dice-two:after{content:"\10f528"}.fad.fa-digging:after{content:"\10f85e"}.fad.fa-digital-tachograph:after{content:"\10f566"}.fad.fa-diploma:after{content:"\10f5ea"}.fad.fa-directions:after{content:"\10f5eb"}.fad.fa-disc-drive:after{content:"\10f8b5"}.fad.fa-disease:after{content:"\10f7fa"}.fad.fa-divide:after{content:"\10f529"}.fad.fa-dizzy:after{content:"\10f567"}.fad.fa-dna:after{content:"\10f471"}.fad.fa-do-not-enter:after{content:"\10f5ec"}.fad.fa-dog:after{content:"\10f6d3"}.fad.fa-dog-leashed:after{content:"\10f6d4"}.fad.fa-dollar-sign:after{content:"\10f155"}.fad.fa-dolly:after{content:"\10f472"}.fad.fa-dolly-empty:after{content:"\10f473"}.fad.fa-dolly-flatbed:after{content:"\10f474"}.fad.fa-dolly-flatbed-alt:after{content:"\10f475"}.fad.fa-dolly-flatbed-empty:after{content:"\10f476"}.fad.fa-donate:after{content:"\10f4b9"}.fad.fa-door-closed:after{content:"\10f52a"}.fad.fa-door-open:after{content:"\10f52b"}.fad.fa-dot-circle:after{content:"\10f192"}.fad.fa-dove:after{content:"\10f4ba"}.fad.fa-download:after{content:"\10f019"}.fad.fa-drafting-compass:after{content:"\10f568"}.fad.fa-dragon:after{content:"\10f6d5"}.fad.fa-draw-circle:after{content:"\10f5ed"}.fad.fa-draw-polygon:after{content:"\10f5ee"}.fad.fa-draw-square:after{content:"\10f5ef"}.fad.fa-dreidel:after{content:"\10f792"}.fad.fa-drone:after{content:"\10f85f"}.fad.fa-drone-alt:after{content:"\10f860"}.fad.fa-drum:after{content:"\10f569"}.fad.fa-drum-steelpan:after{content:"\10f56a"}.fad.fa-drumstick:after{content:"\10f6d6"}.fad.fa-drumstick-bite:after{content:"\10f6d7"}.fad.fa-dryer:after{content:"\10f861"}.fad.fa-dryer-alt:after{content:"\10f862"}.fad.fa-duck:after{content:"\10f6d8"}.fad.fa-dumbbell:after{content:"\10f44b"}.fad.fa-dumpster:after{content:"\10f793"}.fad.fa-dumpster-fire:after{content:"\10f794"}.fad.fa-dungeon:after{content:"\10f6d9"}.fad.fa-ear:after{content:"\10f5f0"}.fad.fa-ear-muffs:after{content:"\10f795"}.fad.fa-eclipse:after{content:"\10f749"}.fad.fa-eclipse-alt:after{content:"\10f74a"}.fad.fa-edit:after{content:"\10f044"}.fad.fa-egg:after{content:"\10f7fb"}.fad.fa-egg-fried:after{content:"\10f7fc"}.fad.fa-eject:after{content:"\10f052"}.fad.fa-elephant:after{content:"\10f6da"}.fad.fa-ellipsis-h:after{content:"\10f141"}.fad.fa-ellipsis-h-alt:after{content:"\10f39b"}.fad.fa-ellipsis-v:after{content:"\10f142"}.fad.fa-ellipsis-v-alt:after{content:"\10f39c"}.fad.fa-empty-set:after{content:"\10f656"}.fad.fa-engine-warning:after{content:"\10f5f2"}.fad.fa-envelope:after{content:"\10f0e0"}.fad.fa-envelope-open:after{content:"\10f2b6"}.fad.fa-envelope-open-dollar:after{content:"\10f657"}.fad.fa-envelope-open-text:after{content:"\10f658"}.fad.fa-envelope-square:after{content:"\10f199"}.fad.fa-equals:after{content:"\10f52c"}.fad.fa-eraser:after{content:"\10f12d"}.fad.fa-ethernet:after{content:"\10f796"}.fad.fa-euro-sign:after{content:"\10f153"}.fad.fa-exchange:after{content:"\10f0ec"}.fad.fa-exchange-alt:after{content:"\10f362"}.fad.fa-exclamation:after{content:"\10f12a"}.fad.fa-exclamation-circle:after{content:"\10f06a"}.fad.fa-exclamation-square:after{content:"\10f321"}.fad.fa-exclamation-triangle:after{content:"\10f071"}.fad.fa-expand:after{content:"\10f065"}.fad.fa-expand-alt:after{content:"\10f424"}.fad.fa-expand-arrows:after{content:"\10f31d"}.fad.fa-expand-arrows-alt:after{content:"\10f31e"}.fad.fa-expand-wide:after{content:"\10f320"}.fad.fa-external-link:after{content:"\10f08e"}.fad.fa-external-link-alt:after{content:"\10f35d"}.fad.fa-external-link-square:after{content:"\10f14c"}.fad.fa-external-link-square-alt:after{content:"\10f360"}.fad.fa-eye:after{content:"\10f06e"}.fad.fa-eye-dropper:after{content:"\10f1fb"}.fad.fa-eye-evil:after{content:"\10f6db"}.fad.fa-eye-slash:after{content:"\10f070"}.fad.fa-fan:after{content:"\10f863"}.fad.fa-fan-table:after{content:"\10f904"}.fad.fa-farm:after{content:"\10f864"}.fad.fa-fast-backward:after{content:"\10f049"}.fad.fa-fast-forward:after{content:"\10f050"}.fad.fa-faucet:after{content:"\10f905"}.fad.fa-faucet-drip:after{content:"\10f906"}.fad.fa-fax:after{content:"\10f1ac"}.fad.fa-feather:after{content:"\10f52d"}.fad.fa-feather-alt:after{content:"\10f56b"}.fad.fa-female:after{content:"\10f182"}.fad.fa-field-hockey:after{content:"\10f44c"}.fad.fa-fighter-jet:after{content:"\10f0fb"}.fad.fa-file:after{content:"\10f15b"}.fad.fa-file-alt:after{content:"\10f15c"}.fad.fa-file-archive:after{content:"\10f1c6"}.fad.fa-file-audio:after{content:"\10f1c7"}.fad.fa-file-certificate:after{content:"\10f5f3"}.fad.fa-file-chart-line:after{content:"\10f659"}.fad.fa-file-chart-pie:after{content:"\10f65a"}.fad.fa-file-check:after{content:"\10f316"}.fad.fa-file-code:after{content:"\10f1c9"}.fad.fa-file-contract:after{content:"\10f56c"}.fad.fa-file-csv:after{content:"\10f6dd"}.fad.fa-file-download:after{content:"\10f56d"}.fad.fa-file-edit:after{content:"\10f31c"}.fad.fa-file-excel:after{content:"\10f1c3"}.fad.fa-file-exclamation:after{content:"\10f31a"}.fad.fa-file-export:after{content:"\10f56e"}.fad.fa-file-image:after{content:"\10f1c5"}.fad.fa-file-import:after{content:"\10f56f"}.fad.fa-file-invoice:after{content:"\10f570"}.fad.fa-file-invoice-dollar:after{content:"\10f571"}.fad.fa-file-medical:after{content:"\10f477"}.fad.fa-file-medical-alt:after{content:"\10f478"}.fad.fa-file-minus:after{content:"\10f318"}.fad.fa-file-music:after{content:"\10f8b6"}.fad.fa-file-pdf:after{content:"\10f1c1"}.fad.fa-file-plus:after{content:"\10f319"}.fad.fa-file-powerpoint:after{content:"\10f1c4"}.fad.fa-file-prescription:after{content:"\10f572"}.fad.fa-file-search:after{content:"\10f865"}.fad.fa-file-signature:after{content:"\10f573"}.fad.fa-file-spreadsheet:after{content:"\10f65b"}.fad.fa-file-times:after{content:"\10f317"}.fad.fa-file-upload:after{content:"\10f574"}.fad.fa-file-user:after{content:"\10f65c"}.fad.fa-file-video:after{content:"\10f1c8"}.fad.fa-file-word:after{content:"\10f1c2"}.fad.fa-files-medical:after{content:"\10f7fd"}.fad.fa-fill:after{content:"\10f575"}.fad.fa-fill-drip:after{content:"\10f576"}.fad.fa-film:after{content:"\10f008"}.fad.fa-film-alt:after{content:"\10f3a0"}.fad.fa-film-canister:after{content:"\10f8b7"}.fad.fa-filter:after{content:"\10f0b0"}.fad.fa-fingerprint:after{content:"\10f577"}.fad.fa-fire:after{content:"\10f06d"}.fad.fa-fire-alt:after{content:"\10f7e4"}.fad.fa-fire-extinguisher:after{content:"\10f134"}.fad.fa-fire-smoke:after{content:"\10f74b"}.fad.fa-fireplace:after{content:"\10f79a"}.fad.fa-first-aid:after{content:"\10f479"}.fad.fa-fish:after{content:"\10f578"}.fad.fa-fish-cooked:after{content:"\10f7fe"}.fad.fa-fist-raised:after{content:"\10f6de"}.fad.fa-flag:after{content:"\10f024"}.fad.fa-flag-alt:after{content:"\10f74c"}.fad.fa-flag-checkered:after{content:"\10f11e"}.fad.fa-flag-usa:after{content:"\10f74d"}.fad.fa-flame:after{content:"\10f6df"}.fad.fa-flashlight:after{content:"\10f8b8"}.fad.fa-flask:after{content:"\10f0c3"}.fad.fa-flask-poison:after{content:"\10f6e0"}.fad.fa-flask-potion:after{content:"\10f6e1"}.fad.fa-flower:after{content:"\10f7ff"}.fad.fa-flower-daffodil:after{content:"\10f800"}.fad.fa-flower-tulip:after{content:"\10f801"}.fad.fa-flushed:after{content:"\10f579"}.fad.fa-flute:after{content:"\10f8b9"}.fad.fa-flux-capacitor:after{content:"\10f8ba"}.fad.fa-fog:after{content:"\10f74e"}.fad.fa-folder:after{content:"\10f07b"}.fad.fa-folder-download:after{content:"\10f953"}.fad.fa-folder-minus:after{content:"\10f65d"}.fad.fa-folder-open:after{content:"\10f07c"}.fad.fa-folder-plus:after{content:"\10f65e"}.fad.fa-folder-times:after{content:"\10f65f"}.fad.fa-folder-tree:after{content:"\10f802"}.fad.fa-folder-upload:after{content:"\10f954"}.fad.fa-folders:after{content:"\10f660"}.fad.fa-font:after{content:"\10f031"}.fad.fa-font-awesome-logo-full:after{content:"\10f4e6"}.fad.fa-font-case:after{content:"\10f866"}.fad.fa-football-ball:after{content:"\10f44e"}.fad.fa-football-helmet:after{content:"\10f44f"}.fad.fa-forklift:after{content:"\10f47a"}.fad.fa-forward:after{content:"\10f04e"}.fad.fa-fragile:after{content:"\10f4bb"}.fad.fa-french-fries:after{content:"\10f803"}.fad.fa-frog:after{content:"\10f52e"}.fad.fa-frosty-head:after{content:"\10f79b"}.fad.fa-frown:after{content:"\10f119"}.fad.fa-frown-open:after{content:"\10f57a"}.fad.fa-function:after{content:"\10f661"}.fad.fa-funnel-dollar:after{content:"\10f662"}.fad.fa-futbol:after{content:"\10f1e3"}.fad.fa-galaxy:after{content:"\10f908"}.fad.fa-game-board:after{content:"\10f867"}.fad.fa-game-board-alt:after{content:"\10f868"}.fad.fa-game-console-handheld:after{content:"\10f8bb"}.fad.fa-gamepad:after{content:"\10f11b"}.fad.fa-gamepad-alt:after{content:"\10f8bc"}.fad.fa-garage:after{content:"\10f909"}.fad.fa-garage-car:after{content:"\10f90a"}.fad.fa-garage-open:after{content:"\10f90b"}.fad.fa-gas-pump:after{content:"\10f52f"}.fad.fa-gas-pump-slash:after{content:"\10f5f4"}.fad.fa-gavel:after{content:"\10f0e3"}.fad.fa-gem:after{content:"\10f3a5"}.fad.fa-genderless:after{content:"\10f22d"}.fad.fa-ghost:after{content:"\10f6e2"}.fad.fa-gift:after{content:"\10f06b"}.fad.fa-gift-card:after{content:"\10f663"}.fad.fa-gifts:after{content:"\10f79c"}.fad.fa-gingerbread-man:after{content:"\10f79d"}.fad.fa-glass:after{content:"\10f804"}.fad.fa-glass-champagne:after{content:"\10f79e"}.fad.fa-glass-cheers:after{content:"\10f79f"}.fad.fa-glass-citrus:after{content:"\10f869"}.fad.fa-glass-martini:after{content:"\10f000"}.fad.fa-glass-martini-alt:after{content:"\10f57b"}.fad.fa-glass-whiskey:after{content:"\10f7a0"}.fad.fa-glass-whiskey-rocks:after{content:"\10f7a1"}.fad.fa-glasses:after{content:"\10f530"}.fad.fa-glasses-alt:after{content:"\10f5f5"}.fad.fa-globe:after{content:"\10f0ac"}.fad.fa-globe-africa:after{content:"\10f57c"}.fad.fa-globe-americas:after{content:"\10f57d"}.fad.fa-globe-asia:after{content:"\10f57e"}.fad.fa-globe-europe:after{content:"\10f7a2"}.fad.fa-globe-snow:after{content:"\10f7a3"}.fad.fa-globe-stand:after{content:"\10f5f6"}.fad.fa-golf-ball:after{content:"\10f450"}.fad.fa-golf-club:after{content:"\10f451"}.fad.fa-gopuram:after{content:"\10f664"}.fad.fa-graduation-cap:after{content:"\10f19d"}.fad.fa-gramophone:after{content:"\10f8bd"}.fad.fa-greater-than:after{content:"\10f531"}.fad.fa-greater-than-equal:after{content:"\10f532"}.fad.fa-grimace:after{content:"\10f57f"}.fad.fa-grin:after{content:"\10f580"}.fad.fa-grin-alt:after{content:"\10f581"}.fad.fa-grin-beam:after{content:"\10f582"}.fad.fa-grin-beam-sweat:after{content:"\10f583"}.fad.fa-grin-hearts:after{content:"\10f584"}.fad.fa-grin-squint:after{content:"\10f585"}.fad.fa-grin-squint-tears:after{content:"\10f586"}.fad.fa-grin-stars:after{content:"\10f587"}.fad.fa-grin-tears:after{content:"\10f588"}.fad.fa-grin-tongue:after{content:"\10f589"}.fad.fa-grin-tongue-squint:after{content:"\10f58a"}.fad.fa-grin-tongue-wink:after{content:"\10f58b"}.fad.fa-grin-wink:after{content:"\10f58c"}.fad.fa-grip-horizontal:after{content:"\10f58d"}.fad.fa-grip-lines:after{content:"\10f7a4"}.fad.fa-grip-lines-vertical:after{content:"\10f7a5"}.fad.fa-grip-vertical:after{content:"\10f58e"}.fad.fa-guitar:after{content:"\10f7a6"}.fad.fa-guitar-electric:after{content:"\10f8be"}.fad.fa-guitars:after{content:"\10f8bf"}.fad.fa-h-square:after{content:"\10f0fd"}.fad.fa-h1:after{content:"\10f313"}.fad.fa-h2:after{content:"\10f314"}.fad.fa-h3:after{content:"\10f315"}.fad.fa-h4:after{content:"\10f86a"}.fad.fa-hamburger:after{content:"\10f805"}.fad.fa-hammer:after{content:"\10f6e3"}.fad.fa-hammer-war:after{content:"\10f6e4"}.fad.fa-hamsa:after{content:"\10f665"}.fad.fa-hand-heart:after{content:"\10f4bc"}.fad.fa-hand-holding:after{content:"\10f4bd"}.fad.fa-hand-holding-box:after{content:"\10f47b"}.fad.fa-hand-holding-heart:after{content:"\10f4be"}.fad.fa-hand-holding-magic:after{content:"\10f6e5"}.fad.fa-hand-holding-medical:after{content:"\10f95c"}.fad.fa-hand-holding-seedling:after{content:"\10f4bf"}.fad.fa-hand-holding-usd:after{content:"\10f4c0"}.fad.fa-hand-holding-water:after{content:"\10f4c1"}.fad.fa-hand-lizard:after{content:"\10f258"}.fad.fa-hand-middle-finger:after{content:"\10f806"}.fad.fa-hand-paper:after{content:"\10f256"}.fad.fa-hand-peace:after{content:"\10f25b"}.fad.fa-hand-point-down:after{content:"\10f0a7"}.fad.fa-hand-point-left:after{content:"\10f0a5"}.fad.fa-hand-point-right:after{content:"\10f0a4"}.fad.fa-hand-point-up:after{content:"\10f0a6"}.fad.fa-hand-pointer:after{content:"\10f25a"}.fad.fa-hand-receiving:after{content:"\10f47c"}.fad.fa-hand-rock:after{content:"\10f255"}.fad.fa-hand-scissors:after{content:"\10f257"}.fad.fa-hand-sparkles:after{content:"\10f95d"}.fad.fa-hand-spock:after{content:"\10f259"}.fad.fa-hands:after{content:"\10f4c2"}.fad.fa-hands-heart:after{content:"\10f4c3"}.fad.fa-hands-helping:after{content:"\10f4c4"}.fad.fa-hands-usd:after{content:"\10f4c5"}.fad.fa-hands-wash:after{content:"\10f95e"}.fad.fa-handshake:after{content:"\10f2b5"}.fad.fa-handshake-alt:after{content:"\10f4c6"}.fad.fa-handshake-alt-slash:after{content:"\10f95f"}.fad.fa-handshake-slash:after{content:"\10f960"}.fad.fa-hanukiah:after{content:"\10f6e6"}.fad.fa-hard-hat:after{content:"\10f807"}.fad.fa-hashtag:after{content:"\10f292"}.fad.fa-hat-chef:after{content:"\10f86b"}.fad.fa-hat-cowboy:after{content:"\10f8c0"}.fad.fa-hat-cowboy-side:after{content:"\10f8c1"}.fad.fa-hat-santa:after{content:"\10f7a7"}.fad.fa-hat-winter:after{content:"\10f7a8"}.fad.fa-hat-witch:after{content:"\10f6e7"}.fad.fa-hat-wizard:after{content:"\10f6e8"}.fad.fa-hdd:after{content:"\10f0a0"}.fad.fa-head-side:after{content:"\10f6e9"}.fad.fa-head-side-brain:after{content:"\10f808"}.fad.fa-head-side-cough:after{content:"\10f961"}.fad.fa-head-side-cough-slash:after{content:"\10f962"}.fad.fa-head-side-headphones:after{content:"\10f8c2"}.fad.fa-head-side-mask:after{content:"\10f963"}.fad.fa-head-side-medical:after{content:"\10f809"}.fad.fa-head-side-virus:after{content:"\10f964"}.fad.fa-head-vr:after{content:"\10f6ea"}.fad.fa-heading:after{content:"\10f1dc"}.fad.fa-headphones:after{content:"\10f025"}.fad.fa-headphones-alt:after{content:"\10f58f"}.fad.fa-headset:after{content:"\10f590"}.fad.fa-heart:after{content:"\10f004"}.fad.fa-heart-broken:after{content:"\10f7a9"}.fad.fa-heart-circle:after{content:"\10f4c7"}.fad.fa-heart-rate:after{content:"\10f5f8"}.fad.fa-heart-square:after{content:"\10f4c8"}.fad.fa-heartbeat:after{content:"\10f21e"}.fad.fa-heat:after{content:"\10f90c"}.fad.fa-helicopter:after{content:"\10f533"}.fad.fa-helmet-battle:after{content:"\10f6eb"}.fad.fa-hexagon:after{content:"\10f312"}.fad.fa-highlighter:after{content:"\10f591"}.fad.fa-hiking:after{content:"\10f6ec"}.fad.fa-hippo:after{content:"\10f6ed"}.fad.fa-history:after{content:"\10f1da"}.fad.fa-hockey-mask:after{content:"\10f6ee"}.fad.fa-hockey-puck:after{content:"\10f453"}.fad.fa-hockey-sticks:after{content:"\10f454"}.fad.fa-holly-berry:after{content:"\10f7aa"}.fad.fa-home:after{content:"\10f015"}.fad.fa-home-alt:after{content:"\10f80a"}.fad.fa-home-heart:after{content:"\10f4c9"}.fad.fa-home-lg:after{content:"\10f80b"}.fad.fa-home-lg-alt:after{content:"\10f80c"}.fad.fa-hood-cloak:after{content:"\10f6ef"}.fad.fa-horizontal-rule:after{content:"\10f86c"}.fad.fa-horse:after{content:"\10f6f0"}.fad.fa-horse-head:after{content:"\10f7ab"}.fad.fa-horse-saddle:after{content:"\10f8c3"}.fad.fa-hospital:after{content:"\10f0f8"}.fad.fa-hospital-alt:after{content:"\10f47d"}.fad.fa-hospital-symbol:after{content:"\10f47e"}.fad.fa-hospital-user:after{content:"\10f80d"}.fad.fa-hospitals:after{content:"\10f80e"}.fad.fa-hot-tub:after{content:"\10f593"}.fad.fa-hotdog:after{content:"\10f80f"}.fad.fa-hotel:after{content:"\10f594"}.fad.fa-hourglass:after{content:"\10f254"}.fad.fa-hourglass-end:after{content:"\10f253"}.fad.fa-hourglass-half:after{content:"\10f252"}.fad.fa-hourglass-start:after{content:"\10f251"}.fad.fa-house:after{content:"\10f90d"}.fad.fa-house-damage:after{content:"\10f6f1"}.fad.fa-house-day:after{content:"\10f90e"}.fad.fa-house-flood:after{content:"\10f74f"}.fad.fa-house-leave:after{content:"\10f90f"}.fad.fa-house-night:after{content:"\10f910"}.fad.fa-house-return:after{content:"\10f911"}.fad.fa-house-signal:after{content:"\10f912"}.fad.fa-house-user:after{content:"\10f965"}.fad.fa-hryvnia:after{content:"\10f6f2"}.fad.fa-humidity:after{content:"\10f750"}.fad.fa-hurricane:after{content:"\10f751"}.fad.fa-i-cursor:after{content:"\10f246"}.fad.fa-ice-cream:after{content:"\10f810"}.fad.fa-ice-skate:after{content:"\10f7ac"}.fad.fa-icicles:after{content:"\10f7ad"}.fad.fa-icons:after{content:"\10f86d"}.fad.fa-icons-alt:after{content:"\10f86e"}.fad.fa-id-badge:after{content:"\10f2c1"}.fad.fa-id-card:after{content:"\10f2c2"}.fad.fa-id-card-alt:after{content:"\10f47f"}.fad.fa-igloo:after{content:"\10f7ae"}.fad.fa-image:after{content:"\10f03e"}.fad.fa-image-polaroid:after{content:"\10f8c4"}.fad.fa-images:after{content:"\10f302"}.fad.fa-inbox:after{content:"\10f01c"}.fad.fa-inbox-in:after{content:"\10f310"}.fad.fa-inbox-out:after{content:"\10f311"}.fad.fa-indent:after{content:"\10f03c"}.fad.fa-industry:after{content:"\10f275"}.fad.fa-industry-alt:after{content:"\10f3b3"}.fad.fa-infinity:after{content:"\10f534"}.fad.fa-info:after{content:"\10f129"}.fad.fa-info-circle:after{content:"\10f05a"}.fad.fa-info-square:after{content:"\10f30f"}.fad.fa-inhaler:after{content:"\10f5f9"}.fad.fa-integral:after{content:"\10f667"}.fad.fa-intersection:after{content:"\10f668"}.fad.fa-inventory:after{content:"\10f480"}.fad.fa-island-tropical:after{content:"\10f811"}.fad.fa-italic:after{content:"\10f033"}.fad.fa-jack-o-lantern:after{content:"\10f30e"}.fad.fa-jedi:after{content:"\10f669"}.fad.fa-joint:after{content:"\10f595"}.fad.fa-journal-whills:after{content:"\10f66a"}.fad.fa-joystick:after{content:"\10f8c5"}.fad.fa-jug:after{content:"\10f8c6"}.fad.fa-kaaba:after{content:"\10f66b"}.fad.fa-kazoo:after{content:"\10f8c7"}.fad.fa-kerning:after{content:"\10f86f"}.fad.fa-key:after{content:"\10f084"}.fad.fa-key-skeleton:after{content:"\10f6f3"}.fad.fa-keyboard:after{content:"\10f11c"}.fad.fa-keynote:after{content:"\10f66c"}.fad.fa-khanda:after{content:"\10f66d"}.fad.fa-kidneys:after{content:"\10f5fb"}.fad.fa-kiss:after{content:"\10f596"}.fad.fa-kiss-beam:after{content:"\10f597"}.fad.fa-kiss-wink-heart:after{content:"\10f598"}.fad.fa-kite:after{content:"\10f6f4"}.fad.fa-kiwi-bird:after{content:"\10f535"}.fad.fa-knife-kitchen:after{content:"\10f6f5"}.fad.fa-lambda:after{content:"\10f66e"}.fad.fa-lamp:after{content:"\10f4ca"}.fad.fa-lamp-desk:after{content:"\10f914"}.fad.fa-lamp-floor:after{content:"\10f915"}.fad.fa-landmark:after{content:"\10f66f"}.fad.fa-landmark-alt:after{content:"\10f752"}.fad.fa-language:after{content:"\10f1ab"}.fad.fa-laptop:after{content:"\10f109"}.fad.fa-laptop-code:after{content:"\10f5fc"}.fad.fa-laptop-house:after{content:"\10f966"}.fad.fa-laptop-medical:after{content:"\10f812"}.fad.fa-lasso:after{content:"\10f8c8"}.fad.fa-laugh:after{content:"\10f599"}.fad.fa-laugh-beam:after{content:"\10f59a"}.fad.fa-laugh-squint:after{content:"\10f59b"}.fad.fa-laugh-wink:after{content:"\10f59c"}.fad.fa-layer-group:after{content:"\10f5fd"}.fad.fa-layer-minus:after{content:"\10f5fe"}.fad.fa-layer-plus:after{content:"\10f5ff"}.fad.fa-leaf:after{content:"\10f06c"}.fad.fa-leaf-heart:after{content:"\10f4cb"}.fad.fa-leaf-maple:after{content:"\10f6f6"}.fad.fa-leaf-oak:after{content:"\10f6f7"}.fad.fa-lemon:after{content:"\10f094"}.fad.fa-less-than:after{content:"\10f536"}.fad.fa-less-than-equal:after{content:"\10f537"}.fad.fa-level-down:after{content:"\10f149"}.fad.fa-level-down-alt:after{content:"\10f3be"}.fad.fa-level-up:after{content:"\10f148"}.fad.fa-level-up-alt:after{content:"\10f3bf"}.fad.fa-life-ring:after{content:"\10f1cd"}.fad.fa-light-ceiling:after{content:"\10f916"}.fad.fa-light-switch:after{content:"\10f917"}.fad.fa-light-switch-off:after{content:"\10f918"}.fad.fa-light-switch-on:after{content:"\10f919"}.fad.fa-lightbulb:after{content:"\10f0eb"}.fad.fa-lightbulb-dollar:after{content:"\10f670"}.fad.fa-lightbulb-exclamation:after{content:"\10f671"}.fad.fa-lightbulb-on:after{content:"\10f672"}.fad.fa-lightbulb-slash:after{content:"\10f673"}.fad.fa-lights-holiday:after{content:"\10f7b2"}.fad.fa-line-columns:after{content:"\10f870"}.fad.fa-line-height:after{content:"\10f871"}.fad.fa-link:after{content:"\10f0c1"}.fad.fa-lips:after{content:"\10f600"}.fad.fa-lira-sign:after{content:"\10f195"}.fad.fa-list:after{content:"\10f03a"}.fad.fa-list-alt:after{content:"\10f022"}.fad.fa-list-music:after{content:"\10f8c9"}.fad.fa-list-ol:after{content:"\10f0cb"}.fad.fa-list-ul:after{content:"\10f0ca"}.fad.fa-location:after{content:"\10f601"}.fad.fa-location-arrow:after{content:"\10f124"}.fad.fa-location-circle:after{content:"\10f602"}.fad.fa-location-slash:after{content:"\10f603"}.fad.fa-lock:after{content:"\10f023"}.fad.fa-lock-alt:after{content:"\10f30d"}.fad.fa-lock-open:after{content:"\10f3c1"}.fad.fa-lock-open-alt:after{content:"\10f3c2"}.fad.fa-long-arrow-alt-down:after{content:"\10f309"}.fad.fa-long-arrow-alt-left:after{content:"\10f30a"}.fad.fa-long-arrow-alt-right:after{content:"\10f30b"}.fad.fa-long-arrow-alt-up:after{content:"\10f30c"}.fad.fa-long-arrow-down:after{content:"\10f175"}.fad.fa-long-arrow-left:after{content:"\10f177"}.fad.fa-long-arrow-right:after{content:"\10f178"}.fad.fa-long-arrow-up:after{content:"\10f176"}.fad.fa-loveseat:after{content:"\10f4cc"}.fad.fa-low-vision:after{content:"\10f2a8"}.fad.fa-luchador:after{content:"\10f455"}.fad.fa-luggage-cart:after{content:"\10f59d"}.fad.fa-lungs:after{content:"\10f604"}.fad.fa-lungs-virus:after{content:"\10f967"}.fad.fa-mace:after{content:"\10f6f8"}.fad.fa-magic:after{content:"\10f0d0"}.fad.fa-magnet:after{content:"\10f076"}.fad.fa-mail-bulk:after{content:"\10f674"}.fad.fa-mailbox:after{content:"\10f813"}.fad.fa-male:after{content:"\10f183"}.fad.fa-mandolin:after{content:"\10f6f9"}.fad.fa-map:after{content:"\10f279"}.fad.fa-map-marked:after{content:"\10f59f"}.fad.fa-map-marked-alt:after{content:"\10f5a0"}.fad.fa-map-marker:after{content:"\10f041"}.fad.fa-map-marker-alt:after{content:"\10f3c5"}.fad.fa-map-marker-alt-slash:after{content:"\10f605"}.fad.fa-map-marker-check:after{content:"\10f606"}.fad.fa-map-marker-edit:after{content:"\10f607"}.fad.fa-map-marker-exclamation:after{content:"\10f608"}.fad.fa-map-marker-minus:after{content:"\10f609"}.fad.fa-map-marker-plus:after{content:"\10f60a"}.fad.fa-map-marker-question:after{content:"\10f60b"}.fad.fa-map-marker-slash:after{content:"\10f60c"}.fad.fa-map-marker-smile:after{content:"\10f60d"}.fad.fa-map-marker-times:after{content:"\10f60e"}.fad.fa-map-pin:after{content:"\10f276"}.fad.fa-map-signs:after{content:"\10f277"}.fad.fa-marker:after{content:"\10f5a1"}.fad.fa-mars:after{content:"\10f222"}.fad.fa-mars-double:after{content:"\10f227"}.fad.fa-mars-stroke:after{content:"\10f229"}.fad.fa-mars-stroke-h:after{content:"\10f22b"}.fad.fa-mars-stroke-v:after{content:"\10f22a"}.fad.fa-mask:after{content:"\10f6fa"}.fad.fa-meat:after{content:"\10f814"}.fad.fa-medal:after{content:"\10f5a2"}.fad.fa-medkit:after{content:"\10f0fa"}.fad.fa-megaphone:after{content:"\10f675"}.fad.fa-meh:after{content:"\10f11a"}.fad.fa-meh-blank:after{content:"\10f5a4"}.fad.fa-meh-rolling-eyes:after{content:"\10f5a5"}.fad.fa-memory:after{content:"\10f538"}.fad.fa-menorah:after{content:"\10f676"}.fad.fa-mercury:after{content:"\10f223"}.fad.fa-meteor:after{content:"\10f753"}.fad.fa-microchip:after{content:"\10f2db"}.fad.fa-microphone:after{content:"\10f130"}.fad.fa-microphone-alt:after{content:"\10f3c9"}.fad.fa-microphone-alt-slash:after{content:"\10f539"}.fad.fa-microphone-slash:after{content:"\10f131"}.fad.fa-microphone-stand:after{content:"\10f8cb"}.fad.fa-microscope:after{content:"\10f610"}.fad.fa-microwave:after{content:"\10f91b"}.fad.fa-mind-share:after{content:"\10f677"}.fad.fa-minus:after{content:"\10f068"}.fad.fa-minus-circle:after{content:"\10f056"}.fad.fa-minus-hexagon:after{content:"\10f307"}.fad.fa-minus-octagon:after{content:"\10f308"}.fad.fa-minus-square:after{content:"\10f146"}.fad.fa-mistletoe:after{content:"\10f7b4"}.fad.fa-mitten:after{content:"\10f7b5"}.fad.fa-mobile:after{content:"\10f10b"}.fad.fa-mobile-alt:after{content:"\10f3cd"}.fad.fa-mobile-android:after{content:"\10f3ce"}.fad.fa-mobile-android-alt:after{content:"\10f3cf"}.fad.fa-money-bill:after{content:"\10f0d6"}.fad.fa-money-bill-alt:after{content:"\10f3d1"}.fad.fa-money-bill-wave:after{content:"\10f53a"}.fad.fa-money-bill-wave-alt:after{content:"\10f53b"}.fad.fa-money-check:after{content:"\10f53c"}.fad.fa-money-check-alt:after{content:"\10f53d"}.fad.fa-money-check-edit:after{content:"\10f872"}.fad.fa-money-check-edit-alt:after{content:"\10f873"}.fad.fa-monitor-heart-rate:after{content:"\10f611"}.fad.fa-monkey:after{content:"\10f6fb"}.fad.fa-monument:after{content:"\10f5a6"}.fad.fa-moon:after{content:"\10f186"}.fad.fa-moon-cloud:after{content:"\10f754"}.fad.fa-moon-stars:after{content:"\10f755"}.fad.fa-mortar-pestle:after{content:"\10f5a7"}.fad.fa-mosque:after{content:"\10f678"}.fad.fa-motorcycle:after{content:"\10f21c"}.fad.fa-mountain:after{content:"\10f6fc"}.fad.fa-mountains:after{content:"\10f6fd"}.fad.fa-mouse:after{content:"\10f8cc"}.fad.fa-mouse-alt:after{content:"\10f8cd"}.fad.fa-mouse-pointer:after{content:"\10f245"}.fad.fa-mp3-player:after{content:"\10f8ce"}.fad.fa-mug:after{content:"\10f874"}.fad.fa-mug-hot:after{content:"\10f7b6"}.fad.fa-mug-marshmallows:after{content:"\10f7b7"}.fad.fa-mug-tea:after{content:"\10f875"}.fad.fa-music:after{content:"\10f001"}.fad.fa-music-alt:after{content:"\10f8cf"}.fad.fa-music-alt-slash:after{content:"\10f8d0"}.fad.fa-music-slash:after{content:"\10f8d1"}.fad.fa-narwhal:after{content:"\10f6fe"}.fad.fa-network-wired:after{content:"\10f6ff"}.fad.fa-neuter:after{content:"\10f22c"}.fad.fa-newspaper:after{content:"\10f1ea"}.fad.fa-not-equal:after{content:"\10f53e"}.fad.fa-notes-medical:after{content:"\10f481"}.fad.fa-object-group:after{content:"\10f247"}.fad.fa-object-ungroup:after{content:"\10f248"}.fad.fa-octagon:after{content:"\10f306"}.fad.fa-oil-can:after{content:"\10f613"}.fad.fa-oil-temp:after{content:"\10f614"}.fad.fa-om:after{content:"\10f679"}.fad.fa-omega:after{content:"\10f67a"}.fad.fa-ornament:after{content:"\10f7b8"}.fad.fa-otter:after{content:"\10f700"}.fad.fa-outdent:after{content:"\10f03b"}.fad.fa-outlet:after{content:"\10f91c"}.fad.fa-oven:after{content:"\10f91d"}.fad.fa-overline:after{content:"\10f876"}.fad.fa-page-break:after{content:"\10f877"}.fad.fa-pager:after{content:"\10f815"}.fad.fa-paint-brush:after{content:"\10f1fc"}.fad.fa-paint-brush-alt:after{content:"\10f5a9"}.fad.fa-paint-roller:after{content:"\10f5aa"}.fad.fa-palette:after{content:"\10f53f"}.fad.fa-pallet:after{content:"\10f482"}.fad.fa-pallet-alt:after{content:"\10f483"}.fad.fa-paper-plane:after{content:"\10f1d8"}.fad.fa-paperclip:after{content:"\10f0c6"}.fad.fa-parachute-box:after{content:"\10f4cd"}.fad.fa-paragraph:after{content:"\10f1dd"}.fad.fa-paragraph-rtl:after{content:"\10f878"}.fad.fa-parking:after{content:"\10f540"}.fad.fa-parking-circle:after{content:"\10f615"}.fad.fa-parking-circle-slash:after{content:"\10f616"}.fad.fa-parking-slash:after{content:"\10f617"}.fad.fa-passport:after{content:"\10f5ab"}.fad.fa-pastafarianism:after{content:"\10f67b"}.fad.fa-paste:after{content:"\10f0ea"}.fad.fa-pause:after{content:"\10f04c"}.fad.fa-pause-circle:after{content:"\10f28b"}.fad.fa-paw:after{content:"\10f1b0"}.fad.fa-paw-alt:after{content:"\10f701"}.fad.fa-paw-claws:after{content:"\10f702"}.fad.fa-peace:after{content:"\10f67c"}.fad.fa-pegasus:after{content:"\10f703"}.fad.fa-pen:after{content:"\10f304"}.fad.fa-pen-alt:after{content:"\10f305"}.fad.fa-pen-fancy:after{content:"\10f5ac"}.fad.fa-pen-nib:after{content:"\10f5ad"}.fad.fa-pen-square:after{content:"\10f14b"}.fad.fa-pencil:after{content:"\10f040"}.fad.fa-pencil-alt:after{content:"\10f303"}.fad.fa-pencil-paintbrush:after{content:"\10f618"}.fad.fa-pencil-ruler:after{content:"\10f5ae"}.fad.fa-pennant:after{content:"\10f456"}.fad.fa-people-arrows:after{content:"\10f968"}.fad.fa-people-carry:after{content:"\10f4ce"}.fad.fa-pepper-hot:after{content:"\10f816"}.fad.fa-percent:after{content:"\10f295"}.fad.fa-percentage:after{content:"\10f541"}.fad.fa-person-booth:after{content:"\10f756"}.fad.fa-person-carry:after{content:"\10f4cf"}.fad.fa-person-dolly:after{content:"\10f4d0"}.fad.fa-person-dolly-empty:after{content:"\10f4d1"}.fad.fa-person-sign:after{content:"\10f757"}.fad.fa-phone:after{content:"\10f095"}.fad.fa-phone-alt:after{content:"\10f879"}.fad.fa-phone-laptop:after{content:"\10f87a"}.fad.fa-phone-office:after{content:"\10f67d"}.fad.fa-phone-plus:after{content:"\10f4d2"}.fad.fa-phone-rotary:after{content:"\10f8d3"}.fad.fa-phone-slash:after{content:"\10f3dd"}.fad.fa-phone-square:after{content:"\10f098"}.fad.fa-phone-square-alt:after{content:"\10f87b"}.fad.fa-phone-volume:after{content:"\10f2a0"}.fad.fa-photo-video:after{content:"\10f87c"}.fad.fa-pi:after{content:"\10f67e"}.fad.fa-piano:after{content:"\10f8d4"}.fad.fa-piano-keyboard:after{content:"\10f8d5"}.fad.fa-pie:after{content:"\10f705"}.fad.fa-pig:after{content:"\10f706"}.fad.fa-piggy-bank:after{content:"\10f4d3"}.fad.fa-pills:after{content:"\10f484"}.fad.fa-pizza:after{content:"\10f817"}.fad.fa-pizza-slice:after{content:"\10f818"}.fad.fa-place-of-worship:after{content:"\10f67f"}.fad.fa-plane:after{content:"\10f072"}.fad.fa-plane-alt:after{content:"\10f3de"}.fad.fa-plane-arrival:after{content:"\10f5af"}.fad.fa-plane-departure:after{content:"\10f5b0"}.fad.fa-plane-slash:after{content:"\10f969"}.fad.fa-planet-moon:after{content:"\10f91f"}.fad.fa-planet-ringed:after{content:"\10f920"}.fad.fa-play:after{content:"\10f04b"}.fad.fa-play-circle:after{content:"\10f144"}.fad.fa-plug:after{content:"\10f1e6"}.fad.fa-plus:after{content:"\10f067"}.fad.fa-plus-circle:after{content:"\10f055"}.fad.fa-plus-hexagon:after{content:"\10f300"}.fad.fa-plus-octagon:after{content:"\10f301"}.fad.fa-plus-square:after{content:"\10f0fe"}.fad.fa-podcast:after{content:"\10f2ce"}.fad.fa-podium:after{content:"\10f680"}.fad.fa-podium-star:after{content:"\10f758"}.fad.fa-police-box:after{content:"\10f921"}.fad.fa-poll:after{content:"\10f681"}.fad.fa-poll-h:after{content:"\10f682"}.fad.fa-poll-people:after{content:"\10f759"}.fad.fa-poo:after{content:"\10f2fe"}.fad.fa-poo-storm:after{content:"\10f75a"}.fad.fa-poop:after{content:"\10f619"}.fad.fa-popcorn:after{content:"\10f819"}.fad.fa-portal-enter:after{content:"\10f922"}.fad.fa-portal-exit:after{content:"\10f923"}.fad.fa-portrait:after{content:"\10f3e0"}.fad.fa-pound-sign:after{content:"\10f154"}.fad.fa-power-off:after{content:"\10f011"}.fad.fa-pray:after{content:"\10f683"}.fad.fa-praying-hands:after{content:"\10f684"}.fad.fa-prescription:after{content:"\10f5b1"}.fad.fa-prescription-bottle:after{content:"\10f485"}.fad.fa-prescription-bottle-alt:after{content:"\10f486"}.fad.fa-presentation:after{content:"\10f685"}.fad.fa-print:after{content:"\10f02f"}.fad.fa-print-search:after{content:"\10f81a"}.fad.fa-print-slash:after{content:"\10f686"}.fad.fa-procedures:after{content:"\10f487"}.fad.fa-project-diagram:after{content:"\10f542"}.fad.fa-projector:after{content:"\10f8d6"}.fad.fa-pump-medical:after{content:"\10f96a"}.fad.fa-pump-soap:after{content:"\10f96b"}.fad.fa-pumpkin:after{content:"\10f707"}.fad.fa-puzzle-piece:after{content:"\10f12e"}.fad.fa-qrcode:after{content:"\10f029"}.fad.fa-question:after{content:"\10f128"}.fad.fa-question-circle:after{content:"\10f059"}.fad.fa-question-square:after{content:"\10f2fd"}.fad.fa-quidditch:after{content:"\10f458"}.fad.fa-quote-left:after{content:"\10f10d"}.fad.fa-quote-right:after{content:"\10f10e"}.fad.fa-quran:after{content:"\10f687"}.fad.fa-rabbit:after{content:"\10f708"}.fad.fa-rabbit-fast:after{content:"\10f709"}.fad.fa-racquet:after{content:"\10f45a"}.fad.fa-radar:after{content:"\10f924"}.fad.fa-radiation:after{content:"\10f7b9"}.fad.fa-radiation-alt:after{content:"\10f7ba"}.fad.fa-radio:after{content:"\10f8d7"}.fad.fa-radio-alt:after{content:"\10f8d8"}.fad.fa-rainbow:after{content:"\10f75b"}.fad.fa-raindrops:after{content:"\10f75c"}.fad.fa-ram:after{content:"\10f70a"}.fad.fa-ramp-loading:after{content:"\10f4d4"}.fad.fa-random:after{content:"\10f074"}.fad.fa-raygun:after{content:"\10f925"}.fad.fa-receipt:after{content:"\10f543"}.fad.fa-record-vinyl:after{content:"\10f8d9"}.fad.fa-rectangle-landscape:after{content:"\10f2fa"}.fad.fa-rectangle-portrait:after{content:"\10f2fb"}.fad.fa-rectangle-wide:after{content:"\10f2fc"}.fad.fa-recycle:after{content:"\10f1b8"}.fad.fa-redo:after{content:"\10f01e"}.fad.fa-redo-alt:after{content:"\10f2f9"}.fad.fa-refrigerator:after{content:"\10f926"}.fad.fa-registered:after{content:"\10f25d"}.fad.fa-remove-format:after{content:"\10f87d"}.fad.fa-repeat:after{content:"\10f363"}.fad.fa-repeat-1:after{content:"\10f365"}.fad.fa-repeat-1-alt:after{content:"\10f366"}.fad.fa-repeat-alt:after{content:"\10f364"}.fad.fa-reply:after{content:"\10f3e5"}.fad.fa-reply-all:after{content:"\10f122"}.fad.fa-republican:after{content:"\10f75e"}.fad.fa-restroom:after{content:"\10f7bd"}.fad.fa-retweet:after{content:"\10f079"}.fad.fa-retweet-alt:after{content:"\10f361"}.fad.fa-ribbon:after{content:"\10f4d6"}.fad.fa-ring:after{content:"\10f70b"}.fad.fa-rings-wedding:after{content:"\10f81b"}.fad.fa-road:after{content:"\10f018"}.fad.fa-robot:after{content:"\10f544"}.fad.fa-rocket:after{content:"\10f135"}.fad.fa-rocket-launch:after{content:"\10f927"}.fad.fa-route:after{content:"\10f4d7"}.fad.fa-route-highway:after{content:"\10f61a"}.fad.fa-route-interstate:after{content:"\10f61b"}.fad.fa-router:after{content:"\10f8da"}.fad.fa-rss:after{content:"\10f09e"}.fad.fa-rss-square:after{content:"\10f143"}.fad.fa-ruble-sign:after{content:"\10f158"}.fad.fa-ruler:after{content:"\10f545"}.fad.fa-ruler-combined:after{content:"\10f546"}.fad.fa-ruler-horizontal:after{content:"\10f547"}.fad.fa-ruler-triangle:after{content:"\10f61c"}.fad.fa-ruler-vertical:after{content:"\10f548"}.fad.fa-running:after{content:"\10f70c"}.fad.fa-rupee-sign:after{content:"\10f156"}.fad.fa-rv:after{content:"\10f7be"}.fad.fa-sack:after{content:"\10f81c"}.fad.fa-sack-dollar:after{content:"\10f81d"}.fad.fa-sad-cry:after{content:"\10f5b3"}.fad.fa-sad-tear:after{content:"\10f5b4"}.fad.fa-salad:after{content:"\10f81e"}.fad.fa-sandwich:after{content:"\10f81f"}.fad.fa-satellite:after{content:"\10f7bf"}.fad.fa-satellite-dish:after{content:"\10f7c0"}.fad.fa-sausage:after{content:"\10f820"}.fad.fa-save:after{content:"\10f0c7"}.fad.fa-sax-hot:after{content:"\10f8db"}.fad.fa-saxophone:after{content:"\10f8dc"}.fad.fa-scalpel:after{content:"\10f61d"}.fad.fa-scalpel-path:after{content:"\10f61e"}.fad.fa-scanner:after{content:"\10f488"}.fad.fa-scanner-image:after{content:"\10f8f3"}.fad.fa-scanner-keyboard:after{content:"\10f489"}.fad.fa-scanner-touchscreen:after{content:"\10f48a"}.fad.fa-scarecrow:after{content:"\10f70d"}.fad.fa-scarf:after{content:"\10f7c1"}.fad.fa-school:after{content:"\10f549"}.fad.fa-screwdriver:after{content:"\10f54a"}.fad.fa-scroll:after{content:"\10f70e"}.fad.fa-scroll-old:after{content:"\10f70f"}.fad.fa-scrubber:after{content:"\10f2f8"}.fad.fa-scythe:after{content:"\10f710"}.fad.fa-sd-card:after{content:"\10f7c2"}.fad.fa-search:after{content:"\10f002"}.fad.fa-search-dollar:after{content:"\10f688"}.fad.fa-search-location:after{content:"\10f689"}.fad.fa-search-minus:after{content:"\10f010"}.fad.fa-search-plus:after{content:"\10f00e"}.fad.fa-seedling:after{content:"\10f4d8"}.fad.fa-send-back:after{content:"\10f87e"}.fad.fa-send-backward:after{content:"\10f87f"}.fad.fa-sensor:after{content:"\10f928"}.fad.fa-sensor-alert:after{content:"\10f929"}.fad.fa-sensor-fire:after{content:"\10f92a"}.fad.fa-sensor-on:after{content:"\10f92b"}.fad.fa-sensor-smoke:after{content:"\10f92c"}.fad.fa-server:after{content:"\10f233"}.fad.fa-shapes:after{content:"\10f61f"}.fad.fa-share:after{content:"\10f064"}.fad.fa-share-all:after{content:"\10f367"}.fad.fa-share-alt:after{content:"\10f1e0"}.fad.fa-share-alt-square:after{content:"\10f1e1"}.fad.fa-share-square:after{content:"\10f14d"}.fad.fa-sheep:after{content:"\10f711"}.fad.fa-shekel-sign:after{content:"\10f20b"}.fad.fa-shield:after{content:"\10f132"}.fad.fa-shield-alt:after{content:"\10f3ed"}.fad.fa-shield-check:after{content:"\10f2f7"}.fad.fa-shield-cross:after{content:"\10f712"}.fad.fa-shield-virus:after{content:"\10f96c"}.fad.fa-ship:after{content:"\10f21a"}.fad.fa-shipping-fast:after{content:"\10f48b"}.fad.fa-shipping-timed:after{content:"\10f48c"}.fad.fa-shish-kebab:after{content:"\10f821"}.fad.fa-shoe-prints:after{content:"\10f54b"}.fad.fa-shopping-bag:after{content:"\10f290"}.fad.fa-shopping-basket:after{content:"\10f291"}.fad.fa-shopping-cart:after{content:"\10f07a"}.fad.fa-shovel:after{content:"\10f713"}.fad.fa-shovel-snow:after{content:"\10f7c3"}.fad.fa-shower:after{content:"\10f2cc"}.fad.fa-shredder:after{content:"\10f68a"}.fad.fa-shuttle-van:after{content:"\10f5b6"}.fad.fa-shuttlecock:after{content:"\10f45b"}.fad.fa-sickle:after{content:"\10f822"}.fad.fa-sigma:after{content:"\10f68b"}.fad.fa-sign:after{content:"\10f4d9"}.fad.fa-sign-in:after{content:"\10f090"}.fad.fa-sign-in-alt:after{content:"\10f2f6"}.fad.fa-sign-language:after{content:"\10f2a7"}.fad.fa-sign-out:after{content:"\10f08b"}.fad.fa-sign-out-alt:after{content:"\10f2f5"}.fad.fa-signal:after{content:"\10f012"}.fad.fa-signal-1:after{content:"\10f68c"}.fad.fa-signal-2:after{content:"\10f68d"}.fad.fa-signal-3:after{content:"\10f68e"}.fad.fa-signal-4:after{content:"\10f68f"}.fad.fa-signal-alt:after{content:"\10f690"}.fad.fa-signal-alt-1:after{content:"\10f691"}.fad.fa-signal-alt-2:after{content:"\10f692"}.fad.fa-signal-alt-3:after{content:"\10f693"}.fad.fa-signal-alt-slash:after{content:"\10f694"}.fad.fa-signal-slash:after{content:"\10f695"}.fad.fa-signal-stream:after{content:"\10f8dd"}.fad.fa-signature:after{content:"\10f5b7"}.fad.fa-sim-card:after{content:"\10f7c4"}.fad.fa-sink:after{content:"\10f96d"}.fad.fa-siren:after{content:"\10f92d"}.fad.fa-siren-on:after{content:"\10f92e"}.fad.fa-sitemap:after{content:"\10f0e8"}.fad.fa-skating:after{content:"\10f7c5"}.fad.fa-skeleton:after{content:"\10f620"}.fad.fa-ski-jump:after{content:"\10f7c7"}.fad.fa-ski-lift:after{content:"\10f7c8"}.fad.fa-skiing:after{content:"\10f7c9"}.fad.fa-skiing-nordic:after{content:"\10f7ca"}.fad.fa-skull:after{content:"\10f54c"}.fad.fa-skull-cow:after{content:"\10f8de"}.fad.fa-skull-crossbones:after{content:"\10f714"}.fad.fa-slash:after{content:"\10f715"}.fad.fa-sledding:after{content:"\10f7cb"}.fad.fa-sleigh:after{content:"\10f7cc"}.fad.fa-sliders-h:after{content:"\10f1de"}.fad.fa-sliders-h-square:after{content:"\10f3f0"}.fad.fa-sliders-v:after{content:"\10f3f1"}.fad.fa-sliders-v-square:after{content:"\10f3f2"}.fad.fa-smile:after{content:"\10f118"}.fad.fa-smile-beam:after{content:"\10f5b8"}.fad.fa-smile-plus:after{content:"\10f5b9"}.fad.fa-smile-wink:after{content:"\10f4da"}.fad.fa-smog:after{content:"\10f75f"}.fad.fa-smoke:after{content:"\10f760"}.fad.fa-smoking:after{content:"\10f48d"}.fad.fa-smoking-ban:after{content:"\10f54d"}.fad.fa-sms:after{content:"\10f7cd"}.fad.fa-snake:after{content:"\10f716"}.fad.fa-snooze:after{content:"\10f880"}.fad.fa-snow-blowing:after{content:"\10f761"}.fad.fa-snowboarding:after{content:"\10f7ce"}.fad.fa-snowflake:after{content:"\10f2dc"}.fad.fa-snowflakes:after{content:"\10f7cf"}.fad.fa-snowman:after{content:"\10f7d0"}.fad.fa-snowmobile:after{content:"\10f7d1"}.fad.fa-snowplow:after{content:"\10f7d2"}.fad.fa-soap:after{content:"\10f96e"}.fad.fa-socks:after{content:"\10f696"}.fad.fa-solar-panel:after{content:"\10f5ba"}.fad.fa-solar-system:after{content:"\10f92f"}.fad.fa-sort:after{content:"\10f0dc"}.fad.fa-sort-alpha-down:after{content:"\10f15d"}.fad.fa-sort-alpha-down-alt:after{content:"\10f881"}.fad.fa-sort-alpha-up:after{content:"\10f15e"}.fad.fa-sort-alpha-up-alt:after{content:"\10f882"}.fad.fa-sort-alt:after{content:"\10f883"}.fad.fa-sort-amount-down:after{content:"\10f160"}.fad.fa-sort-amount-down-alt:after{content:"\10f884"}.fad.fa-sort-amount-up:after{content:"\10f161"}.fad.fa-sort-amount-up-alt:after{content:"\10f885"}.fad.fa-sort-circle:after{content:"\10f930"}.fad.fa-sort-circle-down:after{content:"\10f931"}.fad.fa-sort-circle-up:after{content:"\10f932"}.fad.fa-sort-down:after{content:"\10f0dd"}.fad.fa-sort-numeric-down:after{content:"\10f162"}.fad.fa-sort-numeric-down-alt:after{content:"\10f886"}.fad.fa-sort-numeric-up:after{content:"\10f163"}.fad.fa-sort-numeric-up-alt:after{content:"\10f887"}.fad.fa-sort-shapes-down:after{content:"\10f888"}.fad.fa-sort-shapes-down-alt:after{content:"\10f889"}.fad.fa-sort-shapes-up:after{content:"\10f88a"}.fad.fa-sort-shapes-up-alt:after{content:"\10f88b"}.fad.fa-sort-size-down:after{content:"\10f88c"}.fad.fa-sort-size-down-alt:after{content:"\10f88d"}.fad.fa-sort-size-up:after{content:"\10f88e"}.fad.fa-sort-size-up-alt:after{content:"\10f88f"}.fad.fa-sort-up:after{content:"\10f0de"}.fad.fa-soup:after{content:"\10f823"}.fad.fa-spa:after{content:"\10f5bb"}.fad.fa-space-shuttle:after{content:"\10f197"}.fad.fa-space-station-moon:after{content:"\10f933"}.fad.fa-space-station-moon-alt:after{content:"\10f934"}.fad.fa-spade:after{content:"\10f2f4"}.fad.fa-sparkles:after{content:"\10f890"}.fad.fa-speaker:after{content:"\10f8df"}.fad.fa-speakers:after{content:"\10f8e0"}.fad.fa-spell-check:after{content:"\10f891"}.fad.fa-spider:after{content:"\10f717"}.fad.fa-spider-black-widow:after{content:"\10f718"}.fad.fa-spider-web:after{content:"\10f719"}.fad.fa-spinner:after{content:"\10f110"}.fad.fa-spinner-third:after{content:"\10f3f4"}.fad.fa-splotch:after{content:"\10f5bc"}.fad.fa-spray-can:after{content:"\10f5bd"}.fad.fa-sprinkler:after{content:"\10f935"}.fad.fa-square:after{content:"\10f0c8"}.fad.fa-square-full:after{content:"\10f45c"}.fad.fa-square-root:after{content:"\10f697"}.fad.fa-square-root-alt:after{content:"\10f698"}.fad.fa-squirrel:after{content:"\10f71a"}.fad.fa-staff:after{content:"\10f71b"}.fad.fa-stamp:after{content:"\10f5bf"}.fad.fa-star:after{content:"\10f005"}.fad.fa-star-and-crescent:after{content:"\10f699"}.fad.fa-star-christmas:after{content:"\10f7d4"}.fad.fa-star-exclamation:after{content:"\10f2f3"}.fad.fa-star-half:after{content:"\10f089"}.fad.fa-star-half-alt:after{content:"\10f5c0"}.fad.fa-star-of-david:after{content:"\10f69a"}.fad.fa-star-of-life:after{content:"\10f621"}.fad.fa-star-shooting:after{content:"\10f936"}.fad.fa-starfighter:after{content:"\10f937"}.fad.fa-starfighter-alt:after{content:"\10f938"}.fad.fa-stars:after{content:"\10f762"}.fad.fa-starship:after{content:"\10f939"}.fad.fa-starship-freighter:after{content:"\10f93a"}.fad.fa-steak:after{content:"\10f824"}.fad.fa-steering-wheel:after{content:"\10f622"}.fad.fa-step-backward:after{content:"\10f048"}.fad.fa-step-forward:after{content:"\10f051"}.fad.fa-stethoscope:after{content:"\10f0f1"}.fad.fa-sticky-note:after{content:"\10f249"}.fad.fa-stocking:after{content:"\10f7d5"}.fad.fa-stomach:after{content:"\10f623"}.fad.fa-stop:after{content:"\10f04d"}.fad.fa-stop-circle:after{content:"\10f28d"}.fad.fa-stopwatch:after{content:"\10f2f2"}.fad.fa-stopwatch-20:after{content:"\10f96f"}.fad.fa-store:after{content:"\10f54e"}.fad.fa-store-alt:after{content:"\10f54f"}.fad.fa-store-alt-slash:after{content:"\10f970"}.fad.fa-store-slash:after{content:"\10f971"}.fad.fa-stream:after{content:"\10f550"}.fad.fa-street-view:after{content:"\10f21d"}.fad.fa-stretcher:after{content:"\10f825"}.fad.fa-strikethrough:after{content:"\10f0cc"}.fad.fa-stroopwafel:after{content:"\10f551"}.fad.fa-subscript:after{content:"\10f12c"}.fad.fa-subway:after{content:"\10f239"}.fad.fa-suitcase:after{content:"\10f0f2"}.fad.fa-suitcase-rolling:after{content:"\10f5c1"}.fad.fa-sun:after{content:"\10f185"}.fad.fa-sun-cloud:after{content:"\10f763"}.fad.fa-sun-dust:after{content:"\10f764"}.fad.fa-sun-haze:after{content:"\10f765"}.fad.fa-sunglasses:after{content:"\10f892"}.fad.fa-sunrise:after{content:"\10f766"}.fad.fa-sunset:after{content:"\10f767"}.fad.fa-superscript:after{content:"\10f12b"}.fad.fa-surprise:after{content:"\10f5c2"}.fad.fa-swatchbook:after{content:"\10f5c3"}.fad.fa-swimmer:after{content:"\10f5c4"}.fad.fa-swimming-pool:after{content:"\10f5c5"}.fad.fa-sword:after{content:"\10f71c"}.fad.fa-sword-laser:after{content:"\10f93b"}.fad.fa-sword-laser-alt:after{content:"\10f93c"}.fad.fa-swords:after{content:"\10f71d"}.fad.fa-swords-laser:after{content:"\10f93d"}.fad.fa-synagogue:after{content:"\10f69b"}.fad.fa-sync:after{content:"\10f021"}.fad.fa-sync-alt:after{content:"\10f2f1"}.fad.fa-syringe:after{content:"\10f48e"}.fad.fa-table:after{content:"\10f0ce"}.fad.fa-table-tennis:after{content:"\10f45d"}.fad.fa-tablet:after{content:"\10f10a"}.fad.fa-tablet-alt:after{content:"\10f3fa"}.fad.fa-tablet-android:after{content:"\10f3fb"}.fad.fa-tablet-android-alt:after{content:"\10f3fc"}.fad.fa-tablet-rugged:after{content:"\10f48f"}.fad.fa-tablets:after{content:"\10f490"}.fad.fa-tachometer:after{content:"\10f0e4"}.fad.fa-tachometer-alt:after{content:"\10f3fd"}.fad.fa-tachometer-alt-average:after{content:"\10f624"}.fad.fa-tachometer-alt-fast:after{content:"\10f625"}.fad.fa-tachometer-alt-fastest:after{content:"\10f626"}.fad.fa-tachometer-alt-slow:after{content:"\10f627"}.fad.fa-tachometer-alt-slowest:after{content:"\10f628"}.fad.fa-tachometer-average:after{content:"\10f629"}.fad.fa-tachometer-fast:after{content:"\10f62a"}.fad.fa-tachometer-fastest:after{content:"\10f62b"}.fad.fa-tachometer-slow:after{content:"\10f62c"}.fad.fa-tachometer-slowest:after{content:"\10f62d"}.fad.fa-taco:after{content:"\10f826"}.fad.fa-tag:after{content:"\10f02b"}.fad.fa-tags:after{content:"\10f02c"}.fad.fa-tally:after{content:"\10f69c"}.fad.fa-tanakh:after{content:"\10f827"}.fad.fa-tape:after{content:"\10f4db"}.fad.fa-tasks:after{content:"\10f0ae"}.fad.fa-tasks-alt:after{content:"\10f828"}.fad.fa-taxi:after{content:"\10f1ba"}.fad.fa-teeth:after{content:"\10f62e"}.fad.fa-teeth-open:after{content:"\10f62f"}.fad.fa-telescope:after{content:"\10f93e"}.fad.fa-temperature-down:after{content:"\10f93f"}.fad.fa-temperature-frigid:after{content:"\10f768"}.fad.fa-temperature-high:after{content:"\10f769"}.fad.fa-temperature-hot:after{content:"\10f76a"}.fad.fa-temperature-low:after{content:"\10f76b"}.fad.fa-temperature-up:after{content:"\10f940"}.fad.fa-tenge:after{content:"\10f7d7"}.fad.fa-tennis-ball:after{content:"\10f45e"}.fad.fa-terminal:after{content:"\10f120"}.fad.fa-text:after{content:"\10f893"}.fad.fa-text-height:after{content:"\10f034"}.fad.fa-text-size:after{content:"\10f894"}.fad.fa-text-width:after{content:"\10f035"}.fad.fa-th:after{content:"\10f00a"}.fad.fa-th-large:after{content:"\10f009"}.fad.fa-th-list:after{content:"\10f00b"}.fad.fa-theater-masks:after{content:"\10f630"}.fad.fa-thermometer:after{content:"\10f491"}.fad.fa-thermometer-empty:after{content:"\10f2cb"}.fad.fa-thermometer-full:after{content:"\10f2c7"}.fad.fa-thermometer-half:after{content:"\10f2c9"}.fad.fa-thermometer-quarter:after{content:"\10f2ca"}.fad.fa-thermometer-three-quarters:after{content:"\10f2c8"}.fad.fa-theta:after{content:"\10f69e"}.fad.fa-thumbs-down:after{content:"\10f165"}.fad.fa-thumbs-up:after{content:"\10f164"}.fad.fa-thumbtack:after{content:"\10f08d"}.fad.fa-thunderstorm:after{content:"\10f76c"}.fad.fa-thunderstorm-moon:after{content:"\10f76d"}.fad.fa-thunderstorm-sun:after{content:"\10f76e"}.fad.fa-ticket:after{content:"\10f145"}.fad.fa-ticket-alt:after{content:"\10f3ff"}.fad.fa-tilde:after{content:"\10f69f"}.fad.fa-times:after{content:"\10f00d"}.fad.fa-times-circle:after{content:"\10f057"}.fad.fa-times-hexagon:after{content:"\10f2ee"}.fad.fa-times-octagon:after{content:"\10f2f0"}.fad.fa-times-square:after{content:"\10f2d3"}.fad.fa-tint:after{content:"\10f043"}.fad.fa-tint-slash:after{content:"\10f5c7"}.fad.fa-tire:after{content:"\10f631"}.fad.fa-tire-flat:after{content:"\10f632"}.fad.fa-tire-pressure-warning:after{content:"\10f633"}.fad.fa-tire-rugged:after{content:"\10f634"}.fad.fa-tired:after{content:"\10f5c8"}.fad.fa-toggle-off:after{content:"\10f204"}.fad.fa-toggle-on:after{content:"\10f205"}.fad.fa-toilet:after{content:"\10f7d8"}.fad.fa-toilet-paper:after{content:"\10f71e"}.fad.fa-toilet-paper-alt:after{content:"\10f71f"}.fad.fa-toilet-paper-slash:after{content:"\10f972"}.fad.fa-tombstone:after{content:"\10f720"}.fad.fa-tombstone-alt:after{content:"\10f721"}.fad.fa-toolbox:after{content:"\10f552"}.fad.fa-tools:after{content:"\10f7d9"}.fad.fa-tooth:after{content:"\10f5c9"}.fad.fa-toothbrush:after{content:"\10f635"}.fad.fa-torah:after{content:"\10f6a0"}.fad.fa-torii-gate:after{content:"\10f6a1"}.fad.fa-tornado:after{content:"\10f76f"}.fad.fa-tractor:after{content:"\10f722"}.fad.fa-trademark:after{content:"\10f25c"}.fad.fa-traffic-cone:after{content:"\10f636"}.fad.fa-traffic-light:after{content:"\10f637"}.fad.fa-traffic-light-go:after{content:"\10f638"}.fad.fa-traffic-light-slow:after{content:"\10f639"}.fad.fa-traffic-light-stop:after{content:"\10f63a"}.fad.fa-trailer:after{content:"\10f941"}.fad.fa-train:after{content:"\10f238"}.fad.fa-tram:after{content:"\10f7da"}.fad.fa-transgender:after{content:"\10f224"}.fad.fa-transgender-alt:after{content:"\10f225"}.fad.fa-transporter:after{content:"\10f942"}.fad.fa-transporter-1:after{content:"\10f943"}.fad.fa-transporter-2:after{content:"\10f944"}.fad.fa-transporter-3:after{content:"\10f945"}.fad.fa-transporter-empty:after{content:"\10f946"}.fad.fa-trash:after{content:"\10f1f8"}.fad.fa-trash-alt:after{content:"\10f2ed"}.fad.fa-trash-restore:after{content:"\10f829"}.fad.fa-trash-restore-alt:after{content:"\10f82a"}.fad.fa-trash-undo:after{content:"\10f895"}.fad.fa-trash-undo-alt:after{content:"\10f896"}.fad.fa-treasure-chest:after{content:"\10f723"}.fad.fa-tree:after{content:"\10f1bb"}.fad.fa-tree-alt:after{content:"\10f400"}.fad.fa-tree-christmas:after{content:"\10f7db"}.fad.fa-tree-decorated:after{content:"\10f7dc"}.fad.fa-tree-large:after{content:"\10f7dd"}.fad.fa-tree-palm:after{content:"\10f82b"}.fad.fa-trees:after{content:"\10f724"}.fad.fa-triangle:after{content:"\10f2ec"}.fad.fa-triangle-music:after{content:"\10f8e2"}.fad.fa-trophy:after{content:"\10f091"}.fad.fa-trophy-alt:after{content:"\10f2eb"}.fad.fa-truck:after{content:"\10f0d1"}.fad.fa-truck-container:after{content:"\10f4dc"}.fad.fa-truck-couch:after{content:"\10f4dd"}.fad.fa-truck-loading:after{content:"\10f4de"}.fad.fa-truck-monster:after{content:"\10f63b"}.fad.fa-truck-moving:after{content:"\10f4df"}.fad.fa-truck-pickup:after{content:"\10f63c"}.fad.fa-truck-plow:after{content:"\10f7de"}.fad.fa-truck-ramp:after{content:"\10f4e0"}.fad.fa-trumpet:after{content:"\10f8e3"}.fad.fa-tshirt:after{content:"\10f553"}.fad.fa-tty:after{content:"\10f1e4"}.fad.fa-turkey:after{content:"\10f725"}.fad.fa-turntable:after{content:"\10f8e4"}.fad.fa-turtle:after{content:"\10f726"}.fad.fa-tv:after{content:"\10f26c"}.fad.fa-tv-alt:after{content:"\10f8e5"}.fad.fa-tv-music:after{content:"\10f8e6"}.fad.fa-tv-retro:after{content:"\10f401"}.fad.fa-typewriter:after{content:"\10f8e7"}.fad.fa-ufo:after{content:"\10f947"}.fad.fa-ufo-beam:after{content:"\10f948"}.fad.fa-umbrella:after{content:"\10f0e9"}.fad.fa-umbrella-beach:after{content:"\10f5ca"}.fad.fa-underline:after{content:"\10f0cd"}.fad.fa-undo:after{content:"\10f0e2"}.fad.fa-undo-alt:after{content:"\10f2ea"}.fad.fa-unicorn:after{content:"\10f727"}.fad.fa-union:after{content:"\10f6a2"}.fad.fa-universal-access:after{content:"\10f29a"}.fad.fa-university:after{content:"\10f19c"}.fad.fa-unlink:after{content:"\10f127"}.fad.fa-unlock:after{content:"\10f09c"}.fad.fa-unlock-alt:after{content:"\10f13e"}.fad.fa-upload:after{content:"\10f093"}.fad.fa-usb-drive:after{content:"\10f8e9"}.fad.fa-usd-circle:after{content:"\10f2e8"}.fad.fa-usd-square:after{content:"\10f2e9"}.fad.fa-user:after{content:"\10f007"}.fad.fa-user-alien:after{content:"\10f94a"}.fad.fa-user-alt:after{content:"\10f406"}.fad.fa-user-alt-slash:after{content:"\10f4fa"}.fad.fa-user-astronaut:after{content:"\10f4fb"}.fad.fa-user-chart:after{content:"\10f6a3"}.fad.fa-user-check:after{content:"\10f4fc"}.fad.fa-user-circle:after{content:"\10f2bd"}.fad.fa-user-clock:after{content:"\10f4fd"}.fad.fa-user-cog:after{content:"\10f4fe"}.fad.fa-user-cowboy:after{content:"\10f8ea"}.fad.fa-user-crown:after{content:"\10f6a4"}.fad.fa-user-edit:after{content:"\10f4ff"}.fad.fa-user-friends:after{content:"\10f500"}.fad.fa-user-graduate:after{content:"\10f501"}.fad.fa-user-hard-hat:after{content:"\10f82c"}.fad.fa-user-headset:after{content:"\10f82d"}.fad.fa-user-injured:after{content:"\10f728"}.fad.fa-user-lock:after{content:"\10f502"}.fad.fa-user-md:after{content:"\10f0f0"}.fad.fa-user-md-chat:after{content:"\10f82e"}.fad.fa-user-minus:after{content:"\10f503"}.fad.fa-user-music:after{content:"\10f8eb"}.fad.fa-user-ninja:after{content:"\10f504"}.fad.fa-user-nurse:after{content:"\10f82f"}.fad.fa-user-plus:after{content:"\10f234"}.fad.fa-user-robot:after{content:"\10f94b"}.fad.fa-user-secret:after{content:"\10f21b"}.fad.fa-user-shield:after{content:"\10f505"}.fad.fa-user-slash:after{content:"\10f506"}.fad.fa-user-tag:after{content:"\10f507"}.fad.fa-user-tie:after{content:"\10f508"}.fad.fa-user-times:after{content:"\10f235"}.fad.fa-user-unlock:after{content:"\10f958"}.fad.fa-user-visor:after{content:"\10f94c"}.fad.fa-users:after{content:"\10f0c0"}.fad.fa-users-class:after{content:"\10f63d"}.fad.fa-users-cog:after{content:"\10f509"}.fad.fa-users-crown:after{content:"\10f6a5"}.fad.fa-users-medical:after{content:"\10f830"}.fad.fa-users-slash:after{content:"\10f973"}.fad.fa-utensil-fork:after{content:"\10f2e3"}.fad.fa-utensil-knife:after{content:"\10f2e4"}.fad.fa-utensil-spoon:after{content:"\10f2e5"}.fad.fa-utensils:after{content:"\10f2e7"}.fad.fa-utensils-alt:after{content:"\10f2e6"}.fad.fa-vacuum:after{content:"\10f94d"}.fad.fa-vacuum-robot:after{content:"\10f94e"}.fad.fa-value-absolute:after{content:"\10f6a6"}.fad.fa-vector-square:after{content:"\10f5cb"}.fad.fa-venus:after{content:"\10f221"}.fad.fa-venus-double:after{content:"\10f226"}.fad.fa-venus-mars:after{content:"\10f228"}.fad.fa-vhs:after{content:"\10f8ec"}.fad.fa-vial:after{content:"\10f492"}.fad.fa-vials:after{content:"\10f493"}.fad.fa-video:after{content:"\10f03d"}.fad.fa-video-plus:after{content:"\10f4e1"}.fad.fa-video-slash:after{content:"\10f4e2"}.fad.fa-vihara:after{content:"\10f6a7"}.fad.fa-violin:after{content:"\10f8ed"}.fad.fa-virus:after{content:"\10f974"}.fad.fa-virus-slash:after{content:"\10f975"}.fad.fa-viruses:after{content:"\10f976"}.fad.fa-voicemail:after{content:"\10f897"}.fad.fa-volcano:after{content:"\10f770"}.fad.fa-volleyball-ball:after{content:"\10f45f"}.fad.fa-volume:after{content:"\10f6a8"}.fad.fa-volume-down:after{content:"\10f027"}.fad.fa-volume-mute:after{content:"\10f6a9"}.fad.fa-volume-off:after{content:"\10f026"}.fad.fa-volume-slash:after{content:"\10f2e2"}.fad.fa-volume-up:after{content:"\10f028"}.fad.fa-vote-nay:after{content:"\10f771"}.fad.fa-vote-yea:after{content:"\10f772"}.fad.fa-vr-cardboard:after{content:"\10f729"}.fad.fa-wagon-covered:after{content:"\10f8ee"}.fad.fa-walker:after{content:"\10f831"}.fad.fa-walkie-talkie:after{content:"\10f8ef"}.fad.fa-walking:after{content:"\10f554"}.fad.fa-wallet:after{content:"\10f555"}.fad.fa-wand:after{content:"\10f72a"}.fad.fa-wand-magic:after{content:"\10f72b"}.fad.fa-warehouse:after{content:"\10f494"}.fad.fa-warehouse-alt:after{content:"\10f495"}.fad.fa-washer:after{content:"\10f898"}.fad.fa-watch:after{content:"\10f2e1"}.fad.fa-watch-calculator:after{content:"\10f8f0"}.fad.fa-watch-fitness:after{content:"\10f63e"}.fad.fa-water:after{content:"\10f773"}.fad.fa-water-lower:after{content:"\10f774"}.fad.fa-water-rise:after{content:"\10f775"}.fad.fa-wave-sine:after{content:"\10f899"}.fad.fa-wave-square:after{content:"\10f83e"}.fad.fa-wave-triangle:after{content:"\10f89a"}.fad.fa-waveform:after{content:"\10f8f1"}.fad.fa-waveform-path:after{content:"\10f8f2"}.fad.fa-webcam:after{content:"\10f832"}.fad.fa-webcam-slash:after{content:"\10f833"}.fad.fa-weight:after{content:"\10f496"}.fad.fa-weight-hanging:after{content:"\10f5cd"}.fad.fa-whale:after{content:"\10f72c"}.fad.fa-wheat:after{content:"\10f72d"}.fad.fa-wheelchair:after{content:"\10f193"}.fad.fa-whistle:after{content:"\10f460"}.fad.fa-wifi:after{content:"\10f1eb"}.fad.fa-wifi-1:after{content:"\10f6aa"}.fad.fa-wifi-2:after{content:"\10f6ab"}.fad.fa-wifi-slash:after{content:"\10f6ac"}.fad.fa-wind:after{content:"\10f72e"}.fad.fa-wind-turbine:after{content:"\10f89b"}.fad.fa-wind-warning:after{content:"\10f776"}.fad.fa-window:after{content:"\10f40e"}.fad.fa-window-alt:after{content:"\10f40f"}.fad.fa-window-close:after{content:"\10f410"}.fad.fa-window-frame:after{content:"\10f94f"}.fad.fa-window-frame-open:after{content:"\10f950"}.fad.fa-window-maximize:after{content:"\10f2d0"}.fad.fa-window-minimize:after{content:"\10f2d1"}.fad.fa-window-restore:after{content:"\10f2d2"}.fad.fa-windsock:after{content:"\10f777"}.fad.fa-wine-bottle:after{content:"\10f72f"}.fad.fa-wine-glass:after{content:"\10f4e3"}.fad.fa-wine-glass-alt:after{content:"\10f5ce"}.fad.fa-won-sign:after{content:"\10f159"}.fad.fa-wreath:after{content:"\10f7e2"}.fad.fa-wrench:after{content:"\10f0ad"}.fad.fa-x-ray:after{content:"\10f497"}.fad.fa-yen-sign:after{content:"\10f157"}.fad.fa-yin-yang:after{content:"\10f6ad"}/*! + * Font Awesome Pro 5.0.7 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;src:url(fonts/fa-brands-400.eot);src:url(fonts/fa-brands-400d41d.eot?#iefix) format("embedded-opentype"),url(fonts/fa-brands-400.woff2) format("woff2"),url(fonts/fa-brands-400.woff) format("woff"),url(fonts/fa-brands-400.ttf) format("truetype"),url(fonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}/*! + * Font Awesome Pro 5.0.7 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:300;src:url(fonts/fa-light-300.eot);src:url(fonts/fa-light-300d41d.eot?#iefix) format("embedded-opentype"),url(fonts/fa-light-300.woff2) format("woff2"),url(fonts/fa-light-300.woff) format("woff"),url(fonts/fa-light-300.ttf) format("truetype"),url(fonts/fa-light-300.svg#fontawesome) format("svg")}.fal{font-family:"Font Awesome 5 Pro";font-weight:300}/*! + * Font Awesome Pro 5.0.7 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:400;src:url(fonts/fa-regular-400.eot);src:url(fonts/fa-regular-400d41d.eot?#iefix) format("embedded-opentype"),url(fonts/fa-regular-400.woff2) format("woff2"),url(fonts/fa-regular-400.woff) format("woff"),url(fonts/fa-regular-400.ttf) format("truetype"),url(fonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Pro";font-weight:400}/*! + * Font Awesome Pro 5.0.7 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;src:url(fonts/fa-solid-900.eot);src:url(fonts/fa-solid-900d41d.eot?#iefix) format("embedded-opentype"),url(fonts/fa-solid-900.woff2) format("woff2"),url(fonts/fa-solid-900.woff) format("woff"),url(fonts/fa-solid-900.ttf) format("truetype"),url(fonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Pro";font-weight:900} \ No newline at end of file diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.eot new file mode 100644 index 0000000..a157bbe Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.svg b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.svg new file mode 100644 index 0000000..604731b --- /dev/null +++ b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:11 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.ttf b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.ttf new file mode 100644 index 0000000..1b9e561 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.ttf differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.woff b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.woff new file mode 100644 index 0000000..710daa0 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.woff differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.woff2 b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.woff2 new file mode 100644 index 0000000..6159608 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400.woff2 differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400d41d.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400d41d.eot new file mode 100644 index 0000000..a157bbe Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-brands-400d41d.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.eot new file mode 100644 index 0000000..d4643e9 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.svg b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.svg new file mode 100644 index 0000000..be2d862 --- /dev/null +++ b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.svg @@ -0,0 +1,15055 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:12 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.ttf b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.ttf new file mode 100644 index 0000000..de0cba0 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.ttf differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.woff b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.woff new file mode 100644 index 0000000..80fab10 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.woff differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.woff2 b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.woff2 new file mode 100644 index 0000000..9f1bfab Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900.woff2 differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900d41d.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900d41d.eot new file mode 100644 index 0000000..d4643e9 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-duotone-900d41d.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.eot new file mode 100644 index 0000000..3022a93 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.svg b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.svg new file mode 100644 index 0000000..e4b8df6 --- /dev/null +++ b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.svg @@ -0,0 +1,12330 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:12 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.ttf b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.ttf new file mode 100644 index 0000000..6cbc5bb Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.ttf differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.woff b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.woff new file mode 100644 index 0000000..bc7f599 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.woff differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.woff2 b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.woff2 new file mode 100644 index 0000000..905f3e6 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300.woff2 differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300d41d.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300d41d.eot new file mode 100644 index 0000000..3022a93 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-light-300d41d.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.eot new file mode 100644 index 0000000..e159e88 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.svg b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.svg new file mode 100644 index 0000000..9e76280 --- /dev/null +++ b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.svg @@ -0,0 +1,11256 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:13 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.ttf b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.ttf new file mode 100644 index 0000000..3e59ba4 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.ttf differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.woff b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.woff new file mode 100644 index 0000000..299ace5 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.woff differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.woff2 b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.woff2 new file mode 100644 index 0000000..8d941d2 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400.woff2 differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400d41d.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400d41d.eot new file mode 100644 index 0000000..e159e88 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-regular-400d41d.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.eot new file mode 100644 index 0000000..32d630e Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.eot differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.svg b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.svg new file mode 100644 index 0000000..6736ffa --- /dev/null +++ b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.svg @@ -0,0 +1,9588 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:12 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.ttf b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.ttf new file mode 100644 index 0000000..57f4d60 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.ttf differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.woff b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.woff new file mode 100644 index 0000000..7066a56 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.woff differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.woff2 b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.woff2 new file mode 100644 index 0000000..af2dd82 Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900.woff2 differ diff --git a/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900d41d.eot b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900d41d.eot new file mode 100644 index 0000000..32d630e Binary files /dev/null and b/legacy/smartadmin/webfonts/fontawesome/fonts/fa-solid-900d41d.eot differ diff --git a/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.eot b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.eot new file mode 100644 index 0000000..30f95b3 Binary files /dev/null and b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.eot differ diff --git a/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.svg b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.svg new file mode 100644 index 0000000..60354c2 --- /dev/null +++ b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.svg @@ -0,0 +1,648 @@ + + + + +Created by FontForge 20150827 at Thu Oct 19 10:01:28 2017 + By sunny + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.ttf b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.ttf new file mode 100644 index 0000000..30f95b3 Binary files /dev/null and b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.ttf differ diff --git a/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.woff b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.woff new file mode 100644 index 0000000..ea0e36f Binary files /dev/null and b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.woff differ diff --git a/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.woff2 b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.woff2 new file mode 100644 index 0000000..a3599a6 Binary files /dev/null and b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-icons.woff2 differ diff --git a/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-iconsd41d.eot b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-iconsd41d.eot new file mode 100644 index 0000000..30f95b3 Binary files /dev/null and b/legacy/smartadmin/webfonts/smartadmin/fonts/smartadmin-iconsd41d.eot differ diff --git a/legacy/smartadmin/webfonts/smartadmin/sa-icons.css b/legacy/smartadmin/webfonts/smartadmin/sa-icons.css new file mode 100644 index 0000000..3adf5db --- /dev/null +++ b/legacy/smartadmin/webfonts/smartadmin/sa-icons.css @@ -0,0 +1,3 @@ +/*! + * WebApp Icons + */@font-face{font-family:smartadmin-icons;src:url(fonts/smartadmin-icons.eot);src:url(fonts/smartadmin-iconsd41d.eot?#iefix) format("embedded-opentype"),url(fonts/smartadmin-icons.woff2) format("woff2"),url(fonts/smartadmin-icons.woff) format("woff"),url(fonts/smartadmin-icons.ttf) format("truetype"),url(fonts/smartadmin-icons.svg#nextgen-icons) format("svg");font-weight:400;font-style:normal}.sa,[class*=" sa-base-"],[class^=sa-base-],[data-icon]:before{font-family:smartadmin-icons;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.navbar-toggler .sa:before,.navbar-toggler [data-icon]:before{vertical-align:inherit!important}.sa-base-19:before{content:"\e09b"}.sa-base-18:before{content:"\e09c"}.sa-base-17:before{content:"\e09d"}.sa-base-16:before{content:"\e09e"}.sa-base-15:before{content:"\e09f"}.sa-base-14:before{content:"\e0a0"}.sa-base-13:before{content:"\e0a1"}.sa-base-12:before{content:"\f000"}.sa-base-11:before{content:"\f00b"}.sa-base-10:before{content:"\f00a"}.sa-base-9:before{content:"\f1c8"}.sa-base-8:before{content:"\f1e3"}.sa-base-7:before{content:"\f413"}.sa-base-6:before{content:"\f412"}.sa-base-5:before{content:"\f411"}.sa-base-4:before{content:"\f410"}.sa-base-3:before{content:"\f409"}.sa-base-2:before{content:"\f408"}.sa-base-1:before{content:"\f405"}.sa-profile:before{content:"\f407"}.sa-picframe:before{content:"\f406"}.sa-phone:before{content:"\f402"}.sa-calendar-fine:before{content:"\f403"}.sa-blog-read:before{content:"\f404"}.sa-my-apps:before{content:"\f328"}.sa-big-plus:before{content:"\f276"}.sa-minify-nav:before{content:"\f254"}.sa-lock-nav:before{content:"\f2ae"}.sa-chevron-down:before{content:"\f2f9"}.sa-chevron-up:before{content:"\f2fc"}.sa-chevron-left:before{content:"\f2fa"}.sa-chevron-right:before{content:"\f2fb"}.sa-menu:before{content:"\e000"}.sa-user-follow:before{content:"\e002"}.sa-user-following:before{content:"\e003"}.sa-user-unfollow:before{content:"\e004"}.sa-trophy:before{content:"\e006"}.sa-screen-smartphone:before{content:"\e010"}.sa-screen-desktop:before{content:"\e011"}.sa-plane:before{content:"\e012"}.sa-notebook:before{content:"\e013"}.sa-moustache:before{content:"\e014"}.sa-mouse:before{content:"\e015"}.sa-magnet:before{content:"\e016"}.sa-energy:before{content:"\e020"}.sa-emoticon-smile:before{content:"\e021"}.sa-disc:before{content:"\e022"}.sa-cursor-move:before{content:"\e023"}.sa-crop:before{content:"\e024"}.sa-credit-card:before{content:"\e025"}.sa-chemistry:before{content:"\e026"}.sa-user:before{content:"\e005"}.sa-speedometer:before{content:"\e007"}.sa-social-youtube:before{content:"\e008"}.sa-social-twitter:before{content:"\e009"}.sa-social-tumblr:before{content:"\e00a"}.sa-social-facebook:before{content:"\e00b"}.sa-social-dropbox:before{content:"\e00c"}.sa-social-dribbble:before{content:"\e00d"}.sa-shield:before{content:"\e00e"}.sa-screen-tablet:before{content:"\e00f"}.sa-magic-wand:before{content:"\e017"}.sa-hourglass:before{content:"\e018"}.sa-graduation:before{content:"\e019"}.sa-ghost:before{content:"\e01a"}.sa-game-controller:before{content:"\e01b"}.sa-fire:before{content:"\e01c"}.sa-eyeglasses:before{content:"\e01d"}.sa-envelope-open:before{content:"\e01e"}.sa-envelope-letter:before{content:"\e01f"}.sa-bell:before{content:"\e027"}.sa-badge:before{content:"\e028"}.sa-anchor:before{content:"\e029"}.sa-wallet:before{content:"\e02a"}.sa-vector:before{content:"\e02b"}.sa-speech:before{content:"\e02c"}.sa-puzzle:before{content:"\e02d"}.sa-printer:before{content:"\e02e"}.sa-present:before{content:"\e02f"}.sa-playlist:before{content:"\e030"}.sa-pin:before{content:"\e031"}.sa-picture:before{content:"\e032"}.sa-map:before{content:"\e033"}.sa-layers:before{content:"\e034"}.sa-handbag:before{content:"\e035"}.sa-globe-alt:before{content:"\e036"}.sa-globe:before{content:"\e037"}.sa-frame:before{content:"\e038"}.sa-folder-alt:before{content:"\e039"}.sa-film:before{content:"\e03a"}.sa-feed:before{content:"\e03b"}.sa-earphones-alt:before{content:"\e03c"}.sa-earphones:before{content:"\e03d"}.sa-drop:before{content:"\e03e"}.sa-drawer:before{content:"\e03f"}.sa-docs:before{content:"\e040"}.sa-directions:before{content:"\e041"}.sa-direction:before{content:"\e042"}.sa-diamond:before{content:"\e043"}.sa-cup:before{content:"\e044"}.sa-compass:before{content:"\e045"}.sa-call-out:before{content:"\e046"}.sa-call-in:before{content:"\e047"}.sa-call-end:before{content:"\e048"}.sa-calculator:before{content:"\e049"}.sa-bubbles:before{content:"\e04a"}.sa-briefcase:before{content:"\e04b"}.sa-book-open:before{content:"\e04c"}.sa-basket-loaded:before{content:"\e04d"}.sa-basket:before{content:"\e04e"}.sa-bag:before{content:"\e04f"}.sa-action-undo:before{content:"\e050"}.sa-action-redo:before{content:"\e051"}.sa-wrench:before{content:"\e052"}.sa-umbrella:before{content:"\e053"}.sa-trash:before{content:"\e054"}.sa-tag:before{content:"\e055"}.sa-support:before{content:"\e056"}.sa-size-fullscreen:before{content:"\e057"}.sa-size-actual:before{content:"\e058"}.sa-shuffle:before{content:"\e059"}.sa-share-alt:before{content:"\e05a"}.sa-share:before{content:"\e05b"}.sa-rocket:before{content:"\e05c"}.sa-question:before{content:"\e05d"}.sa-pie-chart:before{content:"\e05e"}.sa-pencil:before{content:"\e05f"}.sa-note:before{content:"\e060"}.sa-music-tone-alt:before{content:"\e061"}.sa-music-tone:before{content:"\e062"}.sa-microphone:before{content:"\e063"}.sa-loop:before{content:"\e064"}.sa-logout:before{content:"\e065"}.sa-login:before{content:"\e066"}.sa-list:before{content:"\e067"}.sa-like:before{content:"\e068"}.sa-home:before{content:"\e069"}.sa-grid:before{content:"\e06a"}.sa-graph:before{content:"\e06b"}.sa-equalizer:before{content:"\e06c"}.sa-dislike:before{content:"\e06d"}.sa-cursor:before{content:"\e06e"}.sa-control-start:before{content:"\e06f"}.sa-control-rewind:before{content:"\e070"}.sa-control-play:before{content:"\e071"}.sa-control-pause:before{content:"\e072"}.sa-control-forward:before{content:"\e073"}.sa-control-end:before{content:"\e074"}.sa-calendar:before{content:"\e075"}.sa-bulb:before{content:"\e076"}.sa-bar-chart:before{content:"\e077"}.sa-arrow-up:before{content:"\e078"}.sa-arrow-right:before{content:"\e079"}.sa-arrow-left:before{content:"\e07a"}.sa-arrow-down:before{content:"\e07b"}.sa-ban:before{content:"\e07c"}.sa-bubble:before{content:"\e07d"}.sa-camcorder:before{content:"\e07e"}.sa-camera:before{content:"\e07f"}.sa-check:before{content:"\e080"}.sa-clock:before{content:"\e081"}.sa-close:before{content:"\e082"}.sa-cloud-download:before{content:"\e083"}.sa-cloud-upload:before{content:"\e084"}.sa-doc:before{content:"\e085"}.sa-envelope:before{content:"\e086"}.sa-eye:before{content:"\e087"}.sa-flag:before{content:"\e088"}.sa-folder:before{content:"\e089"}.sa-heart:before{content:"\e08a"}.sa-info:before{content:"\e08b"}.sa-key:before{content:"\e08c"}.sa-link:before{content:"\e08d"}.sa-lock:before{content:"\e08e"}.sa-lock-open:before{content:"\e08f"}.sa-magnifier:before{content:"\e090"}.sa-magnifier-add:before{content:"\e091"}.sa-magnifier-remove:before{content:"\e092"}.sa-paper-clip:before{content:"\e093"}.sa-paper-plane:before{content:"\e094"}.sa-plus:before{content:"\e095"}.sa-pointer:before{content:"\e096"}.sa-power:before{content:"\e097"}.sa-refresh:before{content:"\e098"}.sa-reload:before{content:"\e099"}.sa-settings:before{content:"\e09a"}.sa-users:before{content:"\e001"} \ No newline at end of file diff --git a/legacy/smartadmin/{data}.html b/legacy/smartadmin/{data}.html new file mode 100644 index 0000000..7c8e2c8 --- /dev/null +++ b/legacy/smartadmin/{data}.html @@ -0,0 +1,9 @@ + + +404 Not Found + +

          Not Found

          +

          The requested URL was not found on this server.

          +
          +
          Apache/2.4.52 (Ubuntu) Server at getwebora.com Port 443
          + diff --git a/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminLoginForm.razor b/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminLoginForm.razor index c1f2624..51bef7c 100644 --- a/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminLoginForm.razor +++ b/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminLoginForm.razor @@ -1,47 +1,57 @@ +@using System.Text.Json @inject ILocalStorageService LocalStorageService -@inject IJSRuntime Js +@inject NavigationManager Navigation +@inject ISnackbar Snackbar +@inject HttpClient Http +@inject AuthenticationStateProvider AuthStateProvider @code { - private string rememberedUsername = ""; - private bool isRememberChecked = false; - private bool isReady; + private MudForm? form; + private string username = ""; + private string password = ""; + private bool rememberMe = false; + private bool isLoggingIn = false; private const string RememberedUsernameKey = "admin-remembered-username"; private const string RememberedCheckboxKey = "admin-remember-checkbox"; @@ -49,39 +59,83 @@ { try { - rememberedUsername = await LocalStorageService.GetItemAsStringAsync(RememberedUsernameKey) ?? ""; + username = await LocalStorageService.GetItemAsStringAsync(RememberedUsernameKey) ?? ""; var checkboxValue = await LocalStorageService.GetItemAsStringAsync(RememberedCheckboxKey) ?? "false"; - isRememberChecked = checkboxValue == "true" && !string.IsNullOrEmpty(rememberedUsername); + rememberMe = checkboxValue == "true" && !string.IsNullOrEmpty(username); } catch { - rememberedUsername = ""; - isRememberChecked = false; + username = ""; + rememberMe = false; } } - protected override async Task OnAfterRenderAsync(bool firstRender) + private async Task HandleLogin() { - if (firstRender) + if (form == null || isLoggingIn) return; + + await form.Validate(); + if (!form.IsValid) return; + + isLoggingIn = true; + try { - try + var response = await Http.PostAsJsonAsync("/api/auth/login", new { username, password }); + if (!response.IsSuccessStatusCode) { - await Js.InvokeVoidAsync("taxbaikAdminSession.syncRouteClass"); - await Js.InvokeVoidAsync("taxbaikAdminSession.bindLoginForm"); + Snackbar.Add("로그인 실패: 사용자명 또는 비밀번호가 올바르지 않습니다", Severity.Error); + return; } - catch + + var json = await response.Content.ReadAsStringAsync(); + var loginResponse = JsonSerializer.Deserialize(json); + if (loginResponse == null || string.IsNullOrEmpty(loginResponse.AccessToken)) { - // Login UI must remain visible even if JS binding fails. + Snackbar.Add("로그인 실패: 응답 오류", Severity.Error); + return; } - finally + + // 로컬 저장소 저장 + await LocalStorageService.SetItemAsStringAsync("accessToken", loginResponse.AccessToken); + await LocalStorageService.SetItemAsStringAsync("refreshToken", loginResponse.RefreshToken ?? ""); + var expiryTicks = DateTimeOffset.UtcNow.AddSeconds(loginResponse.ExpiresIn).UtcTicks; + await LocalStorageService.SetItemAsStringAsync("tokenExpiry", expiryTicks.ToString()); + + // 아이디 저장 + if (rememberMe) { - // Blazor owns this render from here on, so drive "disabled" from - // C# state rather than a raw DOM mutation - otherwise this hydration - // pass re-asserts the prerendered markup's static "disabled" and - // silently undoes whatever the early inline