(a(),u("div",qa,[v("div",{ref_key:"tablist",ref:r,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:b},[(a(!0),u(M,null,H(i(t),S=>(a(),u("button",{id:`tab-${S}-${i(L)}`,ref_for:!0,ref_key:"buttonRefs",ref:p,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===i(s),"aria-controls":`panel-${S}-${i(L)}`,tabindex:S===i(s)?0:-1,onClick:()=>i(d)(S)},w(S),9,Ja))),128))],544),c(_.$slots,"default")]))}}),Xa=["id","aria-labelledby"],Qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Wa();return(s,n)=>i(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${i(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${i(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Xa)):h("",!0)}}),Za=$(Qa,[["__scopeId","data-v-9b0d03d2"]]),xa=o=>{Ga(o),o.component("PluginTabs",Ya),o.component("PluginTabsTab",Za)},tr={extends:Se,Layout(){return nt(Se.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){xa(o)}};export{tr as R,go as c,V as u};
diff --git a/previews/PR111/assets/dbpvcgs.CczpOWO_.png b/previews/PR111/assets/dbpvcgs.CczpOWO_.png
new file mode 100644
index 00000000..340671bb
Binary files /dev/null and b/previews/PR111/assets/dbpvcgs.CczpOWO_.png differ
diff --git a/previews/PR111/assets/ecyiydl.d6nSPdty.png b/previews/PR111/assets/ecyiydl.d6nSPdty.png
new file mode 100644
index 00000000..040e97e1
Binary files /dev/null and b/previews/PR111/assets/ecyiydl.d6nSPdty.png differ
diff --git a/previews/PR111/assets/flzndon.4wR94hFF.png b/previews/PR111/assets/flzndon.4wR94hFF.png
new file mode 100644
index 00000000..dc87752d
Binary files /dev/null and b/previews/PR111/assets/flzndon.4wR94hFF.png differ
diff --git a/previews/PR111/assets/fpxgmvc.BNZYDzi0.png b/previews/PR111/assets/fpxgmvc.BNZYDzi0.png
new file mode 100644
index 00000000..a3e61228
Binary files /dev/null and b/previews/PR111/assets/fpxgmvc.BNZYDzi0.png differ
diff --git a/previews/PR111/assets/gailkex.GRz_H30p.png b/previews/PR111/assets/gailkex.GRz_H30p.png
new file mode 100644
index 00000000..ff30994f
Binary files /dev/null and b/previews/PR111/assets/gailkex.GRz_H30p.png differ
diff --git a/previews/PR111/assets/getting_started.md.BzsA164f.js b/previews/PR111/assets/getting_started.md.BzsA164f.js
new file mode 100644
index 00000000..3cb0d9e5
--- /dev/null
+++ b/previews/PR111/assets/getting_started.md.BzsA164f.js
@@ -0,0 +1,48 @@
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.CnUH-vym.js";const p="/Tyler.jl/previews/PR111/assets/ecyiydl.d6nSPdty.png",t="/Tyler.jl/previews/PR111/assets/ukjyteg.XqurVF-C.png",l="/Tyler.jl/previews/PR111/assets/cfhkdyl.BxVNfquj.jpeg",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started.md","filePath":"getting_started.md","lastUpdated":null}'),h={name:"getting_started.md"};function k(r,s,d,o,E,g){return e(),a("div",null,s[0]||(s[0]=[n(`Tyler.jl A package for downloading map tiles on demand from different data source providers.
This package is currently in the initial phase of development. It needs support. Sponsorships are welcome!
Installation In the Julia REPL type:
The ]
character starts the Julia package manager . Hit backspace key to return to Julia prompt.
Or, explicitly use Pkg
julia using Pkg
+Pkg . add ([ "Tyler.jl" ])
Demo: London julia using Tyler, GLMakie
+m = Tyler . Map ( Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 ))
INFO
A Rect2f
definition takes as input the origin, first two entries, and the width and hight, last two numbers.
Tile provider We can use a different tile provider as well as any style theme
from Makie as follows:
julia using GLMakie, Tyler
+using Tyler . TileProviders
+
+provider = TileProviders . OpenStreetMap ( :Mapnik )
+london = Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 )
+
+with_theme ( theme_dark ()) do
+ m = Tyler . Map (london; provider)
+ hidedecorations! (m . axis)
+ hidespines! (m . axis)
+ m
+end
Providers list More providers are available. See the following list:
julia providers = TileProviders . list_providers ()
Dict{Function, Vector{Symbol}} with 40 entries:
+ OpenAIP => []
+ WaymarkedTrails => [:hiking, :cycling, :mtb, :slopes, :riding, :skating]
+ NASAGIBSTimeseries => [:Agricultural_Lands_Croplands_2000, :Agricultural_Land…
+ Esri => [:WorldStreetMap, :DeLorme, :WorldTopoMap, :WorldImager…
+ OPNVKarte => []
+ BasemapAT => [:basemap, :grau, :overlay, :terrain, :surface, :highdp…
+ OpenTopoMap => []
+ FreeMapSK => []
+ OpenFireMap => []
+ OpenWeatherMap => [:Clouds, :CloudsClassic, :Precipitation, :Precipitatio…
+ CyclOSM => []
+ OpenSeaMap => []
+ NLS => [:osgb63k1885, :osgb1888, :osgb10k1888, :osgb1919, :osg…
+ OpenSnowMap => [:pistes]
+ AzureMaps => [:MicrosoftImagery, :MicrosoftBaseDarkGrey, :MicrosoftB…
+ TopPlusOpen => [:Color, :Grey]
+ MtbMap => []
+ OpenStreetMap => [:Mapnik, :DE, :CH, :France, :HOT, :BZH]
+ NASAGIBS => [:ModisTerraTrueColorCR, :ModisTerraBands367CR, :ViirsE…
+ ⋮ => ⋮
INFO
For some providers additional configuration steps are necessary, look at the TileProviders.jl
documentation for more information.
Although, the figure size can be controlled by passing additional arguments to Map
, it's better to define a Figure first and then continue with a normal Makie's figure creation workflow, namely
julia using GLMakie, Tyler
+using Tyler . TileProviders
+
+provider = TileProviders . OpenTopoMap ()
+london = Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 )
+
+with_theme ( theme_dark ()) do
+ fig = Figure (; size = ( 1200 , 600 ))
+ ax = Axis (fig[ 1 , 1 ]) # aspect = DataAspect()
+ m = Tyler . Map (london; provider, figure = fig, axis = ax)
+ wait (m)
+ hidedecorations! (ax)
+ hidespines! (ax)
+ fig
+end
Next, we could add any other plot type on top of the ax
axis defined above.
',27)]))}const F=i(h,[["render",k]]);export{y as __pageData,F as default};
diff --git a/previews/PR111/assets/getting_started.md.BzsA164f.lean.js b/previews/PR111/assets/getting_started.md.BzsA164f.lean.js
new file mode 100644
index 00000000..3cb0d9e5
--- /dev/null
+++ b/previews/PR111/assets/getting_started.md.BzsA164f.lean.js
@@ -0,0 +1,48 @@
+import{_ as i,c as a,a5 as n,o as e}from"./chunks/framework.CnUH-vym.js";const p="/Tyler.jl/previews/PR111/assets/ecyiydl.d6nSPdty.png",t="/Tyler.jl/previews/PR111/assets/ukjyteg.XqurVF-C.png",l="/Tyler.jl/previews/PR111/assets/cfhkdyl.BxVNfquj.jpeg",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started.md","filePath":"getting_started.md","lastUpdated":null}'),h={name:"getting_started.md"};function k(r,s,d,o,E,g){return e(),a("div",null,s[0]||(s[0]=[n(`Tyler.jl A package for downloading map tiles on demand from different data source providers.
This package is currently in the initial phase of development. It needs support. Sponsorships are welcome!
Installation In the Julia REPL type:
The ]
character starts the Julia package manager . Hit backspace key to return to Julia prompt.
Or, explicitly use Pkg
julia using Pkg
+Pkg . add ([ "Tyler.jl" ])
Demo: London julia using Tyler, GLMakie
+m = Tyler . Map ( Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 ))
INFO
A Rect2f
definition takes as input the origin, first two entries, and the width and hight, last two numbers.
Tile provider We can use a different tile provider as well as any style theme
from Makie as follows:
julia using GLMakie, Tyler
+using Tyler . TileProviders
+
+provider = TileProviders . OpenStreetMap ( :Mapnik )
+london = Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 )
+
+with_theme ( theme_dark ()) do
+ m = Tyler . Map (london; provider)
+ hidedecorations! (m . axis)
+ hidespines! (m . axis)
+ m
+end
Providers list More providers are available. See the following list:
julia providers = TileProviders . list_providers ()
Dict{Function, Vector{Symbol}} with 40 entries:
+ OpenAIP => []
+ WaymarkedTrails => [:hiking, :cycling, :mtb, :slopes, :riding, :skating]
+ NASAGIBSTimeseries => [:Agricultural_Lands_Croplands_2000, :Agricultural_Land…
+ Esri => [:WorldStreetMap, :DeLorme, :WorldTopoMap, :WorldImager…
+ OPNVKarte => []
+ BasemapAT => [:basemap, :grau, :overlay, :terrain, :surface, :highdp…
+ OpenTopoMap => []
+ FreeMapSK => []
+ OpenFireMap => []
+ OpenWeatherMap => [:Clouds, :CloudsClassic, :Precipitation, :Precipitatio…
+ CyclOSM => []
+ OpenSeaMap => []
+ NLS => [:osgb63k1885, :osgb1888, :osgb10k1888, :osgb1919, :osg…
+ OpenSnowMap => [:pistes]
+ AzureMaps => [:MicrosoftImagery, :MicrosoftBaseDarkGrey, :MicrosoftB…
+ TopPlusOpen => [:Color, :Grey]
+ MtbMap => []
+ OpenStreetMap => [:Mapnik, :DE, :CH, :France, :HOT, :BZH]
+ NASAGIBS => [:ModisTerraTrueColorCR, :ModisTerraBands367CR, :ViirsE…
+ ⋮ => ⋮
INFO
For some providers additional configuration steps are necessary, look at the TileProviders.jl
documentation for more information.
Although, the figure size can be controlled by passing additional arguments to Map
, it's better to define a Figure first and then continue with a normal Makie's figure creation workflow, namely
julia using GLMakie, Tyler
+using Tyler . TileProviders
+
+provider = TileProviders . OpenTopoMap ()
+london = Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 )
+
+with_theme ( theme_dark ()) do
+ fig = Figure (; size = ( 1200 , 600 ))
+ ax = Axis (fig[ 1 , 1 ]) # aspect = DataAspect()
+ m = Tyler . Map (london; provider, figure = fig, axis = ax)
+ wait (m)
+ hidedecorations! (ax)
+ hidespines! (ax)
+ fig
+end
Next, we could add any other plot type on top of the ax
axis defined above.
',27)]))}const F=i(h,[["render",k]]);export{y as __pageData,F as default};
diff --git a/previews/PR111/assets/iceloss_ex.md.Cfn4zoy5.js b/previews/PR111/assets/iceloss_ex.md.Cfn4zoy5.js
new file mode 100644
index 00000000..a4346ae7
--- /dev/null
+++ b/previews/PR111/assets/iceloss_ex.md.Cfn4zoy5.js
@@ -0,0 +1,46 @@
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.CnUH-vym.js";const k="/Tyler.jl/previews/PR111/assets/omgnmij.d7P5S1c4.png",l="/Tyler.jl/previews/PR111/assets/fpxgmvc.BNZYDzi0.png",p="/Tyler.jl/previews/PR111/assets/bkburzv.B8ikbtBl.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"iceloss_ex.md","filePath":"iceloss_ex.md","lastUpdated":null}'),t={name:"iceloss_ex.md"};function e(E,s,r,d,g,y){return n(),a("div",null,s[0]||(s[0]=[h(`Greenland ice loss example: animated & interactive julia using Tyler
+using Tyler . TileProviders
+using Tyler . Extents
+using Dates
+using HTTP
+using Arrow
+using DataFrames
+using GLMakie
+using GLMakie . Colors
+GLMakie . activate! ()
INFO
Ice loss from the Greenland Ice Sheet: 1972-2022.
Contact person: Alex Gardner & Chad Greene Load ice loss data [courtesy of Chad Greene @ JPL]
julia url = "https://github.com/JuliaGeo/JuliaGeoData/blob/365a09596bfca59e0977c20c2c2f566c0b29dbaa/assets/data/iceloss_subset.arrow?raw=true" ;
+resp = HTTP . get (url);
+df = DataFrame (Arrow . Table (resp . body));
+first (df, 5 )
select map provider
julia provider = TileProviders . Esri ( :WorldImagery );
Greenland extent
julia extent = Extent (X = ( - 54. , - 48. ), Y = ( 68.8 , 72.5 ));
Extent(X = (-54.0, -48.0), Y = (68.8, 72.5))
extract data
julia cnt = [ length (foo) for foo in df . X];
+X = reduce (vcat,df . X);
+Y = reduce (vcat,df . Y);
+Z = [ repeat ([i],c) for (i, c) = enumerate (cnt)];
+Z = reduce (vcat,Z);
make a colormap
julia nc = length (Makie . to_colormap ( :thermal ));
+n = nrow (df);
+alpha = zeros (nc);
+alpha[ 1 : maximum ([ 1 , round (Int64, 1 * nc / n)])] = alpha[ 1 : maximum ([ 1 , round (Int64, 1 * nc / n)])] .* ( 1.05 ^- 1.5 );
+alpha[ maximum ([ 1 , round (Int64, 1 * nc / n)])] = 1 ;
+cmap = Colors . alphacolor .(Makie . to_colormap ( :thermal ), alpha);
+cmap = Observable (cmap);
show map
julia fig = Figure (; size = ( 1200 , 600 ))
+ax = Axis (fig[ 1 , 1 ])
+m = Tyler . Map (extent; provider, figure = fig, axis = ax)
create initial scatter plot
julia scatter! (ax, X, Y; color = Z, colormap = cmap, colorrange = [ 0 , n], markersize = 10 );
+m
add colorbar
julia a,b = extrema (df . Date);
+a = year (a);
+b = year (b);
+Colorbar (fig[ 1 , 2 ]; colormap = cmap, colorrange = [a,b],
+ height = Relative ( 0.5 ), width = 15 )
+# hide ticks, grid and lables
+hidedecorations! (ax);
+# hide frames
+hidespines! (ax);
+m
loop to create animation
julia for k = 1 : 15
+ # reset apha
+ alpha[:] = zeros (nc);
+ cmap[] = Colors . alphacolor .(cmap[], alpha)
+ for i in 2 : 1 : n
+ # modify alpha
+ alpha[ 1 : maximum ([ 1 , round (Int64,i * nc / n)])] = alpha[ 1 : maximum ([ 1 , round (Int64,i * nc / n)])] .* ( 1.05 ^- 1.5 );
+ alpha[ maximum ([ 1 , round (Int64,i * nc / n)])] = 1 ;
+ cmap[] = Colors . alphacolor .(cmap[], alpha);
+ sleep ( 0.001 );
+ end
+end
`,26)]))}const o=i(t,[["render",e]]);export{c as __pageData,o as default};
diff --git a/previews/PR111/assets/iceloss_ex.md.Cfn4zoy5.lean.js b/previews/PR111/assets/iceloss_ex.md.Cfn4zoy5.lean.js
new file mode 100644
index 00000000..a4346ae7
--- /dev/null
+++ b/previews/PR111/assets/iceloss_ex.md.Cfn4zoy5.lean.js
@@ -0,0 +1,46 @@
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.CnUH-vym.js";const k="/Tyler.jl/previews/PR111/assets/omgnmij.d7P5S1c4.png",l="/Tyler.jl/previews/PR111/assets/fpxgmvc.BNZYDzi0.png",p="/Tyler.jl/previews/PR111/assets/bkburzv.B8ikbtBl.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"iceloss_ex.md","filePath":"iceloss_ex.md","lastUpdated":null}'),t={name:"iceloss_ex.md"};function e(E,s,r,d,g,y){return n(),a("div",null,s[0]||(s[0]=[h(`Greenland ice loss example: animated & interactive julia using Tyler
+using Tyler . TileProviders
+using Tyler . Extents
+using Dates
+using HTTP
+using Arrow
+using DataFrames
+using GLMakie
+using GLMakie . Colors
+GLMakie . activate! ()
INFO
Ice loss from the Greenland Ice Sheet: 1972-2022.
Contact person: Alex Gardner & Chad Greene Load ice loss data [courtesy of Chad Greene @ JPL]
julia url = "https://github.com/JuliaGeo/JuliaGeoData/blob/365a09596bfca59e0977c20c2c2f566c0b29dbaa/assets/data/iceloss_subset.arrow?raw=true" ;
+resp = HTTP . get (url);
+df = DataFrame (Arrow . Table (resp . body));
+first (df, 5 )
select map provider
julia provider = TileProviders . Esri ( :WorldImagery );
Greenland extent
julia extent = Extent (X = ( - 54. , - 48. ), Y = ( 68.8 , 72.5 ));
Extent(X = (-54.0, -48.0), Y = (68.8, 72.5))
extract data
julia cnt = [ length (foo) for foo in df . X];
+X = reduce (vcat,df . X);
+Y = reduce (vcat,df . Y);
+Z = [ repeat ([i],c) for (i, c) = enumerate (cnt)];
+Z = reduce (vcat,Z);
make a colormap
julia nc = length (Makie . to_colormap ( :thermal ));
+n = nrow (df);
+alpha = zeros (nc);
+alpha[ 1 : maximum ([ 1 , round (Int64, 1 * nc / n)])] = alpha[ 1 : maximum ([ 1 , round (Int64, 1 * nc / n)])] .* ( 1.05 ^- 1.5 );
+alpha[ maximum ([ 1 , round (Int64, 1 * nc / n)])] = 1 ;
+cmap = Colors . alphacolor .(Makie . to_colormap ( :thermal ), alpha);
+cmap = Observable (cmap);
show map
julia fig = Figure (; size = ( 1200 , 600 ))
+ax = Axis (fig[ 1 , 1 ])
+m = Tyler . Map (extent; provider, figure = fig, axis = ax)
create initial scatter plot
julia scatter! (ax, X, Y; color = Z, colormap = cmap, colorrange = [ 0 , n], markersize = 10 );
+m
add colorbar
julia a,b = extrema (df . Date);
+a = year (a);
+b = year (b);
+Colorbar (fig[ 1 , 2 ]; colormap = cmap, colorrange = [a,b],
+ height = Relative ( 0.5 ), width = 15 )
+# hide ticks, grid and lables
+hidedecorations! (ax);
+# hide frames
+hidespines! (ax);
+m
loop to create animation
julia for k = 1 : 15
+ # reset apha
+ alpha[:] = zeros (nc);
+ cmap[] = Colors . alphacolor .(cmap[], alpha)
+ for i in 2 : 1 : n
+ # modify alpha
+ alpha[ 1 : maximum ([ 1 , round (Int64,i * nc / n)])] = alpha[ 1 : maximum ([ 1 , round (Int64,i * nc / n)])] .* ( 1.05 ^- 1.5 );
+ alpha[ maximum ([ 1 , round (Int64,i * nc / n)])] = 1 ;
+ cmap[] = Colors . alphacolor .(cmap[], alpha);
+ sleep ( 0.001 );
+ end
+end
`,26)]))}const o=i(t,[["render",e]]);export{c as __pageData,o as default};
diff --git a/previews/PR111/assets/index.md.BXBSKqxG.js b/previews/PR111/assets/index.md.BXBSKqxG.js
new file mode 100644
index 00000000..f8ae1af8
--- /dev/null
+++ b/previews/PR111/assets/index.md.BXBSKqxG.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as a}from"./chunks/framework.CnUH-vym.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Tyler.jl","text":"Maps","tagline":"Download Map Tiles on Demand","image":{"src":"/logo.png","alt":"Tyler"},"actions":[{"theme":"brand","text":"Getting Started","link":"/getting_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/MakieOrg/Tyler.jl"},{"theme":"brand","text":"Become a Sponsor","link":"https://makie.org/support/"}]},"features":[{"title":"TileProviders","details":"A large collection of tile providers."},{"title":"Makie integration","details":"Well integrated with the Makie ecosystem."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),i={name:"index.md"};function n(o,r,l,s,d,c){return a(),t("div")}const h=e(i,[["render",n]]);export{m as __pageData,h as default};
diff --git a/previews/PR111/assets/index.md.BXBSKqxG.lean.js b/previews/PR111/assets/index.md.BXBSKqxG.lean.js
new file mode 100644
index 00000000..f8ae1af8
--- /dev/null
+++ b/previews/PR111/assets/index.md.BXBSKqxG.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as t,o as a}from"./chunks/framework.CnUH-vym.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Tyler.jl","text":"Maps","tagline":"Download Map Tiles on Demand","image":{"src":"/logo.png","alt":"Tyler"},"actions":[{"theme":"brand","text":"Getting Started","link":"/getting_started"},{"theme":"alt","text":"View on Github","link":"https://github.com/MakieOrg/Tyler.jl"},{"theme":"brand","text":"Become a Sponsor","link":"https://makie.org/support/"}]},"features":[{"title":"TileProviders","details":"A large collection of tile providers."},{"title":"Makie integration","details":"Well integrated with the Makie ecosystem."}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),i={name:"index.md"};function n(o,r,l,s,d,c){return a(),t("div")}const h=e(i,[["render",n]]);export{m as __pageData,h as default};
diff --git a/previews/PR111/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/previews/PR111/assets/inter-italic-cyrillic-ext.r48I6akx.woff2
new file mode 100644
index 00000000..b6b603d5
Binary files /dev/null and b/previews/PR111/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ
diff --git a/previews/PR111/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/previews/PR111/assets/inter-italic-cyrillic.By2_1cv3.woff2
new file mode 100644
index 00000000..def40a4f
Binary files /dev/null and b/previews/PR111/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ
diff --git a/previews/PR111/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/previews/PR111/assets/inter-italic-greek-ext.1u6EdAuj.woff2
new file mode 100644
index 00000000..e070c3d3
Binary files /dev/null and b/previews/PR111/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ
diff --git a/previews/PR111/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/previews/PR111/assets/inter-italic-greek.DJ8dCoTZ.woff2
new file mode 100644
index 00000000..a3c16ca4
Binary files /dev/null and b/previews/PR111/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ
diff --git a/previews/PR111/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/previews/PR111/assets/inter-italic-latin-ext.CN1xVJS-.woff2
new file mode 100644
index 00000000..2210a899
Binary files /dev/null and b/previews/PR111/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ
diff --git a/previews/PR111/assets/inter-italic-latin.C2AdPX0b.woff2 b/previews/PR111/assets/inter-italic-latin.C2AdPX0b.woff2
new file mode 100644
index 00000000..790d62dc
Binary files /dev/null and b/previews/PR111/assets/inter-italic-latin.C2AdPX0b.woff2 differ
diff --git a/previews/PR111/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/previews/PR111/assets/inter-italic-vietnamese.BSbpV94h.woff2
new file mode 100644
index 00000000..1eec0775
Binary files /dev/null and b/previews/PR111/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/previews/PR111/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2
new file mode 100644
index 00000000..2cfe6153
Binary files /dev/null and b/previews/PR111/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/previews/PR111/assets/inter-roman-cyrillic.C5lxZ8CY.woff2
new file mode 100644
index 00000000..e3886dd1
Binary files /dev/null and b/previews/PR111/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/previews/PR111/assets/inter-roman-greek-ext.CqjqNYQ-.woff2
new file mode 100644
index 00000000..36d67487
Binary files /dev/null and b/previews/PR111/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-greek.BBVDIX6e.woff2 b/previews/PR111/assets/inter-roman-greek.BBVDIX6e.woff2
new file mode 100644
index 00000000..2bed1e85
Binary files /dev/null and b/previews/PR111/assets/inter-roman-greek.BBVDIX6e.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/previews/PR111/assets/inter-roman-latin-ext.4ZJIpNVo.woff2
new file mode 100644
index 00000000..9a8d1e2b
Binary files /dev/null and b/previews/PR111/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-latin.Di8DUHzh.woff2 b/previews/PR111/assets/inter-roman-latin.Di8DUHzh.woff2
new file mode 100644
index 00000000..07d3c53a
Binary files /dev/null and b/previews/PR111/assets/inter-roman-latin.Di8DUHzh.woff2 differ
diff --git a/previews/PR111/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/previews/PR111/assets/inter-roman-vietnamese.BjW4sHH5.woff2
new file mode 100644
index 00000000..57bdc22a
Binary files /dev/null and b/previews/PR111/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ
diff --git a/previews/PR111/assets/interpolation.md.Bb1axPxP.js b/previews/PR111/assets/interpolation.md.Bb1axPxP.js
new file mode 100644
index 00000000..ebcec3c0
--- /dev/null
+++ b/previews/PR111/assets/interpolation.md.Bb1axPxP.js
@@ -0,0 +1,25 @@
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.CnUH-vym.js";const k="/Tyler.jl/previews/PR111/assets/zjgwwcz.BJUw9D1D.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"interpolation.md","filePath":"interpolation.md","lastUpdated":null}'),l={name:"interpolation.md"};function t(p,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`Using Interpolation On The Fly julia using Tyler, GLMakie
+using Interpolations : interpolate, Gridded, Linear
+
+f (lon,lat) = cosd ( 16 * lon) + sind ( 16 * lat)
+
+f_in_0_1_range (lon,lat) = 0.5 + 0.25 * f (lon,lat)
+
+nodes = ( - 180.0 : 180.0 , - 90.0 : 90.0 )
+
+array = [ f (lon,lat) for lon in nodes[ 1 ], lat in nodes[ 2 ]]
+array = (array .- minimum (array)) ./ ( maximum (array) - minimum (array))
+
+itp = interpolate (nodes, array, Gridded ( Linear ()))
+cols = Makie . to_colormap ( :viridis )
+
+col (i) = RGBAf (Makie . interpolated_getindex (cols,i))
+fun (x,y) = col ( itp (x,y))
+
+options = Dict ( :min_zoom => 1 , :max_zoom => 19 )
+
+p1 = Tyler . Interpolator (f_in_0_1_range; options)
+p2 = Tyler . Interpolator (fun; options)
+
+b = Rect2f ( - 20.0 , - 20.0 , 40.0 , 40.0 )
+m = Tyler . Map (b, provider = p1)
TIP
Try b = Rect2f(-180.0, -89.9, 360.0, 179.8)
INFO
interpolated_getindex
requires input i
to be in the 0-1
range.
',6)]))}const F=i(l,[["render",t]]);export{y as __pageData,F as default};
diff --git a/previews/PR111/assets/interpolation.md.Bb1axPxP.lean.js b/previews/PR111/assets/interpolation.md.Bb1axPxP.lean.js
new file mode 100644
index 00000000..ebcec3c0
--- /dev/null
+++ b/previews/PR111/assets/interpolation.md.Bb1axPxP.lean.js
@@ -0,0 +1,25 @@
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.CnUH-vym.js";const k="/Tyler.jl/previews/PR111/assets/zjgwwcz.BJUw9D1D.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"interpolation.md","filePath":"interpolation.md","lastUpdated":null}'),l={name:"interpolation.md"};function t(p,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`Using Interpolation On The Fly julia using Tyler, GLMakie
+using Interpolations : interpolate, Gridded, Linear
+
+f (lon,lat) = cosd ( 16 * lon) + sind ( 16 * lat)
+
+f_in_0_1_range (lon,lat) = 0.5 + 0.25 * f (lon,lat)
+
+nodes = ( - 180.0 : 180.0 , - 90.0 : 90.0 )
+
+array = [ f (lon,lat) for lon in nodes[ 1 ], lat in nodes[ 2 ]]
+array = (array .- minimum (array)) ./ ( maximum (array) - minimum (array))
+
+itp = interpolate (nodes, array, Gridded ( Linear ()))
+cols = Makie . to_colormap ( :viridis )
+
+col (i) = RGBAf (Makie . interpolated_getindex (cols,i))
+fun (x,y) = col ( itp (x,y))
+
+options = Dict ( :min_zoom => 1 , :max_zoom => 19 )
+
+p1 = Tyler . Interpolator (f_in_0_1_range; options)
+p2 = Tyler . Interpolator (fun; options)
+
+b = Rect2f ( - 20.0 , - 20.0 , 40.0 , 40.0 )
+m = Tyler . Map (b, provider = p1)
TIP
Try b = Rect2f(-180.0, -89.9, 360.0, 179.8)
INFO
interpolated_getindex
requires input i
to be in the 0-1
range.
',6)]))}const F=i(l,[["render",t]]);export{y as __pageData,F as default};
diff --git a/previews/PR111/assets/jtqezep.DTp9PEt0.png b/previews/PR111/assets/jtqezep.DTp9PEt0.png
new file mode 100644
index 00000000..02aa759e
Binary files /dev/null and b/previews/PR111/assets/jtqezep.DTp9PEt0.png differ
diff --git a/previews/PR111/assets/map-3d.md.BJWlq00L.js b/previews/PR111/assets/map-3d.md.BJWlq00L.js
new file mode 100644
index 00000000..603dd899
--- /dev/null
+++ b/previews/PR111/assets/map-3d.md.BJWlq00L.js
@@ -0,0 +1,76 @@
+import{_ as i,c as a,a5 as h,o as k}from"./chunks/framework.CnUH-vym.js";const n="/Tyler.jl/previews/PR111/assets/dbpvcgs.CczpOWO_.png",l="/Tyler.jl/previews/PR111/assets/gailkex.GRz_H30p.png",t="/Tyler.jl/previews/PR111/assets/nypuldv.Gq36V23f.png",p="/Tyler.jl/previews/PR111/assets/jtqezep.DTp9PEt0.png",e="/Tyler.jl/previews/PR111/assets/alpine.CXfd9LFs.png",E="/Tyler.jl/previews/PR111/assets/pointclouds.CWR3APBN.png",D=JSON.parse('{"title":"Map3D","description":"","frontmatter":{},"headers":[],"relativePath":"map-3d.md","filePath":"map-3d.md","lastUpdated":null}'),r={name:"map-3d.md"};function d(g,s,y,F,o,C){return k(),a("div",null,s[0]||(s[0]=[h(`Map3D Tyler also offers to view tiles in 3D, and offers a simple Elevation and PointCloud provider.
julia using Tyler, GLMakie
+using Tyler : ElevationProvider
+
+lat, lon = ( 47.087441 , 13.377214 )
+delta = 0.3
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+m = Tyler . Map3D (ext; provider = ElevationProvider ())
Elevation with PlotConfig With PlotConfig one can change the way tiles are plotted. The it has a preprocess + postprocess function and allows to pass any plot attribute to the tile. These attributes are global and will be passed to every tile plot.
julia lat, lon = ( 47.087441 , 13.377214 )
+delta = 0.3
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+cfg = Tyler . PlotConfig (
+ preprocess = pc -> map (p -> p .* 2 , pc),
+ shading = FastShading, colorrange = ( 2000 , 5000 ),
+ colormap = :alpine
+)
+m = Tyler . Map3D (ext; provider = ElevationProvider ( nothing ), plot_config = cfg)
PointClouds The PointCloud provider downloads from geotiles.citg.tudelft , which spans most of the netherlands.
julia lat, lon = ( 52.40459835 , 4.84763329 )
+delta = 0.03
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+provider = Tyler . GeoTilePointCloudProvider ()
+m = Tyler . Map3D (ext; provider = provider)
Pointclouds with PlotConfig + Meshscatter There is also a MeshScatter plot config, which can be used to switch the point cloud plotting from scatter to meshscatter. This looks better, at a significant slow down.
julia lat, lon = ( 52.40459835 , 4.84763329 )
+delta = 0.008
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+provider = Tyler . GeoTilePointCloudProvider ()
+image = ElevationProvider ( nothing )
+cfg = Tyler . MeshScatterPlotconfig ()
+m1 = Tyler . Map3D (ext; provider = provider, plot_config = cfg)
+cfg = Tyler . PlotConfig (preprocess = pc -> map (p -> p .* 2 , pc), shading = FastShading, colormap = :alpine )
+m2 = Tyler . Map3D (m1; provider = image, plot_config = cfg)
+m1
Using RPRMakie julia using RPRMakie, FileIO
+function render_rpr (m, name, radiance = 1000000 )
+ wait (m)
+ ax = m . axis
+ cam = ax . scene . camera_controls
+ lightpos = Vec3f (cam . lookat[][ 1 ], cam . lookat[][ 2 ], cam . eyeposition[][ 3 ])
+ lights = [
+ EnvironmentLight ( 1.5 , load (RPR . assetpath ( "studio026.exr" ))),
+ PointLight (lightpos, RGBf (radiance, radiance * 0.9 , radiance * 0.9 ))
+ ]
+ empty! (ax . scene . lights)
+ append! (ax . scene . lights, lights)
+ save ( " $(name) .png" , ax . scene; plugin = RPR . Northstar, backend = RPRMakie, iterations = 2000 )
+end
+function plastic_material ()
+ return (type = :Uber , reflection_color = Vec4f ( 1 ),
+ reflection_weight = Vec4f ( 1 ), reflection_roughness = Vec4f ( 0.1 ),
+ reflection_anisotropy = Vec4f ( 0 ), reflection_anisotropy_rotation = Vec4f ( 0 ),
+ reflection_metalness = Vec4f ( 0 ), reflection_ior = Vec4f ( 1.4 ), refraction_weight = Vec4f ( 0 ),
+ coating_weight = Vec4f ( 0 ), sheen_weight = Vec4f ( 0 ), emission_weight = Vec3f ( 0 ),
+ transparency = Vec4f ( 0 ), reflection_mode = UInt (RPR . RPR_UBER_MATERIAL_IOR_MODE_PBR),
+ emission_mode = UInt (RPR . RPR_UBER_MATERIAL_EMISSION_MODE_SINGLESIDED),
+ coating_mode = UInt (RPR . RPR_UBER_MATERIAL_IOR_MODE_PBR), sss_multiscatter = true ,
+ refraction_thin_surface = true )
+end
Elevation with RPRMakie julia lat, lon = ( 47.087441 , 13.377214 )
+delta = 0.5
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+cfg = Tyler . PlotConfig (
+ preprocess = pc -> map (p -> p .* 2 , pc),
+ shading = FastShading,
+ material = plastic_material (),
+ colormap = :alpine
+)
+m = Tyler . Map3D (ext;
+ provider = ElevationProvider ( nothing ),
+ plot_config = cfg,
+ max_plots = 5
+)
+render_rpr (m, "alpine" , 10000000 )
PointClouds with RPRMakie julia lat, lon = ( 52.40459835229174 , 4.84763329882317 )
+delta = 0.005
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+provider = Tyler . GeoTilePointCloudProvider ()
+mat = (type = :Microfacet , roughness = 0.2 , ior = 1.390 )
+cfg = Tyler . MeshScatterPlotconfig (material = mat, markersize = 4 )
+m = Tyler . Map3D (ext; provider = provider, plot_config = cfg, max_plots = 3 , size = ( 2000 , 2000 ))
+cfg = Tyler . PlotConfig (material = mat, colormap = :Blues )
+m2 = Tyler . Map3D (m; provider = ElevationProvider ( nothing ), plot_config = cfg, max_plots = 5 )
+render_rpr (m, "pointclouds" )
+cp (Tyler)
',24)]))}const A=i(r,[["render",d]]);export{D as __pageData,A as default};
diff --git a/previews/PR111/assets/map-3d.md.BJWlq00L.lean.js b/previews/PR111/assets/map-3d.md.BJWlq00L.lean.js
new file mode 100644
index 00000000..603dd899
--- /dev/null
+++ b/previews/PR111/assets/map-3d.md.BJWlq00L.lean.js
@@ -0,0 +1,76 @@
+import{_ as i,c as a,a5 as h,o as k}from"./chunks/framework.CnUH-vym.js";const n="/Tyler.jl/previews/PR111/assets/dbpvcgs.CczpOWO_.png",l="/Tyler.jl/previews/PR111/assets/gailkex.GRz_H30p.png",t="/Tyler.jl/previews/PR111/assets/nypuldv.Gq36V23f.png",p="/Tyler.jl/previews/PR111/assets/jtqezep.DTp9PEt0.png",e="/Tyler.jl/previews/PR111/assets/alpine.CXfd9LFs.png",E="/Tyler.jl/previews/PR111/assets/pointclouds.CWR3APBN.png",D=JSON.parse('{"title":"Map3D","description":"","frontmatter":{},"headers":[],"relativePath":"map-3d.md","filePath":"map-3d.md","lastUpdated":null}'),r={name:"map-3d.md"};function d(g,s,y,F,o,C){return k(),a("div",null,s[0]||(s[0]=[h(`Map3D Tyler also offers to view tiles in 3D, and offers a simple Elevation and PointCloud provider.
julia using Tyler, GLMakie
+using Tyler : ElevationProvider
+
+lat, lon = ( 47.087441 , 13.377214 )
+delta = 0.3
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+m = Tyler . Map3D (ext; provider = ElevationProvider ())
Elevation with PlotConfig With PlotConfig one can change the way tiles are plotted. The it has a preprocess + postprocess function and allows to pass any plot attribute to the tile. These attributes are global and will be passed to every tile plot.
julia lat, lon = ( 47.087441 , 13.377214 )
+delta = 0.3
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+cfg = Tyler . PlotConfig (
+ preprocess = pc -> map (p -> p .* 2 , pc),
+ shading = FastShading, colorrange = ( 2000 , 5000 ),
+ colormap = :alpine
+)
+m = Tyler . Map3D (ext; provider = ElevationProvider ( nothing ), plot_config = cfg)
PointClouds The PointCloud provider downloads from geotiles.citg.tudelft , which spans most of the netherlands.
julia lat, lon = ( 52.40459835 , 4.84763329 )
+delta = 0.03
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+provider = Tyler . GeoTilePointCloudProvider ()
+m = Tyler . Map3D (ext; provider = provider)
Pointclouds with PlotConfig + Meshscatter There is also a MeshScatter plot config, which can be used to switch the point cloud plotting from scatter to meshscatter. This looks better, at a significant slow down.
julia lat, lon = ( 52.40459835 , 4.84763329 )
+delta = 0.008
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+provider = Tyler . GeoTilePointCloudProvider ()
+image = ElevationProvider ( nothing )
+cfg = Tyler . MeshScatterPlotconfig ()
+m1 = Tyler . Map3D (ext; provider = provider, plot_config = cfg)
+cfg = Tyler . PlotConfig (preprocess = pc -> map (p -> p .* 2 , pc), shading = FastShading, colormap = :alpine )
+m2 = Tyler . Map3D (m1; provider = image, plot_config = cfg)
+m1
Using RPRMakie julia using RPRMakie, FileIO
+function render_rpr (m, name, radiance = 1000000 )
+ wait (m)
+ ax = m . axis
+ cam = ax . scene . camera_controls
+ lightpos = Vec3f (cam . lookat[][ 1 ], cam . lookat[][ 2 ], cam . eyeposition[][ 3 ])
+ lights = [
+ EnvironmentLight ( 1.5 , load (RPR . assetpath ( "studio026.exr" ))),
+ PointLight (lightpos, RGBf (radiance, radiance * 0.9 , radiance * 0.9 ))
+ ]
+ empty! (ax . scene . lights)
+ append! (ax . scene . lights, lights)
+ save ( " $(name) .png" , ax . scene; plugin = RPR . Northstar, backend = RPRMakie, iterations = 2000 )
+end
+function plastic_material ()
+ return (type = :Uber , reflection_color = Vec4f ( 1 ),
+ reflection_weight = Vec4f ( 1 ), reflection_roughness = Vec4f ( 0.1 ),
+ reflection_anisotropy = Vec4f ( 0 ), reflection_anisotropy_rotation = Vec4f ( 0 ),
+ reflection_metalness = Vec4f ( 0 ), reflection_ior = Vec4f ( 1.4 ), refraction_weight = Vec4f ( 0 ),
+ coating_weight = Vec4f ( 0 ), sheen_weight = Vec4f ( 0 ), emission_weight = Vec3f ( 0 ),
+ transparency = Vec4f ( 0 ), reflection_mode = UInt (RPR . RPR_UBER_MATERIAL_IOR_MODE_PBR),
+ emission_mode = UInt (RPR . RPR_UBER_MATERIAL_EMISSION_MODE_SINGLESIDED),
+ coating_mode = UInt (RPR . RPR_UBER_MATERIAL_IOR_MODE_PBR), sss_multiscatter = true ,
+ refraction_thin_surface = true )
+end
Elevation with RPRMakie julia lat, lon = ( 47.087441 , 13.377214 )
+delta = 0.5
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+cfg = Tyler . PlotConfig (
+ preprocess = pc -> map (p -> p .* 2 , pc),
+ shading = FastShading,
+ material = plastic_material (),
+ colormap = :alpine
+)
+m = Tyler . Map3D (ext;
+ provider = ElevationProvider ( nothing ),
+ plot_config = cfg,
+ max_plots = 5
+)
+render_rpr (m, "alpine" , 10000000 )
PointClouds with RPRMakie julia lat, lon = ( 52.40459835229174 , 4.84763329882317 )
+delta = 0.005
+ext = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta)
+provider = Tyler . GeoTilePointCloudProvider ()
+mat = (type = :Microfacet , roughness = 0.2 , ior = 1.390 )
+cfg = Tyler . MeshScatterPlotconfig (material = mat, markersize = 4 )
+m = Tyler . Map3D (ext; provider = provider, plot_config = cfg, max_plots = 3 , size = ( 2000 , 2000 ))
+cfg = Tyler . PlotConfig (material = mat, colormap = :Blues )
+m2 = Tyler . Map3D (m; provider = ElevationProvider ( nothing ), plot_config = cfg, max_plots = 5 )
+render_rpr (m, "pointclouds" )
+cp (Tyler)
',24)]))}const A=i(r,[["render",d]]);export{D as __pageData,A as default};
diff --git a/previews/PR111/assets/mriwyrp.B1A_CUPt.png b/previews/PR111/assets/mriwyrp.B1A_CUPt.png
new file mode 100644
index 00000000..2346f79c
Binary files /dev/null and b/previews/PR111/assets/mriwyrp.B1A_CUPt.png differ
diff --git a/previews/PR111/assets/mywgbqm.BUSHWvNr.png b/previews/PR111/assets/mywgbqm.BUSHWvNr.png
new file mode 100644
index 00000000..481a5c98
Binary files /dev/null and b/previews/PR111/assets/mywgbqm.BUSHWvNr.png differ
diff --git a/previews/PR111/assets/nypuldv.Gq36V23f.png b/previews/PR111/assets/nypuldv.Gq36V23f.png
new file mode 100644
index 00000000..e5caec11
Binary files /dev/null and b/previews/PR111/assets/nypuldv.Gq36V23f.png differ
diff --git a/previews/PR111/assets/omgnmij.d7P5S1c4.png b/previews/PR111/assets/omgnmij.d7P5S1c4.png
new file mode 100644
index 00000000..f44d56e6
Binary files /dev/null and b/previews/PR111/assets/omgnmij.d7P5S1c4.png differ
diff --git a/previews/PR111/assets/ooxitic.CssOlB9z.png b/previews/PR111/assets/ooxitic.CssOlB9z.png
new file mode 100644
index 00000000..8e51921a
Binary files /dev/null and b/previews/PR111/assets/ooxitic.CssOlB9z.png differ
diff --git a/previews/PR111/assets/osmmakie.md.FALAiTes.js b/previews/PR111/assets/osmmakie.md.FALAiTes.js
new file mode 100644
index 00000000..d2d1f6ef
--- /dev/null
+++ b/previews/PR111/assets/osmmakie.md.FALAiTes.js
@@ -0,0 +1,36 @@
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.CnUH-vym.js";const k="/Tyler.jl/previews/PR111/assets/flzndon.4wR94hFF.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"osmmakie.md","filePath":"osmmakie.md","lastUpdated":null}'),l={name:"osmmakie.md"};function p(t,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`OpenStreetMap data (OSM) In this example, we combine OpenStreetMap data, loading some roads and buildings and plotting them on top of a Tyler map.
julia using Tyler, Tyler . TileProviders
+using GLMakie, OSMMakie, LightOSM
+
+area = (
+ minlat = 51.50 , minlon = - 0.0921 , # bottom left corner
+ maxlat = 51.52 , maxlon = - 0.0662 # top right corner
+)
+
+download_osm_network ( :bbox ; # rectangular area
+ area ... , # splat previously defined area boundaries
+ network_type = :drive , # download motorways
+ save_to_file_location = "london_drive.json"
+);
+
+osm = graph_from_file ( "london_drive.json" ;
+ graph_type = :light , # SimpleDiGraph
+ weight_type = :distance
+)
+
+download_osm_buildings ( :bbox ;
+ area ... ,
+ metadata = true ,
+ download_format = :osm ,
+ save_to_file_location = "london_buildings.osm"
+);
+
+# load as Buildings Dict
+buildings = buildings_from_file ( "london_buildings.osm" );
+# Google + OSM
+provider = TileProviders . Google ( :satelite )
+london = Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 )
+m = Tyler . Map (london; provider = provider, crs = Tyler . wgs84)
+m . axis . aspect = map_aspect (area . minlat, area . maxlat)
+p = osmplot! (m . axis, osm; buildings)
+# DataInspector(m.axis) # this is broken/slow
+m
',4)]))}const o=i(l,[["render",p]]);export{y as __pageData,o as default};
diff --git a/previews/PR111/assets/osmmakie.md.FALAiTes.lean.js b/previews/PR111/assets/osmmakie.md.FALAiTes.lean.js
new file mode 100644
index 00000000..d2d1f6ef
--- /dev/null
+++ b/previews/PR111/assets/osmmakie.md.FALAiTes.lean.js
@@ -0,0 +1,36 @@
+import{_ as i,c as a,a5 as n,o as h}from"./chunks/framework.CnUH-vym.js";const k="/Tyler.jl/previews/PR111/assets/flzndon.4wR94hFF.png",y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"osmmakie.md","filePath":"osmmakie.md","lastUpdated":null}'),l={name:"osmmakie.md"};function p(t,s,e,E,r,d){return h(),a("div",null,s[0]||(s[0]=[n(`OpenStreetMap data (OSM) In this example, we combine OpenStreetMap data, loading some roads and buildings and plotting them on top of a Tyler map.
julia using Tyler, Tyler . TileProviders
+using GLMakie, OSMMakie, LightOSM
+
+area = (
+ minlat = 51.50 , minlon = - 0.0921 , # bottom left corner
+ maxlat = 51.52 , maxlon = - 0.0662 # top right corner
+)
+
+download_osm_network ( :bbox ; # rectangular area
+ area ... , # splat previously defined area boundaries
+ network_type = :drive , # download motorways
+ save_to_file_location = "london_drive.json"
+);
+
+osm = graph_from_file ( "london_drive.json" ;
+ graph_type = :light , # SimpleDiGraph
+ weight_type = :distance
+)
+
+download_osm_buildings ( :bbox ;
+ area ... ,
+ metadata = true ,
+ download_format = :osm ,
+ save_to_file_location = "london_buildings.osm"
+);
+
+# load as Buildings Dict
+buildings = buildings_from_file ( "london_buildings.osm" );
+# Google + OSM
+provider = TileProviders . Google ( :satelite )
+london = Rect2f ( - 0.0921 , 51.5 , 0.04 , 0.025 )
+m = Tyler . Map (london; provider = provider, crs = Tyler . wgs84)
+m . axis . aspect = map_aspect (area . minlat, area . maxlat)
+p = osmplot! (m . axis, osm; buildings)
+# DataInspector(m.axis) # this is broken/slow
+m
',4)]))}const o=i(l,[["render",p]]);export{y as __pageData,o as default};
diff --git a/previews/PR111/assets/pointclouds.CWR3APBN.png b/previews/PR111/assets/pointclouds.CWR3APBN.png
new file mode 100644
index 00000000..d435249e
Binary files /dev/null and b/previews/PR111/assets/pointclouds.CWR3APBN.png differ
diff --git a/previews/PR111/assets/points_poly_text.md.bXzzx-R9.js b/previews/PR111/assets/points_poly_text.md.bXzzx-R9.js
new file mode 100644
index 00000000..ffd1b752
--- /dev/null
+++ b/previews/PR111/assets/points_poly_text.md.bXzzx-R9.js
@@ -0,0 +1,30 @@
+import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.CnUH-vym.js";const h="/Tyler.jl/previews/PR111/assets/mywgbqm.BUSHWvNr.png",p="/Tyler.jl/previews/PR111/assets/ooxitic.CssOlB9z.png",o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"points_poly_text.md","filePath":"points_poly_text.md","lastUpdated":null}'),l={name:"points_poly_text.md"};function k(e,s,E,d,r,g){return n(),a("div",null,s[0]||(s[0]=[t(`Add points, polygons and text to a map Load packages
julia using Tyler, GLMakie
+using Tyler . TileProviders
+using Tyler . MapTiles
+using Tyler . Extents
select a map provider
julia provider = TileProviders . Esri ( :WorldImagery )
TileProviders.Provider("https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}", Dict{Symbol, Any}(:url => "https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}", :attribution => "Tiles (C) Esri -- Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community", :variant => "World_Imagery", :name => "Esri.WorldImagery", :html_attribution => "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"))
define a point to plot on the map
julia # point location to add to map
+lat = 34.2013 ;
+lon = - 118.1714 ;
convert to point in web_mercator
julia pts = Point2f (MapTiles . project ((lon,lat), MapTiles . wgs84, MapTiles . web_mercator))
2-element GeometryBasics.Point{2, Float32} with indices SOneTo(2):
+ -1.315478f7
+ 4.0558638f6
set how much area to map in degrees and define an Extent
for display in web_mercator
julia delta = 1
+extent = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta);
GeometryBasics.HyperRectangle{2, Float32}(Float32[-118.6714, 33.7013], Float32[1.0, 1.0])
show map
julia m = Tyler . Map (extent; provider, size = ( 1000 , 600 ))
now plot a point, polygon and text on the map
julia objscatter = scatter! (m . axis, pts; color = :red ,
+ marker = '⭐' , markersize = 50 )
+# hide ticks, grid and lables
+hidedecorations! (m . axis)
+# hide frames
+hidespines! (m . axis)
+# Plot a plygon on the map
+p1 = (lon - delta / 8 , lat - delta / 8 )
+p2 = (lon - delta / 8 , lat + delta / 8 )
+p3 = (lon + delta / 8 , lat + delta / 8 )
+p4 = (lon + delta / 8 , lat - delta / 8 )
+
+polyg = MapTiles . project .([p1, p2, p3, p4], Ref (MapTiles . wgs84), Ref (MapTiles . web_mercator))
+polyg = Point2f .(polyg)
+poly! (polyg; color = :transparent , strokecolor = :black , strokewidth = 5 )
+
+# Add text
+pts2 = Point2f (MapTiles . project ((lon,lat - delta / 6 ), MapTiles . wgs84, MapTiles . web_mercator))
+text! (pts2, text = "Basic Example" ; fontsize = 30 ,
+ color = :darkblue , align = ( :center , :center )
+ )
+m
',21)]))}const c=i(l,[["render",k]]);export{o as __pageData,c as default};
diff --git a/previews/PR111/assets/points_poly_text.md.bXzzx-R9.lean.js b/previews/PR111/assets/points_poly_text.md.bXzzx-R9.lean.js
new file mode 100644
index 00000000..ffd1b752
--- /dev/null
+++ b/previews/PR111/assets/points_poly_text.md.bXzzx-R9.lean.js
@@ -0,0 +1,30 @@
+import{_ as i,c as a,a5 as t,o as n}from"./chunks/framework.CnUH-vym.js";const h="/Tyler.jl/previews/PR111/assets/mywgbqm.BUSHWvNr.png",p="/Tyler.jl/previews/PR111/assets/ooxitic.CssOlB9z.png",o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"points_poly_text.md","filePath":"points_poly_text.md","lastUpdated":null}'),l={name:"points_poly_text.md"};function k(e,s,E,d,r,g){return n(),a("div",null,s[0]||(s[0]=[t(`Add points, polygons and text to a map Load packages
julia using Tyler, GLMakie
+using Tyler . TileProviders
+using Tyler . MapTiles
+using Tyler . Extents
select a map provider
julia provider = TileProviders . Esri ( :WorldImagery )
TileProviders.Provider("https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}", Dict{Symbol, Any}(:url => "https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}", :attribution => "Tiles (C) Esri -- Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community", :variant => "World_Imagery", :name => "Esri.WorldImagery", :html_attribution => "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"))
define a point to plot on the map
julia # point location to add to map
+lat = 34.2013 ;
+lon = - 118.1714 ;
convert to point in web_mercator
julia pts = Point2f (MapTiles . project ((lon,lat), MapTiles . wgs84, MapTiles . web_mercator))
2-element GeometryBasics.Point{2, Float32} with indices SOneTo(2):
+ -1.315478f7
+ 4.0558638f6
set how much area to map in degrees and define an Extent
for display in web_mercator
julia delta = 1
+extent = Rect2f (lon - delta / 2 , lat - delta / 2 , delta, delta);
GeometryBasics.HyperRectangle{2, Float32}(Float32[-118.6714, 33.7013], Float32[1.0, 1.0])
show map
julia m = Tyler . Map (extent; provider, size = ( 1000 , 600 ))
now plot a point, polygon and text on the map
julia objscatter = scatter! (m . axis, pts; color = :red ,
+ marker = '⭐' , markersize = 50 )
+# hide ticks, grid and lables
+hidedecorations! (m . axis)
+# hide frames
+hidespines! (m . axis)
+# Plot a plygon on the map
+p1 = (lon - delta / 8 , lat - delta / 8 )
+p2 = (lon - delta / 8 , lat + delta / 8 )
+p3 = (lon + delta / 8 , lat + delta / 8 )
+p4 = (lon + delta / 8 , lat - delta / 8 )
+
+polyg = MapTiles . project .([p1, p2, p3, p4], Ref (MapTiles . wgs84), Ref (MapTiles . web_mercator))
+polyg = Point2f .(polyg)
+poly! (polyg; color = :transparent , strokecolor = :black , strokewidth = 5 )
+
+# Add text
+pts2 = Point2f (MapTiles . project ((lon,lat - delta / 6 ), MapTiles . wgs84, MapTiles . web_mercator))
+text! (pts2, text = "Basic Example" ; fontsize = 30 ,
+ color = :darkblue , align = ( :center , :center )
+ )
+m
',21)]))}const c=i(l,[["render",k]]);export{o as __pageData,c as default};
diff --git a/previews/PR111/assets/style.CmCD8HRW.css b/previews/PR111/assets/style.CmCD8HRW.css
new file mode 100644
index 00000000..12cb668e
--- /dev/null
+++ b/previews/PR111/assets/style.CmCD8HRW.css
@@ -0,0 +1 @@
+@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Tyler.jl/previews/PR111/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-906d7fb4]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-906d7fb4]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-906d7fb4]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-906d7fb4]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-906d7fb4]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-906d7fb4]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-906d7fb4]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-906d7fb4]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-906d7fb4]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-906d7fb4]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-906d7fb4]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-906d7fb4]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-906d7fb4]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-acbfed09]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-acbfed09]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-acbfed09]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-acbfed09]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-04f5c5e9]{position:relative}.VPFlyout[data-v-04f5c5e9]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-04f5c5e9]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-04f5c5e9]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-04f5c5e9]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-04f5c5e9]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-04f5c5e9]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-04f5c5e9],.button[aria-expanded=true]+.menu[data-v-04f5c5e9]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-04f5c5e9]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-04f5c5e9]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-04f5c5e9]{margin-right:0;font-size:16px}.text-icon[data-v-04f5c5e9]{margin-left:4px;font-size:14px}.icon[data-v-04f5c5e9]{font-size:20px;transition:fill .25s}.menu[data-v-04f5c5e9]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-d26d30cb]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-d26d30cb]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-d26d30cb]>svg,.VPSocialLink[data-v-d26d30cb]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-956ec74c]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-956ec74c],.VPNavBarMenuLink[data-v-956ec74c]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.8.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-0f4f798b]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-0f4f798b]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-0f4f798b]{border-bottom-color:var(--vp-c-divider)}}[data-v-0f4f798b] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-735512b8]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-735512b8]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-372ae7c0]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-372ae7c0]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-875057a5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-875057a5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-875057a5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-875057a5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-875057a5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-875057a5]{transform:rotate(45deg)}.button[data-v-875057a5]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-875057a5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-875057a5]{transition:transform .25s}.group[data-v-875057a5]:first-child{padding-top:0}.group+.group[data-v-875057a5],.group+.item[data-v-875057a5]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--c-yellow-1: #ffd859;--c-yellow-2: #f7d336;--c-yellow-3: #dec96e;--c-yellow-soft-1: #ecb732;--c-yellow-soft-2: #c99513;--c-teal: #086367;--c-teal-light: #33898d;--c-white-dark: #f8f8f8;--c-black-darker: #0d121b;--c-black: #111827;--c-black-light: #161f32;--c-black-lighter: #262a44;--c-green-1: #52ce63;--c-green-2: #8ae99c;--c-green-3: #51a256;--c-green-soft: #316334;--vp-c-brand-1: var(--vp-c-green-1);--vp-c-brand-2: var(--vp-c-green-2);--vp-c-brand-3: var(--vp-c-green-3);--vp-c-brand-soft: var(--vp-c-green-soft);--c-text-dark-1: #d9e6eb;--c-text-dark-2: #c4dde6;--c-text-dark-3: #abc4cc;--c-text-light-1: #2c3e50;--c-text-light-2: #476582;--c-text-light-3: #90a4b7;--vp-c-brand-dark: var(--c-green-soft);--vp-c-brand-darker: var(--c-green-soft);--vp-c-brand-dimm: rgba(100, 108, 255, .08);--vp-c-brand-text: var(--c-text-light-1);--c-bg-accent: var(--c-white-dark);--code-bg-color: var(--c-white-dark);--code-inline-bg-color: var(--c-white-dark);--code-font-family: "dm", source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;--code-font-size: 16px;--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-line-highlight-color: rgba(0, 0, 0, .075);--vp-code-color: var(--vp-text-color)}html.dark:root{--vp-c-brand-1: var(--c-yellow-1);--vp-c-brand-2: var(--c-yellow-2);--vp-c-brand-3: var(--c-yellow-3);--vp-c-bg-alpha-with-backdrop: rgba(20, 25, 36, .7);--vp-c-bg-alpha-without-backdrop: rgba(20, 25, 36, .9);--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-c-text-1: var(--c-text-dark-1);--vp-c-brand-text: var(--c-text-light-1);--c-text-light: var(--c-text-dark-2);--c-text-lighter: var(--c-text-dark-3);--c-divider: var(--c-divider-dark);--c-bg-accent: var(--c-black-light);--vp-c-bg: var(--c-black);--vp-c-bg-soft: var(--c-black-light);--vp-c-bg-soft-up: var(--c-black-lighter);--vp-c-bg-mute: var(--c-black-light);--vp-c-bg-soft-mute: var(--c-black-lighter);--vp-c-bg-alt: #0d121b;--vp-c-bg-elv: var(--vp-c-bg-soft);--vp-c-bg-elv-mute: var(--vp-c-bg-soft-mute);--vp-c-mute: var(--vp-c-bg-mute);--vp-c-mute-dark: var(--c-black-lighter);--vp-c-mute-darker: var(--c-black-darker);--vp-home-hero-name-background: -webkit-linear-gradient( 78deg, var(--c-yellow-2) 30%, var(--c-green-3) )}html.dark .DocSearch{--docsearch-hit-active-color: var(--c-text-light-1)}:root{--vp-button-brand-border: var(--c-yellow-soft-1);--vp-button-brand-text: var(--c-black);--vp-button-brand-bg: var(--c-yellow-1);--vp-button-brand-hover-border: var(--c-yellow-2);--vp-button-brand-hover-text: var(--c-black-darker);--vp-button-brand-hover-bg: var(--c-yellow-2);--vp-button-brand-active-border: var(--c-yellow-soft-1);--vp-button-brand-active-text: var(--c-black-darker);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: linear-gradient( 292deg, var(--c-text-light-2) 50%, var(--c-green-2) );--vp-home-hero-image-background-image: linear-gradient( 15deg, var(--c-yellow-2) 35%, var(--c-text-light-2) 15% );--vp-home-hero-image-filter: blur(40px)}.VPHero .VPImage.image-src{max-height:192px}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}.VPHero .VPImage.image-src{max-height:256px}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}.VPHero .VPImage.image-src{max-height:320px}}.become-sponsor{font-size:.9em;font-weight:700;width:auto;text-align:center;background-color:transparent;padding:.75em 2em;border-radius:2em;transition:all .15s ease;box-sizing:border-box;border:2px solid var(--c-yellow-2)}.become-sponsor:hover{background-color:var(--c-yellow-1);text-decoration:none;border-color:var(--c-yellow-1);color:var(--c-text-light-1)}.vp-doc a{text-decoration:none}.vp-doc a:hover{text-decoration:underline}.sponsors-top .become-sponsor{font-size:.75em;padding:.2em;width:auto;max-width:150px}kbd{display:inline-block;padding:3px 5px;font-size:.65em;color:var(--vp-c-text-1);vertical-align:middle;background-color:var(--vp-c-bg-mute);border:solid 1px var(--vp-c-bg-soft-mute);border-radius:6px;box-shadow:inset 0 -1px 0 var(--vp-c-bg-soft-mute);line-height:.95em}.VPLocalSearchBox[data-v-42e65fb9]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-42e65fb9]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-42e65fb9]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-42e65fb9]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-42e65fb9]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-42e65fb9]{padding:0 8px}}.search-bar[data-v-42e65fb9]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-42e65fb9]{display:block;font-size:18px}.navigate-icon[data-v-42e65fb9]{display:block;font-size:14px}.search-icon[data-v-42e65fb9]{margin:8px}@media (max-width: 767px){.search-icon[data-v-42e65fb9]{display:none}}.search-input[data-v-42e65fb9]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-42e65fb9]{padding:6px 4px}}.search-actions[data-v-42e65fb9]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-42e65fb9]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-42e65fb9]{display:none}}.search-actions button[data-v-42e65fb9]{padding:8px}.search-actions button[data-v-42e65fb9]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-42e65fb9]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-42e65fb9]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-42e65fb9]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-42e65fb9]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-42e65fb9]{display:none}}.search-keyboard-shortcuts kbd[data-v-42e65fb9]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-42e65fb9]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-42e65fb9]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-42e65fb9]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-42e65fb9]{margin:8px}}.titles[data-v-42e65fb9]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-42e65fb9]{display:flex;align-items:center;gap:4px}.title.main[data-v-42e65fb9]{font-weight:500}.title-icon[data-v-42e65fb9]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-42e65fb9]{opacity:.5}.result.selected[data-v-42e65fb9]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-42e65fb9]{position:relative}.excerpt[data-v-42e65fb9]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-42e65fb9]{opacity:1}.excerpt[data-v-42e65fb9] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-42e65fb9] mark,.excerpt[data-v-42e65fb9] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-42e65fb9] .vp-code-group .tabs{display:none}.excerpt[data-v-42e65fb9] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-42e65fb9]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-42e65fb9]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-42e65fb9],.result.selected .title-icon[data-v-42e65fb9]{color:var(--vp-c-brand-1)!important}.no-results[data-v-42e65fb9]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-42e65fb9]{flex:none}
diff --git a/previews/PR111/assets/ukjyteg.XqurVF-C.png b/previews/PR111/assets/ukjyteg.XqurVF-C.png
new file mode 100644
index 00000000..20bb0586
Binary files /dev/null and b/previews/PR111/assets/ukjyteg.XqurVF-C.png differ
diff --git a/previews/PR111/assets/uqgfueh.DTm3NE0X.png b/previews/PR111/assets/uqgfueh.DTm3NE0X.png
new file mode 100644
index 00000000..9d980487
Binary files /dev/null and b/previews/PR111/assets/uqgfueh.DTm3NE0X.png differ
diff --git a/previews/PR111/assets/whale_shark.md.2tpXRO1I.js b/previews/PR111/assets/whale_shark.md.2tpXRO1I.js
new file mode 100644
index 00000000..7da4eb47
--- /dev/null
+++ b/previews/PR111/assets/whale_shark.md.2tpXRO1I.js
@@ -0,0 +1,47 @@
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.CnUH-vym.js";const l="/Tyler.jl/previews/PR111/assets/uqgfueh.DTm3NE0X.png",k="/Tyler.jl/previews/PR111/assets/mriwyrp.B1A_CUPt.png",t="/Tyler.jl/previews/PR111/assets/whale_shark_128786.byuaqxsL.mp4",F=JSON.parse('{"title":"Whale shark's trajectory","description":"","frontmatter":{},"headers":[],"relativePath":"whale_shark.md","filePath":"whale_shark.md","lastUpdated":null}'),p={name:"whale_shark.md"};function e(E,s,r,d,g,y){return n(),a("div",null,s[0]||(s[0]=[h(`Whale shark's trajectory The full stack of Makie's ecosystem works.
Load packages
julia using Tyler, GLMakie
+using Tyler . TileProviders
+using Tyler . MapTiles
+using CSV, DataFrames
+using DataStructures : CircularBuffer
+using Downloads : download
Here, we will be using points that originally are in longitude and latitute, hence a function to transform those into the web_mercator projection is defined,
julia function to_web_mercator (lo,lat)
+ return Point2f (MapTiles . project ((lo,lat), MapTiles . wgs84, MapTiles . web_mercator))
+end
and downloading and preparing the data is done next
julia url = "https://raw.githubusercontent.com/MakieOrg/Tyler.jl/master/docs/src/assets/data/whale_shark_128786.csv"
+d = download (url)
+whale = CSV . read (d, DataFrame)
+lon = whale[ ! , :lon ]
+lat = whale[ ! , :lat ]
+steps = size (lon, 1 )
+points = to_web_mercator .(lon,lat)
+
+lomn, lomx = extrema (lon)
+lamn, lamx = extrema (lat)
+δlon = abs (lomn - lomx)
+δlat = abs (lamn - lamx)
INFO
Whale shark movements in Gulf of Mexico.
Contact person: Eric Hoffmayer Then a provider and the initial map are set
julia provider = TileProviders . NASAGIBS ( :ViirsEarthAtNight2012 )
+
+set_theme! ( theme_dark ())
+fig = Figure (; size = ( 1200 , 600 ))
+ax = Axis (fig[ 1 , 1 ])
+m = Tyler . Map ( Rect2f ( Rect2f (lomn - δlon / 2 , lamn - δlat / 2 , 2 δlon, 2 δlat));
+ provider, figure = fig, axis = ax)
Initial point julia nt = 30
+trail = CircularBuffer{Point2f} (nt)
+fill! (trail, points[ 1 ]) # add correct values to the circular buffer
+trail = Observable (trail) # make it an observable
+whale = Observable (points[ 1 ])
+
+c = to_color ( :orangered )
+trailcolor = [ RGBAf (c . r, c . g, c . b, (i / nt) ^ 2.5 ) for i in 1 : nt] # fading tail
+
+objline = lines! (ax, trail; color = trailcolor, linewidth = 3 )
+objscatter = scatter! (ax, whale; markersize = 15 , color = :orangered ,
+ strokecolor = :white , strokewidth = 1.5 )
+hidedecorations! (ax)
+hidespines! (ax)
+m
Animated trajectory The animation is done by updating the Observable values
julia record (fig, "whale_shark_128786.mp4" ) do io
+ for i in 2 : steps
+ push! (trail[], points[i])
+ whale[] = points[i]
+ trail[] = trail[]
+ recordframe! (io) # record a new frame
+ end
+end
+set_theme! () # reset theme (default)
',19)]))}const c=i(p,[["render",e]]);export{F as __pageData,c as default};
diff --git a/previews/PR111/assets/whale_shark.md.2tpXRO1I.lean.js b/previews/PR111/assets/whale_shark.md.2tpXRO1I.lean.js
new file mode 100644
index 00000000..7da4eb47
--- /dev/null
+++ b/previews/PR111/assets/whale_shark.md.2tpXRO1I.lean.js
@@ -0,0 +1,47 @@
+import{_ as i,c as a,a5 as h,o as n}from"./chunks/framework.CnUH-vym.js";const l="/Tyler.jl/previews/PR111/assets/uqgfueh.DTm3NE0X.png",k="/Tyler.jl/previews/PR111/assets/mriwyrp.B1A_CUPt.png",t="/Tyler.jl/previews/PR111/assets/whale_shark_128786.byuaqxsL.mp4",F=JSON.parse('{"title":"Whale shark's trajectory","description":"","frontmatter":{},"headers":[],"relativePath":"whale_shark.md","filePath":"whale_shark.md","lastUpdated":null}'),p={name:"whale_shark.md"};function e(E,s,r,d,g,y){return n(),a("div",null,s[0]||(s[0]=[h(`Whale shark's trajectory The full stack of Makie's ecosystem works.
Load packages
julia using Tyler, GLMakie
+using Tyler . TileProviders
+using Tyler . MapTiles
+using CSV, DataFrames
+using DataStructures : CircularBuffer
+using Downloads : download
Here, we will be using points that originally are in longitude and latitute, hence a function to transform those into the web_mercator projection is defined,
julia function to_web_mercator (lo,lat)
+ return Point2f (MapTiles . project ((lo,lat), MapTiles . wgs84, MapTiles . web_mercator))
+end
and downloading and preparing the data is done next
julia url = "https://raw.githubusercontent.com/MakieOrg/Tyler.jl/master/docs/src/assets/data/whale_shark_128786.csv"
+d = download (url)
+whale = CSV . read (d, DataFrame)
+lon = whale[ ! , :lon ]
+lat = whale[ ! , :lat ]
+steps = size (lon, 1 )
+points = to_web_mercator .(lon,lat)
+
+lomn, lomx = extrema (lon)
+lamn, lamx = extrema (lat)
+δlon = abs (lomn - lomx)
+δlat = abs (lamn - lamx)
INFO
Whale shark movements in Gulf of Mexico.
Contact person: Eric Hoffmayer Then a provider and the initial map are set
julia provider = TileProviders . NASAGIBS ( :ViirsEarthAtNight2012 )
+
+set_theme! ( theme_dark ())
+fig = Figure (; size = ( 1200 , 600 ))
+ax = Axis (fig[ 1 , 1 ])
+m = Tyler . Map ( Rect2f ( Rect2f (lomn - δlon / 2 , lamn - δlat / 2 , 2 δlon, 2 δlat));
+ provider, figure = fig, axis = ax)
Initial point julia nt = 30
+trail = CircularBuffer{Point2f} (nt)
+fill! (trail, points[ 1 ]) # add correct values to the circular buffer
+trail = Observable (trail) # make it an observable
+whale = Observable (points[ 1 ])
+
+c = to_color ( :orangered )
+trailcolor = [ RGBAf (c . r, c . g, c . b, (i / nt) ^ 2.5 ) for i in 1 : nt] # fading tail
+
+objline = lines! (ax, trail; color = trailcolor, linewidth = 3 )
+objscatter = scatter! (ax, whale; markersize = 15 , color = :orangered ,
+ strokecolor = :white , strokewidth = 1.5 )
+hidedecorations! (ax)
+hidespines! (ax)
+m
Animated trajectory The animation is done by updating the Observable values
julia record (fig, "whale_shark_128786.mp4" ) do io
+ for i in 2 : steps
+ push! (trail[], points[i])
+ whale[] = points[i]
+ trail[] = trail[]
+ recordframe! (io) # record a new frame
+ end
+end
+set_theme! () # reset theme (default)
',19)]))}const c=i(p,[["render",e]]);export{F as __pageData,c as default};
diff --git a/previews/PR111/assets/whale_shark_128786.byuaqxsL.mp4 b/previews/PR111/assets/whale_shark_128786.byuaqxsL.mp4
new file mode 100644
index 00000000..8d10d514
Binary files /dev/null and b/previews/PR111/assets/whale_shark_128786.byuaqxsL.mp4 differ
diff --git a/previews/PR111/assets/zjgwwcz.BJUw9D1D.png b/previews/PR111/assets/zjgwwcz.BJUw9D1D.png
new file mode 100644
index 00000000..191f5a49
Binary files /dev/null and b/previews/PR111/assets/zjgwwcz.BJUw9D1D.png differ
diff --git a/previews/PR111/favicon.png b/previews/PR111/favicon.png
new file mode 100644
index 00000000..529a6281
Binary files /dev/null and b/previews/PR111/favicon.png differ
diff --git a/previews/PR111/getting_started.html b/previews/PR111/getting_started.html
new file mode 100644
index 00000000..53f24034
--- /dev/null
+++ b/previews/PR111/getting_started.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+ Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/hashmap.json b/previews/PR111/hashmap.json
new file mode 100644
index 00000000..01fc7f1b
--- /dev/null
+++ b/previews/PR111/hashmap.json
@@ -0,0 +1 @@
+{"api.md":"QdOlLcWB","getting_started.md":"BzsA164f","iceloss_ex.md":"Cfn4zoy5","index.md":"BXBSKqxG","interpolation.md":"Bb1axPxP","map-3d.md":"BJWlq00L","osmmakie.md":"FALAiTes","points_poly_text.md":"bXzzx-R9","whale_shark.md":"2tpXRO1I"}
diff --git a/previews/PR111/iceloss_ex.html b/previews/PR111/iceloss_ex.html
new file mode 100644
index 00000000..0ae227de
--- /dev/null
+++ b/previews/PR111/iceloss_ex.html
@@ -0,0 +1,71 @@
+
+
+
+
+
+ Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/index.html b/previews/PR111/index.html
new file mode 100644
index 00000000..3b1a919b
--- /dev/null
+++ b/previews/PR111/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+ Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skip to content Tyler.jl Maps
Download Map Tiles on Demand
TileProviders A large collection of tile providers.
Makie integration Well integrated with the Makie ecosystem.
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/interpolation.html b/previews/PR111/interpolation.html
new file mode 100644
index 00000000..3989c4ad
--- /dev/null
+++ b/previews/PR111/interpolation.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+ Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/logo.ico b/previews/PR111/logo.ico
new file mode 100644
index 00000000..529a6281
Binary files /dev/null and b/previews/PR111/logo.ico differ
diff --git a/previews/PR111/logo.png b/previews/PR111/logo.png
new file mode 100644
index 00000000..529a6281
Binary files /dev/null and b/previews/PR111/logo.png differ
diff --git a/previews/PR111/map-3d.html b/previews/PR111/map-3d.html
new file mode 100644
index 00000000..20d47e68
--- /dev/null
+++ b/previews/PR111/map-3d.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+ Map3D | Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/osmmakie.html b/previews/PR111/osmmakie.html
new file mode 100644
index 00000000..213eb206
--- /dev/null
+++ b/previews/PR111/osmmakie.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+ Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/points_poly_text.html b/previews/PR111/points_poly_text.html
new file mode 100644
index 00000000..083e5978
--- /dev/null
+++ b/previews/PR111/points_poly_text.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+ Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/previews/PR111/siteinfo.js b/previews/PR111/siteinfo.js
new file mode 100644
index 00000000..aa071f11
--- /dev/null
+++ b/previews/PR111/siteinfo.js
@@ -0,0 +1 @@
+var DOCUMENTER_CURRENT_VERSION = "previews/PR111";
diff --git a/previews/PR111/vp-icons.css b/previews/PR111/vp-icons.css
new file mode 100644
index 00000000..ddc5bd8e
--- /dev/null
+++ b/previews/PR111/vp-icons.css
@@ -0,0 +1 @@
+.vpi-social-github{--icon:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}
\ No newline at end of file
diff --git a/previews/PR111/whale_shark.html b/previews/PR111/whale_shark.html
new file mode 100644
index 00000000..06fe77f9
--- /dev/null
+++ b/previews/PR111/whale_shark.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+ Whale shark's trajectory | Tyler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file